aws-sdk-ec2 0.24.0

AWS SDK for Amazon Elastic Compute Cloud
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 Elastic Compute Cloud
///
/// Client for invoking operations on Amazon Elastic Compute Cloud. Each operation on Amazon Elastic Compute Cloud 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_ec2::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_ec2::config::Builder::from(&shared_config)
///   .retry_config(RetryConfig::disabled())
///   .build();
/// let client = aws_sdk_ec2::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 [`AcceptAddressTransfer`](crate::client::fluent_builders::AcceptAddressTransfer) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`address(impl Into<String>)`](crate::client::fluent_builders::AcceptAddressTransfer::address) / [`set_address(Option<String>)`](crate::client::fluent_builders::AcceptAddressTransfer::set_address): <p>The Elastic IP address you are accepting for transfer.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::AcceptAddressTransfer::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::AcceptAddressTransfer::set_tag_specifications): <p> <code>tag</code>:<key>    - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key    <code>Owner</code> and the value    <code>TeamA</code>, specify    <code>tag:Owner</code> for the filter name and    <code>TeamA</code> for the filter value.  </key></p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AcceptAddressTransfer::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AcceptAddressTransfer::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AcceptAddressTransferOutput`](crate::output::AcceptAddressTransferOutput) with field(s):
    ///   - [`address_transfer(Option<AddressTransfer>)`](crate::output::AcceptAddressTransferOutput::address_transfer): <p>An Elastic IP address transfer.</p>
    /// - On failure, responds with [`SdkError<AcceptAddressTransferError>`](crate::error::AcceptAddressTransferError)
    pub fn accept_address_transfer(&self) -> fluent_builders::AcceptAddressTransfer {
        fluent_builders::AcceptAddressTransfer::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AcceptReservedInstancesExchangeQuote`](crate::client::fluent_builders::AcceptReservedInstancesExchangeQuote) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AcceptReservedInstancesExchangeQuote::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AcceptReservedInstancesExchangeQuote::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`reserved_instance_ids(Vec<String>)`](crate::client::fluent_builders::AcceptReservedInstancesExchangeQuote::reserved_instance_ids) / [`set_reserved_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::AcceptReservedInstancesExchangeQuote::set_reserved_instance_ids): <p>The IDs of the Convertible Reserved Instances to exchange for another Convertible Reserved Instance of the same or higher value.</p>
    ///   - [`target_configurations(Vec<TargetConfigurationRequest>)`](crate::client::fluent_builders::AcceptReservedInstancesExchangeQuote::target_configurations) / [`set_target_configurations(Option<Vec<TargetConfigurationRequest>>)`](crate::client::fluent_builders::AcceptReservedInstancesExchangeQuote::set_target_configurations): <p>The configuration of the target Convertible Reserved Instance to exchange for your current Convertible Reserved Instances.</p>
    /// - On success, responds with [`AcceptReservedInstancesExchangeQuoteOutput`](crate::output::AcceptReservedInstancesExchangeQuoteOutput) with field(s):
    ///   - [`exchange_id(Option<String>)`](crate::output::AcceptReservedInstancesExchangeQuoteOutput::exchange_id): <p>The ID of the successful exchange.</p>
    /// - On failure, responds with [`SdkError<AcceptReservedInstancesExchangeQuoteError>`](crate::error::AcceptReservedInstancesExchangeQuoteError)
    pub fn accept_reserved_instances_exchange_quote(
        &self,
    ) -> fluent_builders::AcceptReservedInstancesExchangeQuote {
        fluent_builders::AcceptReservedInstancesExchangeQuote::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AcceptTransitGatewayMulticastDomainAssociations`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::set_transit_gateway_attachment_id): <p>The ID of the transit gateway attachment.</p>
    ///   - [`subnet_ids(Vec<String>)`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::subnet_ids) / [`set_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::set_subnet_ids): <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AcceptTransitGatewayMulticastDomainAssociationsOutput`](crate::output::AcceptTransitGatewayMulticastDomainAssociationsOutput) with field(s):
    ///   - [`associations(Option<TransitGatewayMulticastDomainAssociations>)`](crate::output::AcceptTransitGatewayMulticastDomainAssociationsOutput::associations): <p>Information about the multicast domain associations.</p>
    /// - On failure, responds with [`SdkError<AcceptTransitGatewayMulticastDomainAssociationsError>`](crate::error::AcceptTransitGatewayMulticastDomainAssociationsError)
    pub fn accept_transit_gateway_multicast_domain_associations(
        &self,
    ) -> fluent_builders::AcceptTransitGatewayMulticastDomainAssociations {
        fluent_builders::AcceptTransitGatewayMulticastDomainAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AcceptTransitGatewayPeeringAttachment`](crate::client::fluent_builders::AcceptTransitGatewayPeeringAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::AcceptTransitGatewayPeeringAttachment::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::AcceptTransitGatewayPeeringAttachment::set_transit_gateway_attachment_id): <p>The ID of the transit gateway attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AcceptTransitGatewayPeeringAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AcceptTransitGatewayPeeringAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AcceptTransitGatewayPeeringAttachmentOutput`](crate::output::AcceptTransitGatewayPeeringAttachmentOutput) with field(s):
    ///   - [`transit_gateway_peering_attachment(Option<TransitGatewayPeeringAttachment>)`](crate::output::AcceptTransitGatewayPeeringAttachmentOutput::transit_gateway_peering_attachment): <p>The transit gateway peering attachment.</p>
    /// - On failure, responds with [`SdkError<AcceptTransitGatewayPeeringAttachmentError>`](crate::error::AcceptTransitGatewayPeeringAttachmentError)
    pub fn accept_transit_gateway_peering_attachment(
        &self,
    ) -> fluent_builders::AcceptTransitGatewayPeeringAttachment {
        fluent_builders::AcceptTransitGatewayPeeringAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AcceptTransitGatewayVpcAttachment`](crate::client::fluent_builders::AcceptTransitGatewayVpcAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::AcceptTransitGatewayVpcAttachment::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::AcceptTransitGatewayVpcAttachment::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AcceptTransitGatewayVpcAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AcceptTransitGatewayVpcAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AcceptTransitGatewayVpcAttachmentOutput`](crate::output::AcceptTransitGatewayVpcAttachmentOutput) with field(s):
    ///   - [`transit_gateway_vpc_attachment(Option<TransitGatewayVpcAttachment>)`](crate::output::AcceptTransitGatewayVpcAttachmentOutput::transit_gateway_vpc_attachment): <p>The VPC attachment.</p>
    /// - On failure, responds with [`SdkError<AcceptTransitGatewayVpcAttachmentError>`](crate::error::AcceptTransitGatewayVpcAttachmentError)
    pub fn accept_transit_gateway_vpc_attachment(
        &self,
    ) -> fluent_builders::AcceptTransitGatewayVpcAttachment {
        fluent_builders::AcceptTransitGatewayVpcAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AcceptVpcEndpointConnections`](crate::client::fluent_builders::AcceptVpcEndpointConnections) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AcceptVpcEndpointConnections::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AcceptVpcEndpointConnections::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_id(impl Into<String>)`](crate::client::fluent_builders::AcceptVpcEndpointConnections::service_id) / [`set_service_id(Option<String>)`](crate::client::fluent_builders::AcceptVpcEndpointConnections::set_service_id): <p>The ID of the VPC endpoint service.</p>
    ///   - [`vpc_endpoint_ids(Vec<String>)`](crate::client::fluent_builders::AcceptVpcEndpointConnections::vpc_endpoint_ids) / [`set_vpc_endpoint_ids(Option<Vec<String>>)`](crate::client::fluent_builders::AcceptVpcEndpointConnections::set_vpc_endpoint_ids): <p>The IDs of the interface VPC endpoints.</p>
    /// - On success, responds with [`AcceptVpcEndpointConnectionsOutput`](crate::output::AcceptVpcEndpointConnectionsOutput) with field(s):
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::AcceptVpcEndpointConnectionsOutput::unsuccessful): <p>Information about the interface endpoints that were not accepted, if applicable.</p>
    /// - On failure, responds with [`SdkError<AcceptVpcEndpointConnectionsError>`](crate::error::AcceptVpcEndpointConnectionsError)
    pub fn accept_vpc_endpoint_connections(&self) -> fluent_builders::AcceptVpcEndpointConnections {
        fluent_builders::AcceptVpcEndpointConnections::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AcceptVpcPeeringConnection`](crate::client::fluent_builders::AcceptVpcPeeringConnection) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AcceptVpcPeeringConnection::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AcceptVpcPeeringConnection::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_peering_connection_id(impl Into<String>)`](crate::client::fluent_builders::AcceptVpcPeeringConnection::vpc_peering_connection_id) / [`set_vpc_peering_connection_id(Option<String>)`](crate::client::fluent_builders::AcceptVpcPeeringConnection::set_vpc_peering_connection_id): <p>The ID of the VPC peering connection. You must specify this parameter in the request.</p>
    /// - On success, responds with [`AcceptVpcPeeringConnectionOutput`](crate::output::AcceptVpcPeeringConnectionOutput) with field(s):
    ///   - [`vpc_peering_connection(Option<VpcPeeringConnection>)`](crate::output::AcceptVpcPeeringConnectionOutput::vpc_peering_connection): <p>Information about the VPC peering connection.</p>
    /// - On failure, responds with [`SdkError<AcceptVpcPeeringConnectionError>`](crate::error::AcceptVpcPeeringConnectionError)
    pub fn accept_vpc_peering_connection(&self) -> fluent_builders::AcceptVpcPeeringConnection {
        fluent_builders::AcceptVpcPeeringConnection::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AdvertiseByoipCidr`](crate::client::fluent_builders::AdvertiseByoipCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::AdvertiseByoipCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::AdvertiseByoipCidr::set_cidr): <p>The address range, in CIDR notation. This must be the exact range that you provisioned. You can't advertise only a portion of the provisioned range.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AdvertiseByoipCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AdvertiseByoipCidr::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AdvertiseByoipCidrOutput`](crate::output::AdvertiseByoipCidrOutput) with field(s):
    ///   - [`byoip_cidr(Option<ByoipCidr>)`](crate::output::AdvertiseByoipCidrOutput::byoip_cidr): <p>Information about the address range.</p>
    /// - On failure, responds with [`SdkError<AdvertiseByoipCidrError>`](crate::error::AdvertiseByoipCidrError)
    pub fn advertise_byoip_cidr(&self) -> fluent_builders::AdvertiseByoipCidr {
        fluent_builders::AdvertiseByoipCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AllocateAddress`](crate::client::fluent_builders::AllocateAddress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`domain(DomainType)`](crate::client::fluent_builders::AllocateAddress::domain) / [`set_domain(Option<DomainType>)`](crate::client::fluent_builders::AllocateAddress::set_domain): <p>Indicates whether the Elastic IP address is for use with instances in a VPC or instances in EC2-Classic.</p>  <p>Default: If the Region supports EC2-Classic, the default is <code>standard</code>. Otherwise, the default is <code>vpc</code>.</p>
    ///   - [`address(impl Into<String>)`](crate::client::fluent_builders::AllocateAddress::address) / [`set_address(Option<String>)`](crate::client::fluent_builders::AllocateAddress::set_address): <p>[EC2-VPC] The Elastic IP address to recover or an IPv4 address from an address pool.</p>
    ///   - [`public_ipv4_pool(impl Into<String>)`](crate::client::fluent_builders::AllocateAddress::public_ipv4_pool) / [`set_public_ipv4_pool(Option<String>)`](crate::client::fluent_builders::AllocateAddress::set_public_ipv4_pool): <p>The ID of an address pool that you own. Use this parameter to let Amazon EC2 select an address from the address pool. To specify a specific address from the address pool, use the <code>Address</code> parameter instead.</p>
    ///   - [`network_border_group(impl Into<String>)`](crate::client::fluent_builders::AllocateAddress::network_border_group) / [`set_network_border_group(Option<String>)`](crate::client::fluent_builders::AllocateAddress::set_network_border_group): <p> A unique set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses. Use this parameter to limit the IP address to this location. IP addresses cannot move between network border groups.</p>  <p>Use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html">DescribeAvailabilityZones</a> to view the network border groups.</p>  <p>You cannot use a network border group with EC2 Classic. If you attempt this operation on EC2 Classic, you receive an <code>InvalidParameterCombination</code> error.</p>
    ///   - [`customer_owned_ipv4_pool(impl Into<String>)`](crate::client::fluent_builders::AllocateAddress::customer_owned_ipv4_pool) / [`set_customer_owned_ipv4_pool(Option<String>)`](crate::client::fluent_builders::AllocateAddress::set_customer_owned_ipv4_pool): <p>The ID of a customer-owned address pool. Use this parameter to let Amazon EC2 select an address from the address pool. Alternatively, specify a specific address from the address pool.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AllocateAddress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AllocateAddress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::AllocateAddress::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::AllocateAddress::set_tag_specifications): <p>The tags to assign to the Elastic IP address.</p>
    /// - On success, responds with [`AllocateAddressOutput`](crate::output::AllocateAddressOutput) with field(s):
    ///   - [`public_ip(Option<String>)`](crate::output::AllocateAddressOutput::public_ip): <p>The Elastic IP address.</p>
    ///   - [`allocation_id(Option<String>)`](crate::output::AllocateAddressOutput::allocation_id): <p>[EC2-VPC] The ID that Amazon Web Services assigns to represent the allocation of the Elastic IP address for use with instances in a VPC.</p>
    ///   - [`public_ipv4_pool(Option<String>)`](crate::output::AllocateAddressOutput::public_ipv4_pool): <p>The ID of an address pool.</p>
    ///   - [`network_border_group(Option<String>)`](crate::output::AllocateAddressOutput::network_border_group): <p>The set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses.</p>
    ///   - [`domain(Option<DomainType>)`](crate::output::AllocateAddressOutput::domain): <p>Indicates whether the Elastic IP address is for use with instances in a VPC (<code>vpc</code>) or instances in EC2-Classic (<code>standard</code>).</p>
    ///   - [`customer_owned_ip(Option<String>)`](crate::output::AllocateAddressOutput::customer_owned_ip): <p>The customer-owned IP address.</p>
    ///   - [`customer_owned_ipv4_pool(Option<String>)`](crate::output::AllocateAddressOutput::customer_owned_ipv4_pool): <p>The ID of the customer-owned address pool.</p>
    ///   - [`carrier_ip(Option<String>)`](crate::output::AllocateAddressOutput::carrier_ip): <p>The carrier IP address. This option is only available for network interfaces which reside in a subnet in a Wavelength Zone (for example an EC2 instance). </p>
    /// - On failure, responds with [`SdkError<AllocateAddressError>`](crate::error::AllocateAddressError)
    pub fn allocate_address(&self) -> fluent_builders::AllocateAddress {
        fluent_builders::AllocateAddress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AllocateHosts`](crate::client::fluent_builders::AllocateHosts) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`auto_placement(AutoPlacement)`](crate::client::fluent_builders::AllocateHosts::auto_placement) / [`set_auto_placement(Option<AutoPlacement>)`](crate::client::fluent_builders::AllocateHosts::set_auto_placement): <p>Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding"> Understanding auto-placement and affinity</a> in the <i>Amazon EC2 User Guide</i>.</p>  <p>Default: <code>on</code> </p>
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::AllocateHosts::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::AllocateHosts::set_availability_zone): <p>The Availability Zone in which to allocate the Dedicated Host.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::AllocateHosts::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::AllocateHosts::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`instance_type(impl Into<String>)`](crate::client::fluent_builders::AllocateHosts::instance_type) / [`set_instance_type(Option<String>)`](crate::client::fluent_builders::AllocateHosts::set_instance_type): <p>Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only.</p>  <p>If you want the Dedicated Hosts to support multiple instance types in a specific instance family, omit this parameter and specify <b>InstanceFamily</b> instead. You cannot specify <b>InstanceType</b> and <b>InstanceFamily</b> in the same request.</p>
    ///   - [`instance_family(impl Into<String>)`](crate::client::fluent_builders::AllocateHosts::instance_family) / [`set_instance_family(Option<String>)`](crate::client::fluent_builders::AllocateHosts::set_instance_family): <p>Specifies the instance family to be supported by the Dedicated Hosts. If you specify an instance family, the Dedicated Hosts support multiple instance types within that instance family.</p>  <p>If you want the Dedicated Hosts to support a specific instance type only, omit this parameter and specify <b>InstanceType</b> instead. You cannot specify <b>InstanceFamily</b> and <b>InstanceType</b> in the same request.</p>
    ///   - [`quantity(i32)`](crate::client::fluent_builders::AllocateHosts::quantity) / [`set_quantity(Option<i32>)`](crate::client::fluent_builders::AllocateHosts::set_quantity): <p>The number of Dedicated Hosts to allocate to your account with these parameters.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::AllocateHosts::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::AllocateHosts::set_tag_specifications): <p>The tags to apply to the Dedicated Host during creation.</p>
    ///   - [`host_recovery(HostRecovery)`](crate::client::fluent_builders::AllocateHosts::host_recovery) / [`set_host_recovery(Option<HostRecovery>)`](crate::client::fluent_builders::AllocateHosts::set_host_recovery): <p>Indicates whether to enable or disable host recovery for the Dedicated Host. Host recovery is disabled by default. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html"> Host recovery</a> in the <i>Amazon EC2 User Guide</i>.</p>  <p>Default: <code>off</code> </p>
    ///   - [`outpost_arn(impl Into<String>)`](crate::client::fluent_builders::AllocateHosts::outpost_arn) / [`set_outpost_arn(Option<String>)`](crate::client::fluent_builders::AllocateHosts::set_outpost_arn): <p>The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on which to allocate the Dedicated Host.</p>
    /// - On success, responds with [`AllocateHostsOutput`](crate::output::AllocateHostsOutput) with field(s):
    ///   - [`host_ids(Option<Vec<String>>)`](crate::output::AllocateHostsOutput::host_ids): <p>The ID of the allocated Dedicated Host. This is used to launch an instance onto a specific host.</p>
    /// - On failure, responds with [`SdkError<AllocateHostsError>`](crate::error::AllocateHostsError)
    pub fn allocate_hosts(&self) -> fluent_builders::AllocateHosts {
        fluent_builders::AllocateHosts::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AllocateIpamPoolCidr`](crate::client::fluent_builders::AllocateIpamPoolCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AllocateIpamPoolCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::set_ipam_pool_id): <p>The ID of the IPAM pool from which you would like to allocate a CIDR.</p>
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::set_cidr): <p>The CIDR you would like to allocate from the IPAM pool. Note the following:</p>  <ul>   <li> <p>If there is no DefaultNetmaskLength allocation rule set on the pool, you must specify either the NetmaskLength or the CIDR.</p> </li>   <li> <p>If the DefaultNetmaskLength allocation rule is set on the pool, you can specify either the NetmaskLength or the CIDR and the DefaultNetmaskLength allocation rule will be ignored.</p> </li>  </ul>  <p>Possible values: Any available IPv4 or IPv6 CIDR.</p>
    ///   - [`netmask_length(i32)`](crate::client::fluent_builders::AllocateIpamPoolCidr::netmask_length) / [`set_netmask_length(Option<i32>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::set_netmask_length): <p>The netmask length of the CIDR you would like to allocate from the IPAM pool. Note the following:</p>  <ul>   <li> <p>If there is no DefaultNetmaskLength allocation rule set on the pool, you must specify either the NetmaskLength or the CIDR.</p> </li>   <li> <p>If the DefaultNetmaskLength allocation rule is set on the pool, you can specify either the NetmaskLength or the CIDR and the DefaultNetmaskLength allocation rule will be ignored.</p> </li>  </ul>  <p>Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::set_client_token): <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::set_description): <p>A description for the allocation.</p>
    ///   - [`preview_next_cidr(bool)`](crate::client::fluent_builders::AllocateIpamPoolCidr::preview_next_cidr) / [`set_preview_next_cidr(Option<bool>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::set_preview_next_cidr): <p>A preview of the next available CIDR in a pool.</p>
    ///   - [`disallowed_cidrs(Vec<String>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::disallowed_cidrs) / [`set_disallowed_cidrs(Option<Vec<String>>)`](crate::client::fluent_builders::AllocateIpamPoolCidr::set_disallowed_cidrs): <p>Exclude a particular CIDR range from being returned by the pool. Disallowed CIDRs are only allowed if using netmask length for allocation.</p>
    /// - On success, responds with [`AllocateIpamPoolCidrOutput`](crate::output::AllocateIpamPoolCidrOutput) with field(s):
    ///   - [`ipam_pool_allocation(Option<IpamPoolAllocation>)`](crate::output::AllocateIpamPoolCidrOutput::ipam_pool_allocation): <p>Information about the allocation created.</p>
    /// - On failure, responds with [`SdkError<AllocateIpamPoolCidrError>`](crate::error::AllocateIpamPoolCidrError)
    pub fn allocate_ipam_pool_cidr(&self) -> fluent_builders::AllocateIpamPoolCidr {
        fluent_builders::AllocateIpamPoolCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ApplySecurityGroupsToClientVpnTargetNetwork`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::set_vpc_id): <p>The ID of the VPC in which the associated target network is located.</p>
    ///   - [`security_group_ids(Vec<String>)`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::security_group_ids) / [`set_security_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::set_security_group_ids): <p>The IDs of the security groups to apply to the associated target network. Up to 5 security groups can be applied to an associated target network.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ApplySecurityGroupsToClientVpnTargetNetworkOutput`](crate::output::ApplySecurityGroupsToClientVpnTargetNetworkOutput) with field(s):
    ///   - [`security_group_ids(Option<Vec<String>>)`](crate::output::ApplySecurityGroupsToClientVpnTargetNetworkOutput::security_group_ids): <p>The IDs of the applied security groups.</p>
    /// - On failure, responds with [`SdkError<ApplySecurityGroupsToClientVpnTargetNetworkError>`](crate::error::ApplySecurityGroupsToClientVpnTargetNetworkError)
    pub fn apply_security_groups_to_client_vpn_target_network(
        &self,
    ) -> fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork {
        fluent_builders::ApplySecurityGroupsToClientVpnTargetNetwork::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssignIpv6Addresses`](crate::client::fluent_builders::AssignIpv6Addresses) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`ipv6_address_count(i32)`](crate::client::fluent_builders::AssignIpv6Addresses::ipv6_address_count) / [`set_ipv6_address_count(Option<i32>)`](crate::client::fluent_builders::AssignIpv6Addresses::set_ipv6_address_count): <p>The number of additional IPv6 addresses to assign to the network interface. The specified number of IPv6 addresses are assigned in addition to the existing IPv6 addresses that are already assigned to the network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses.</p>
    ///   - [`ipv6_addresses(Vec<String>)`](crate::client::fluent_builders::AssignIpv6Addresses::ipv6_addresses) / [`set_ipv6_addresses(Option<Vec<String>>)`](crate::client::fluent_builders::AssignIpv6Addresses::set_ipv6_addresses): <p>The IPv6 addresses to be assigned to the network interface. You can't use this option if you're specifying a number of IPv6 addresses.</p>
    ///   - [`ipv6_prefix_count(i32)`](crate::client::fluent_builders::AssignIpv6Addresses::ipv6_prefix_count) / [`set_ipv6_prefix_count(Option<i32>)`](crate::client::fluent_builders::AssignIpv6Addresses::set_ipv6_prefix_count): <p>The number of IPv6 prefixes that Amazon Web Services automatically assigns to the network interface. You cannot use this option if you use the <code>Ipv6Prefixes</code> option.</p>
    ///   - [`ipv6_prefixes(Vec<String>)`](crate::client::fluent_builders::AssignIpv6Addresses::ipv6_prefixes) / [`set_ipv6_prefixes(Option<Vec<String>>)`](crate::client::fluent_builders::AssignIpv6Addresses::set_ipv6_prefixes): <p>One or more IPv6 prefixes assigned to the network interface. You cannot use this option if you use the <code>Ipv6PrefixCount</code> option.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::AssignIpv6Addresses::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::AssignIpv6Addresses::set_network_interface_id): <p>The ID of the network interface.</p>
    /// - On success, responds with [`AssignIpv6AddressesOutput`](crate::output::AssignIpv6AddressesOutput) with field(s):
    ///   - [`assigned_ipv6_addresses(Option<Vec<String>>)`](crate::output::AssignIpv6AddressesOutput::assigned_ipv6_addresses): <p>The new IPv6 addresses assigned to the network interface. Existing IPv6 addresses that were assigned to the network interface before the request are not included.</p>
    ///   - [`assigned_ipv6_prefixes(Option<Vec<String>>)`](crate::output::AssignIpv6AddressesOutput::assigned_ipv6_prefixes): <p>The IPv6 prefixes that are assigned to the network interface.</p>
    ///   - [`network_interface_id(Option<String>)`](crate::output::AssignIpv6AddressesOutput::network_interface_id): <p>The ID of the network interface.</p>
    /// - On failure, responds with [`SdkError<AssignIpv6AddressesError>`](crate::error::AssignIpv6AddressesError)
    pub fn assign_ipv6_addresses(&self) -> fluent_builders::AssignIpv6Addresses {
        fluent_builders::AssignIpv6Addresses::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssignPrivateIpAddresses`](crate::client::fluent_builders::AssignPrivateIpAddresses) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allow_reassignment(bool)`](crate::client::fluent_builders::AssignPrivateIpAddresses::allow_reassignment) / [`set_allow_reassignment(Option<bool>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::set_allow_reassignment): <p>Indicates whether to allow an IP address that is already assigned to another network interface or instance to be reassigned to the specified network interface.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::set_network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`private_ip_addresses(Vec<String>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::private_ip_addresses) / [`set_private_ip_addresses(Option<Vec<String>>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::set_private_ip_addresses): <p>The IP addresses to be assigned as a secondary private IP address to the network interface. You can't specify this parameter when also specifying a number of secondary IP addresses.</p>  <p>If you don't specify an IP address, Amazon EC2 automatically selects an IP address within the subnet range.</p>
    ///   - [`secondary_private_ip_address_count(i32)`](crate::client::fluent_builders::AssignPrivateIpAddresses::secondary_private_ip_address_count) / [`set_secondary_private_ip_address_count(Option<i32>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::set_secondary_private_ip_address_count): <p>The number of secondary IP addresses to assign to the network interface. You can't specify this parameter when also specifying private IP addresses.</p>
    ///   - [`ipv4_prefixes(Vec<String>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::ipv4_prefixes) / [`set_ipv4_prefixes(Option<Vec<String>>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::set_ipv4_prefixes): <p>One or more IPv4 prefixes assigned to the network interface. You cannot use this option if you use the <code>Ipv4PrefixCount</code> option.</p>
    ///   - [`ipv4_prefix_count(i32)`](crate::client::fluent_builders::AssignPrivateIpAddresses::ipv4_prefix_count) / [`set_ipv4_prefix_count(Option<i32>)`](crate::client::fluent_builders::AssignPrivateIpAddresses::set_ipv4_prefix_count): <p>The number of IPv4 prefixes that Amazon Web Services automatically assigns to the network interface. You cannot use this option if you use the <code>Ipv4 Prefixes</code> option.</p>
    /// - On success, responds with [`AssignPrivateIpAddressesOutput`](crate::output::AssignPrivateIpAddressesOutput) with field(s):
    ///   - [`network_interface_id(Option<String>)`](crate::output::AssignPrivateIpAddressesOutput::network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`assigned_private_ip_addresses(Option<Vec<AssignedPrivateIpAddress>>)`](crate::output::AssignPrivateIpAddressesOutput::assigned_private_ip_addresses): <p>The private IP addresses assigned to the network interface.</p>
    ///   - [`assigned_ipv4_prefixes(Option<Vec<Ipv4PrefixSpecification>>)`](crate::output::AssignPrivateIpAddressesOutput::assigned_ipv4_prefixes): <p>The IPv4 prefixes that are assigned to the network interface.</p>
    /// - On failure, responds with [`SdkError<AssignPrivateIpAddressesError>`](crate::error::AssignPrivateIpAddressesError)
    pub fn assign_private_ip_addresses(&self) -> fluent_builders::AssignPrivateIpAddresses {
        fluent_builders::AssignPrivateIpAddresses::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateAddress`](crate::client::fluent_builders::AssociateAddress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_id(impl Into<String>)`](crate::client::fluent_builders::AssociateAddress::allocation_id) / [`set_allocation_id(Option<String>)`](crate::client::fluent_builders::AssociateAddress::set_allocation_id): <p>[EC2-VPC] The allocation ID. This is required for EC2-VPC.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::AssociateAddress::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::AssociateAddress::set_instance_id): <p>The ID of the instance. The instance must have exactly one attached network interface. For EC2-VPC, you can specify either the instance ID or the network interface ID, but not both. For EC2-Classic, you must specify an instance ID and the instance must be in the running state.</p>
    ///   - [`public_ip(impl Into<String>)`](crate::client::fluent_builders::AssociateAddress::public_ip) / [`set_public_ip(Option<String>)`](crate::client::fluent_builders::AssociateAddress::set_public_ip): <p>[EC2-Classic] The Elastic IP address to associate with the instance. This is required for EC2-Classic.</p>
    ///   - [`allow_reassociation(bool)`](crate::client::fluent_builders::AssociateAddress::allow_reassociation) / [`set_allow_reassociation(Option<bool>)`](crate::client::fluent_builders::AssociateAddress::set_allow_reassociation): <p>[EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an Elastic IP address that is already associated with an instance or network interface to be reassociated with the specified instance or network interface. Otherwise, the operation fails. In a VPC in an EC2-VPC-only account, reassociation is automatic, therefore you can specify false to ensure the operation fails if the Elastic IP address is already associated with another resource.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateAddress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateAddress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::AssociateAddress::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::AssociateAddress::set_network_interface_id): <p>[EC2-VPC] The ID of the network interface. If the instance has more than one network interface, you must specify a network interface ID.</p>  <p>For EC2-VPC, you can specify either the instance ID or the network interface ID, but not both. </p>
    ///   - [`private_ip_address(impl Into<String>)`](crate::client::fluent_builders::AssociateAddress::private_ip_address) / [`set_private_ip_address(Option<String>)`](crate::client::fluent_builders::AssociateAddress::set_private_ip_address): <p>[EC2-VPC] The primary or secondary private IP address to associate with the Elastic IP address. If no private IP address is specified, the Elastic IP address is associated with the primary private IP address.</p>
    /// - On success, responds with [`AssociateAddressOutput`](crate::output::AssociateAddressOutput) with field(s):
    ///   - [`association_id(Option<String>)`](crate::output::AssociateAddressOutput::association_id): <p>[EC2-VPC] The ID that represents the association of the Elastic IP address with an instance.</p>
    /// - On failure, responds with [`SdkError<AssociateAddressError>`](crate::error::AssociateAddressError)
    pub fn associate_address(&self) -> fluent_builders::AssociateAddress {
        fluent_builders::AssociateAddress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateClientVpnTargetNetwork`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork::set_subnet_id): <p>The ID of the subnet to associate with the Client VPN endpoint.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateClientVpnTargetNetwork::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AssociateClientVpnTargetNetworkOutput`](crate::output::AssociateClientVpnTargetNetworkOutput) with field(s):
    ///   - [`association_id(Option<String>)`](crate::output::AssociateClientVpnTargetNetworkOutput::association_id): <p>The unique ID of the target network association.</p>
    ///   - [`status(Option<AssociationStatus>)`](crate::output::AssociateClientVpnTargetNetworkOutput::status): <p>The current state of the target network association.</p>
    /// - On failure, responds with [`SdkError<AssociateClientVpnTargetNetworkError>`](crate::error::AssociateClientVpnTargetNetworkError)
    pub fn associate_client_vpn_target_network(
        &self,
    ) -> fluent_builders::AssociateClientVpnTargetNetwork {
        fluent_builders::AssociateClientVpnTargetNetwork::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateDhcpOptions`](crate::client::fluent_builders::AssociateDhcpOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dhcp_options_id(impl Into<String>)`](crate::client::fluent_builders::AssociateDhcpOptions::dhcp_options_id) / [`set_dhcp_options_id(Option<String>)`](crate::client::fluent_builders::AssociateDhcpOptions::set_dhcp_options_id): <p>The ID of the DHCP options set, or <code>default</code> to associate no DHCP options with the VPC.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::AssociateDhcpOptions::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::AssociateDhcpOptions::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateDhcpOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateDhcpOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AssociateDhcpOptionsOutput`](crate::output::AssociateDhcpOptionsOutput)

    /// - On failure, responds with [`SdkError<AssociateDhcpOptionsError>`](crate::error::AssociateDhcpOptionsError)
    pub fn associate_dhcp_options(&self) -> fluent_builders::AssociateDhcpOptions {
        fluent_builders::AssociateDhcpOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateEnclaveCertificateIamRole`](crate::client::fluent_builders::AssociateEnclaveCertificateIamRole) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`certificate_arn(impl Into<String>)`](crate::client::fluent_builders::AssociateEnclaveCertificateIamRole::certificate_arn) / [`set_certificate_arn(Option<String>)`](crate::client::fluent_builders::AssociateEnclaveCertificateIamRole::set_certificate_arn): <p>The ARN of the ACM certificate with which to associate the IAM role.</p>
    ///   - [`role_arn(impl Into<String>)`](crate::client::fluent_builders::AssociateEnclaveCertificateIamRole::role_arn) / [`set_role_arn(Option<String>)`](crate::client::fluent_builders::AssociateEnclaveCertificateIamRole::set_role_arn): <p>The ARN of the IAM role to associate with the ACM certificate. You can associate up to 16 IAM roles with an ACM certificate.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateEnclaveCertificateIamRole::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateEnclaveCertificateIamRole::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AssociateEnclaveCertificateIamRoleOutput`](crate::output::AssociateEnclaveCertificateIamRoleOutput) with field(s):
    ///   - [`certificate_s3_bucket_name(Option<String>)`](crate::output::AssociateEnclaveCertificateIamRoleOutput::certificate_s3_bucket_name): <p>The name of the Amazon S3 bucket to which the certificate was uploaded.</p>
    ///   - [`certificate_s3_object_key(Option<String>)`](crate::output::AssociateEnclaveCertificateIamRoleOutput::certificate_s3_object_key): <p>The Amazon S3 object key where the certificate, certificate chain, and encrypted private key bundle are stored. The object key is formatted as follows: <code>role_arn</code>/<code>certificate_arn</code>.</p>
    ///   - [`encryption_kms_key_id(Option<String>)`](crate::output::AssociateEnclaveCertificateIamRoleOutput::encryption_kms_key_id): <p>The ID of the KMS key used to encrypt the private key of the certificate.</p>
    /// - On failure, responds with [`SdkError<AssociateEnclaveCertificateIamRoleError>`](crate::error::AssociateEnclaveCertificateIamRoleError)
    pub fn associate_enclave_certificate_iam_role(
        &self,
    ) -> fluent_builders::AssociateEnclaveCertificateIamRole {
        fluent_builders::AssociateEnclaveCertificateIamRole::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateIamInstanceProfile`](crate::client::fluent_builders::AssociateIamInstanceProfile) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`iam_instance_profile(IamInstanceProfileSpecification)`](crate::client::fluent_builders::AssociateIamInstanceProfile::iam_instance_profile) / [`set_iam_instance_profile(Option<IamInstanceProfileSpecification>)`](crate::client::fluent_builders::AssociateIamInstanceProfile::set_iam_instance_profile): <p>The IAM instance profile.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::AssociateIamInstanceProfile::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::AssociateIamInstanceProfile::set_instance_id): <p>The ID of the instance.</p>
    /// - On success, responds with [`AssociateIamInstanceProfileOutput`](crate::output::AssociateIamInstanceProfileOutput) with field(s):
    ///   - [`iam_instance_profile_association(Option<IamInstanceProfileAssociation>)`](crate::output::AssociateIamInstanceProfileOutput::iam_instance_profile_association): <p>Information about the IAM instance profile association.</p>
    /// - On failure, responds with [`SdkError<AssociateIamInstanceProfileError>`](crate::error::AssociateIamInstanceProfileError)
    pub fn associate_iam_instance_profile(&self) -> fluent_builders::AssociateIamInstanceProfile {
        fluent_builders::AssociateIamInstanceProfile::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateInstanceEventWindow`](crate::client::fluent_builders::AssociateInstanceEventWindow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateInstanceEventWindow::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateInstanceEventWindow::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_event_window_id(impl Into<String>)`](crate::client::fluent_builders::AssociateInstanceEventWindow::instance_event_window_id) / [`set_instance_event_window_id(Option<String>)`](crate::client::fluent_builders::AssociateInstanceEventWindow::set_instance_event_window_id): <p>The ID of the event window.</p>
    ///   - [`association_target(InstanceEventWindowAssociationRequest)`](crate::client::fluent_builders::AssociateInstanceEventWindow::association_target) / [`set_association_target(Option<InstanceEventWindowAssociationRequest>)`](crate::client::fluent_builders::AssociateInstanceEventWindow::set_association_target): <p>One or more targets associated with the specified event window.</p>
    /// - On success, responds with [`AssociateInstanceEventWindowOutput`](crate::output::AssociateInstanceEventWindowOutput) with field(s):
    ///   - [`instance_event_window(Option<InstanceEventWindow>)`](crate::output::AssociateInstanceEventWindowOutput::instance_event_window): <p>Information about the event window.</p>
    /// - On failure, responds with [`SdkError<AssociateInstanceEventWindowError>`](crate::error::AssociateInstanceEventWindowError)
    pub fn associate_instance_event_window(&self) -> fluent_builders::AssociateInstanceEventWindow {
        fluent_builders::AssociateInstanceEventWindow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateRouteTable`](crate::client::fluent_builders::AssociateRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`route_table_id(impl Into<String>)`](crate::client::fluent_builders::AssociateRouteTable::route_table_id) / [`set_route_table_id(Option<String>)`](crate::client::fluent_builders::AssociateRouteTable::set_route_table_id): <p>The ID of the route table.</p>
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::AssociateRouteTable::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::AssociateRouteTable::set_subnet_id): <p>The ID of the subnet.</p>
    ///   - [`gateway_id(impl Into<String>)`](crate::client::fluent_builders::AssociateRouteTable::gateway_id) / [`set_gateway_id(Option<String>)`](crate::client::fluent_builders::AssociateRouteTable::set_gateway_id): <p>The ID of the internet gateway or virtual private gateway.</p>
    /// - On success, responds with [`AssociateRouteTableOutput`](crate::output::AssociateRouteTableOutput) with field(s):
    ///   - [`association_id(Option<String>)`](crate::output::AssociateRouteTableOutput::association_id): <p>The route table association ID. This ID is required for disassociating the route table.</p>
    ///   - [`association_state(Option<RouteTableAssociationState>)`](crate::output::AssociateRouteTableOutput::association_state): <p>The state of the association.</p>
    /// - On failure, responds with [`SdkError<AssociateRouteTableError>`](crate::error::AssociateRouteTableError)
    pub fn associate_route_table(&self) -> fluent_builders::AssociateRouteTable {
        fluent_builders::AssociateRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateSubnetCidrBlock`](crate::client::fluent_builders::AssociateSubnetCidrBlock) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::AssociateSubnetCidrBlock::ipv6_cidr_block) / [`set_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::AssociateSubnetCidrBlock::set_ipv6_cidr_block): <p>The IPv6 CIDR block for your subnet. The subnet must have a /64 prefix length.</p>
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::AssociateSubnetCidrBlock::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::AssociateSubnetCidrBlock::set_subnet_id): <p>The ID of your subnet.</p>
    /// - On success, responds with [`AssociateSubnetCidrBlockOutput`](crate::output::AssociateSubnetCidrBlockOutput) with field(s):
    ///   - [`ipv6_cidr_block_association(Option<SubnetIpv6CidrBlockAssociation>)`](crate::output::AssociateSubnetCidrBlockOutput::ipv6_cidr_block_association): <p>Information about the IPv6 association.</p>
    ///   - [`subnet_id(Option<String>)`](crate::output::AssociateSubnetCidrBlockOutput::subnet_id): <p>The ID of the subnet.</p>
    /// - On failure, responds with [`SdkError<AssociateSubnetCidrBlockError>`](crate::error::AssociateSubnetCidrBlockError)
    pub fn associate_subnet_cidr_block(&self) -> fluent_builders::AssociateSubnetCidrBlock {
        fluent_builders::AssociateSubnetCidrBlock::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateTransitGatewayMulticastDomain`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain::set_transit_gateway_attachment_id): <p>The ID of the transit gateway attachment to associate with the transit gateway multicast domain.</p>
    ///   - [`subnet_ids(Vec<String>)`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain::subnet_ids) / [`set_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain::set_subnet_ids): <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateTransitGatewayMulticastDomain::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AssociateTransitGatewayMulticastDomainOutput`](crate::output::AssociateTransitGatewayMulticastDomainOutput) with field(s):
    ///   - [`associations(Option<TransitGatewayMulticastDomainAssociations>)`](crate::output::AssociateTransitGatewayMulticastDomainOutput::associations): <p>Information about the transit gateway multicast domain associations.</p>
    /// - On failure, responds with [`SdkError<AssociateTransitGatewayMulticastDomainError>`](crate::error::AssociateTransitGatewayMulticastDomainError)
    pub fn associate_transit_gateway_multicast_domain(
        &self,
    ) -> fluent_builders::AssociateTransitGatewayMulticastDomain {
        fluent_builders::AssociateTransitGatewayMulticastDomain::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateTransitGatewayPolicyTable`](crate::client::fluent_builders::AssociateTransitGatewayPolicyTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_policy_table_id(impl Into<String>)`](crate::client::fluent_builders::AssociateTransitGatewayPolicyTable::transit_gateway_policy_table_id) / [`set_transit_gateway_policy_table_id(Option<String>)`](crate::client::fluent_builders::AssociateTransitGatewayPolicyTable::set_transit_gateway_policy_table_id): <p>The ID of the transit gateway policy table to associate with the transit gateway attachment.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::AssociateTransitGatewayPolicyTable::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::AssociateTransitGatewayPolicyTable::set_transit_gateway_attachment_id): <p>The ID of the transit gateway attachment to associate with the policy table.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateTransitGatewayPolicyTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateTransitGatewayPolicyTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AssociateTransitGatewayPolicyTableOutput`](crate::output::AssociateTransitGatewayPolicyTableOutput) with field(s):
    ///   - [`association(Option<TransitGatewayPolicyTableAssociation>)`](crate::output::AssociateTransitGatewayPolicyTableOutput::association): <p>Describes the association of a transit gateway and a transit gateway policy table.</p>
    /// - On failure, responds with [`SdkError<AssociateTransitGatewayPolicyTableError>`](crate::error::AssociateTransitGatewayPolicyTableError)
    pub fn associate_transit_gateway_policy_table(
        &self,
    ) -> fluent_builders::AssociateTransitGatewayPolicyTable {
        fluent_builders::AssociateTransitGatewayPolicyTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateTransitGatewayRouteTable`](crate::client::fluent_builders::AssociateTransitGatewayRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::AssociateTransitGatewayRouteTable::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::AssociateTransitGatewayRouteTable::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::AssociateTransitGatewayRouteTable::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::AssociateTransitGatewayRouteTable::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateTransitGatewayRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateTransitGatewayRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AssociateTransitGatewayRouteTableOutput`](crate::output::AssociateTransitGatewayRouteTableOutput) with field(s):
    ///   - [`association(Option<TransitGatewayAssociation>)`](crate::output::AssociateTransitGatewayRouteTableOutput::association): <p>The ID of the association.</p>
    /// - On failure, responds with [`SdkError<AssociateTransitGatewayRouteTableError>`](crate::error::AssociateTransitGatewayRouteTableError)
    pub fn associate_transit_gateway_route_table(
        &self,
    ) -> fluent_builders::AssociateTransitGatewayRouteTable {
        fluent_builders::AssociateTransitGatewayRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateTrunkInterface`](crate::client::fluent_builders::AssociateTrunkInterface) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`branch_interface_id(impl Into<String>)`](crate::client::fluent_builders::AssociateTrunkInterface::branch_interface_id) / [`set_branch_interface_id(Option<String>)`](crate::client::fluent_builders::AssociateTrunkInterface::set_branch_interface_id): <p>The ID of the branch network interface.</p>
    ///   - [`trunk_interface_id(impl Into<String>)`](crate::client::fluent_builders::AssociateTrunkInterface::trunk_interface_id) / [`set_trunk_interface_id(Option<String>)`](crate::client::fluent_builders::AssociateTrunkInterface::set_trunk_interface_id): <p>The ID of the trunk network interface.</p>
    ///   - [`vlan_id(i32)`](crate::client::fluent_builders::AssociateTrunkInterface::vlan_id) / [`set_vlan_id(Option<i32>)`](crate::client::fluent_builders::AssociateTrunkInterface::set_vlan_id): <p>The ID of the VLAN. This applies to the VLAN protocol.</p>
    ///   - [`gre_key(i32)`](crate::client::fluent_builders::AssociateTrunkInterface::gre_key) / [`set_gre_key(Option<i32>)`](crate::client::fluent_builders::AssociateTrunkInterface::set_gre_key): <p>The application key. This applies to the GRE protocol.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::AssociateTrunkInterface::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::AssociateTrunkInterface::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AssociateTrunkInterface::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AssociateTrunkInterface::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AssociateTrunkInterfaceOutput`](crate::output::AssociateTrunkInterfaceOutput) with field(s):
    ///   - [`interface_association(Option<TrunkInterfaceAssociation>)`](crate::output::AssociateTrunkInterfaceOutput::interface_association): <p>Information about the association between the trunk network interface and branch network interface.</p>
    ///   - [`client_token(Option<String>)`](crate::output::AssociateTrunkInterfaceOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a>.</p>
    /// - On failure, responds with [`SdkError<AssociateTrunkInterfaceError>`](crate::error::AssociateTrunkInterfaceError)
    pub fn associate_trunk_interface(&self) -> fluent_builders::AssociateTrunkInterface {
        fluent_builders::AssociateTrunkInterface::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AssociateVpcCidrBlock`](crate::client::fluent_builders::AssociateVpcCidrBlock) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`amazon_provided_ipv6_cidr_block(bool)`](crate::client::fluent_builders::AssociateVpcCidrBlock::amazon_provided_ipv6_cidr_block) / [`set_amazon_provided_ipv6_cidr_block(Option<bool>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_amazon_provided_ipv6_cidr_block): <p>Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IPv6 addresses, or the size of the CIDR block.</p>
    ///   - [`cidr_block(impl Into<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::cidr_block) / [`set_cidr_block(Option<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_cidr_block): <p>An IPv4 CIDR block to associate with the VPC.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`ipv6_cidr_block_network_border_group(impl Into<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::ipv6_cidr_block_network_border_group) / [`set_ipv6_cidr_block_network_border_group(Option<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_ipv6_cidr_block_network_border_group): <p>The name of the location from which we advertise the IPV6 CIDR block. Use this parameter to limit the CIDR block to this location.</p>  <p> You must set <code>AmazonProvidedIpv6CidrBlock</code> to <code>true</code> to use this parameter.</p>  <p> You can have one IPv6 CIDR block association per network border group.</p>
    ///   - [`ipv6_pool(impl Into<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::ipv6_pool) / [`set_ipv6_pool(Option<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_ipv6_pool): <p>The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block.</p>
    ///   - [`ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::ipv6_cidr_block) / [`set_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_ipv6_cidr_block): <p>An IPv6 CIDR block from the IPv6 address pool. You must also specify <code>Ipv6Pool</code> in the request.</p>  <p>To let Amazon choose the IPv6 CIDR block for you, omit this parameter.</p>
    ///   - [`ipv4_ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::ipv4_ipam_pool_id) / [`set_ipv4_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_ipv4_ipam_pool_id): <p>Associate a CIDR allocated from an IPv4 IPAM pool to a VPC. For more information about Amazon VPC IP Address Manager (IPAM), see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    ///   - [`ipv4_netmask_length(i32)`](crate::client::fluent_builders::AssociateVpcCidrBlock::ipv4_netmask_length) / [`set_ipv4_netmask_length(Option<i32>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_ipv4_netmask_length): <p>The netmask length of the IPv4 CIDR you would like to associate from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    ///   - [`ipv6_ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::ipv6_ipam_pool_id) / [`set_ipv6_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_ipv6_ipam_pool_id): <p>Associates a CIDR allocated from an IPv6 IPAM pool to a VPC. For more information about Amazon VPC IP Address Manager (IPAM), see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    ///   - [`ipv6_netmask_length(i32)`](crate::client::fluent_builders::AssociateVpcCidrBlock::ipv6_netmask_length) / [`set_ipv6_netmask_length(Option<i32>)`](crate::client::fluent_builders::AssociateVpcCidrBlock::set_ipv6_netmask_length): <p>The netmask length of the IPv6 CIDR you would like to associate from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    /// - On success, responds with [`AssociateVpcCidrBlockOutput`](crate::output::AssociateVpcCidrBlockOutput) with field(s):
    ///   - [`ipv6_cidr_block_association(Option<VpcIpv6CidrBlockAssociation>)`](crate::output::AssociateVpcCidrBlockOutput::ipv6_cidr_block_association): <p>Information about the IPv6 CIDR block association.</p>
    ///   - [`cidr_block_association(Option<VpcCidrBlockAssociation>)`](crate::output::AssociateVpcCidrBlockOutput::cidr_block_association): <p>Information about the IPv4 CIDR block association.</p>
    ///   - [`vpc_id(Option<String>)`](crate::output::AssociateVpcCidrBlockOutput::vpc_id): <p>The ID of the VPC.</p>
    /// - On failure, responds with [`SdkError<AssociateVpcCidrBlockError>`](crate::error::AssociateVpcCidrBlockError)
    pub fn associate_vpc_cidr_block(&self) -> fluent_builders::AssociateVpcCidrBlock {
        fluent_builders::AssociateVpcCidrBlock::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AttachClassicLinkVpc`](crate::client::fluent_builders::AttachClassicLinkVpc) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AttachClassicLinkVpc::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AttachClassicLinkVpc::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`groups(Vec<String>)`](crate::client::fluent_builders::AttachClassicLinkVpc::groups) / [`set_groups(Option<Vec<String>>)`](crate::client::fluent_builders::AttachClassicLinkVpc::set_groups): <p>The ID of one or more of the VPC's security groups. You cannot specify security groups from a different VPC.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::AttachClassicLinkVpc::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::AttachClassicLinkVpc::set_instance_id): <p>The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::AttachClassicLinkVpc::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::AttachClassicLinkVpc::set_vpc_id): <p>The ID of a ClassicLink-enabled VPC.</p>
    /// - On success, responds with [`AttachClassicLinkVpcOutput`](crate::output::AttachClassicLinkVpcOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::AttachClassicLinkVpcOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<AttachClassicLinkVpcError>`](crate::error::AttachClassicLinkVpcError)
    pub fn attach_classic_link_vpc(&self) -> fluent_builders::AttachClassicLinkVpc {
        fluent_builders::AttachClassicLinkVpc::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AttachInternetGateway`](crate::client::fluent_builders::AttachInternetGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AttachInternetGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AttachInternetGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`internet_gateway_id(impl Into<String>)`](crate::client::fluent_builders::AttachInternetGateway::internet_gateway_id) / [`set_internet_gateway_id(Option<String>)`](crate::client::fluent_builders::AttachInternetGateway::set_internet_gateway_id): <p>The ID of the internet gateway.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::AttachInternetGateway::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::AttachInternetGateway::set_vpc_id): <p>The ID of the VPC.</p>
    /// - On success, responds with [`AttachInternetGatewayOutput`](crate::output::AttachInternetGatewayOutput)

    /// - On failure, responds with [`SdkError<AttachInternetGatewayError>`](crate::error::AttachInternetGatewayError)
    pub fn attach_internet_gateway(&self) -> fluent_builders::AttachInternetGateway {
        fluent_builders::AttachInternetGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AttachNetworkInterface`](crate::client::fluent_builders::AttachNetworkInterface) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`device_index(i32)`](crate::client::fluent_builders::AttachNetworkInterface::device_index) / [`set_device_index(Option<i32>)`](crate::client::fluent_builders::AttachNetworkInterface::set_device_index): <p>The index of the device for the network interface attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AttachNetworkInterface::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AttachNetworkInterface::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::AttachNetworkInterface::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::AttachNetworkInterface::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::AttachNetworkInterface::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::AttachNetworkInterface::set_network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`network_card_index(i32)`](crate::client::fluent_builders::AttachNetworkInterface::network_card_index) / [`set_network_card_index(Option<i32>)`](crate::client::fluent_builders::AttachNetworkInterface::set_network_card_index): <p>The index of the network card. Some instance types support multiple network cards. The primary network interface must be assigned to network card index 0. The default is network card index 0.</p>
    ///   - [`ena_srd_specification(EnaSrdSpecification)`](crate::client::fluent_builders::AttachNetworkInterface::ena_srd_specification) / [`set_ena_srd_specification(Option<EnaSrdSpecification>)`](crate::client::fluent_builders::AttachNetworkInterface::set_ena_srd_specification): <p>Configures ENA Express for the network interface that this action attaches to the instance.</p>
    /// - On success, responds with [`AttachNetworkInterfaceOutput`](crate::output::AttachNetworkInterfaceOutput) with field(s):
    ///   - [`attachment_id(Option<String>)`](crate::output::AttachNetworkInterfaceOutput::attachment_id): <p>The ID of the network interface attachment.</p>
    ///   - [`network_card_index(Option<i32>)`](crate::output::AttachNetworkInterfaceOutput::network_card_index): <p>The index of the network card.</p>
    /// - On failure, responds with [`SdkError<AttachNetworkInterfaceError>`](crate::error::AttachNetworkInterfaceError)
    pub fn attach_network_interface(&self) -> fluent_builders::AttachNetworkInterface {
        fluent_builders::AttachNetworkInterface::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AttachVerifiedAccessTrustProvider`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`verified_access_trust_provider_id(impl Into<String>)`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider::verified_access_trust_provider_id) / [`set_verified_access_trust_provider_id(Option<String>)`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider::set_verified_access_trust_provider_id): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AttachVerifiedAccessTrustProvider::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AttachVerifiedAccessTrustProviderOutput`](crate::output::AttachVerifiedAccessTrustProviderOutput) with field(s):
    ///   - [`verified_access_trust_provider(Option<VerifiedAccessTrustProvider>)`](crate::output::AttachVerifiedAccessTrustProviderOutput::verified_access_trust_provider): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`verified_access_instance(Option<VerifiedAccessInstance>)`](crate::output::AttachVerifiedAccessTrustProviderOutput::verified_access_instance): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    /// - On failure, responds with [`SdkError<AttachVerifiedAccessTrustProviderError>`](crate::error::AttachVerifiedAccessTrustProviderError)
    pub fn attach_verified_access_trust_provider(
        &self,
    ) -> fluent_builders::AttachVerifiedAccessTrustProvider {
        fluent_builders::AttachVerifiedAccessTrustProvider::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AttachVolume`](crate::client::fluent_builders::AttachVolume) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`device(impl Into<String>)`](crate::client::fluent_builders::AttachVolume::device) / [`set_device(Option<String>)`](crate::client::fluent_builders::AttachVolume::set_device): <p>The device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::AttachVolume::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::AttachVolume::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`volume_id(impl Into<String>)`](crate::client::fluent_builders::AttachVolume::volume_id) / [`set_volume_id(Option<String>)`](crate::client::fluent_builders::AttachVolume::set_volume_id): <p>The ID of the EBS volume. The volume and instance must be within the same Availability Zone.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AttachVolume::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AttachVolume::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AttachVolumeOutput`](crate::output::AttachVolumeOutput) with field(s):
    ///   - [`attach_time(Option<DateTime>)`](crate::output::AttachVolumeOutput::attach_time): <p>The time stamp when the attachment initiated.</p>
    ///   - [`device(Option<String>)`](crate::output::AttachVolumeOutput::device): <p>The device name.</p>
    ///   - [`instance_id(Option<String>)`](crate::output::AttachVolumeOutput::instance_id): <p>The ID of the instance.</p>
    ///   - [`state(Option<VolumeAttachmentState>)`](crate::output::AttachVolumeOutput::state): <p>The attachment state of the volume.</p>
    ///   - [`volume_id(Option<String>)`](crate::output::AttachVolumeOutput::volume_id): <p>The ID of the volume.</p>
    ///   - [`delete_on_termination(Option<bool>)`](crate::output::AttachVolumeOutput::delete_on_termination): <p>Indicates whether the EBS volume is deleted on instance termination.</p>
    /// - On failure, responds with [`SdkError<AttachVolumeError>`](crate::error::AttachVolumeError)
    pub fn attach_volume(&self) -> fluent_builders::AttachVolume {
        fluent_builders::AttachVolume::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AttachVpnGateway`](crate::client::fluent_builders::AttachVpnGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::AttachVpnGateway::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::AttachVpnGateway::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`vpn_gateway_id(impl Into<String>)`](crate::client::fluent_builders::AttachVpnGateway::vpn_gateway_id) / [`set_vpn_gateway_id(Option<String>)`](crate::client::fluent_builders::AttachVpnGateway::set_vpn_gateway_id): <p>The ID of the virtual private gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AttachVpnGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AttachVpnGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AttachVpnGatewayOutput`](crate::output::AttachVpnGatewayOutput) with field(s):
    ///   - [`vpc_attachment(Option<VpcAttachment>)`](crate::output::AttachVpnGatewayOutput::vpc_attachment): <p>Information about the attachment.</p>
    /// - On failure, responds with [`SdkError<AttachVpnGatewayError>`](crate::error::AttachVpnGatewayError)
    pub fn attach_vpn_gateway(&self) -> fluent_builders::AttachVpnGateway {
        fluent_builders::AttachVpnGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AuthorizeClientVpnIngress`](crate::client::fluent_builders::AuthorizeClientVpnIngress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`target_network_cidr(impl Into<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::target_network_cidr) / [`set_target_network_cidr(Option<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::set_target_network_cidr): <p>The IPv4 address range, in CIDR notation, of the network for which access is being authorized.</p>
    ///   - [`access_group_id(impl Into<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::access_group_id) / [`set_access_group_id(Option<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::set_access_group_id): <p>The ID of the group to grant access to, for example, the Active Directory group or identity provider (IdP) group. Required if <code>AuthorizeAllGroups</code> is <code>false</code> or not specified.</p>
    ///   - [`authorize_all_groups(bool)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::authorize_all_groups) / [`set_authorize_all_groups(Option<bool>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::set_authorize_all_groups): <p>Indicates whether to grant access to all clients. Specify <code>true</code> to grant all clients who successfully establish a VPN connection access to the network. Must be set to <code>true</code> if <code>AccessGroupId</code> is not specified.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::set_description): <p>A brief description of the authorization rule.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AuthorizeClientVpnIngress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`AuthorizeClientVpnIngressOutput`](crate::output::AuthorizeClientVpnIngressOutput) with field(s):
    ///   - [`status(Option<ClientVpnAuthorizationRuleStatus>)`](crate::output::AuthorizeClientVpnIngressOutput::status): <p>The current state of the authorization rule.</p>
    /// - On failure, responds with [`SdkError<AuthorizeClientVpnIngressError>`](crate::error::AuthorizeClientVpnIngressError)
    pub fn authorize_client_vpn_ingress(&self) -> fluent_builders::AuthorizeClientVpnIngress {
        fluent_builders::AuthorizeClientVpnIngress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AuthorizeSecurityGroupEgress`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_group_id): <p>The ID of the security group.</p>
    ///   - [`ip_permissions(Vec<IpPermission>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::ip_permissions) / [`set_ip_permissions(Option<Vec<IpPermission>>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_ip_permissions): <p>The sets of IP permissions. You can't specify a destination security group and a CIDR IP address range in the same set of permissions.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_tag_specifications): <p>The tags applied to the security group rule.</p>
    ///   - [`cidr_ip(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::cidr_ip) / [`set_cidr_ip(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_cidr_ip): <p>Not supported. Use a set of IP permissions to specify the CIDR.</p>
    ///   - [`from_port(i32)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::from_port) / [`set_from_port(Option<i32>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_from_port): <p>Not supported. Use a set of IP permissions to specify the port.</p>
    ///   - [`ip_protocol(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::ip_protocol) / [`set_ip_protocol(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_ip_protocol): <p>Not supported. Use a set of IP permissions to specify the protocol name or number.</p>
    ///   - [`to_port(i32)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::to_port) / [`set_to_port(Option<i32>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_to_port): <p>Not supported. Use a set of IP permissions to specify the port.</p>
    ///   - [`source_security_group_name(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::source_security_group_name) / [`set_source_security_group_name(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_source_security_group_name): <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
    ///   - [`source_security_group_owner_id(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::source_security_group_owner_id) / [`set_source_security_group_owner_id(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupEgress::set_source_security_group_owner_id): <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
    /// - On success, responds with [`AuthorizeSecurityGroupEgressOutput`](crate::output::AuthorizeSecurityGroupEgressOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::AuthorizeSecurityGroupEgressOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    ///   - [`security_group_rules(Option<Vec<SecurityGroupRule>>)`](crate::output::AuthorizeSecurityGroupEgressOutput::security_group_rules): <p>Information about the outbound (egress) security group rules that were added.</p>
    /// - On failure, responds with [`SdkError<AuthorizeSecurityGroupEgressError>`](crate::error::AuthorizeSecurityGroupEgressError)
    pub fn authorize_security_group_egress(&self) -> fluent_builders::AuthorizeSecurityGroupEgress {
        fluent_builders::AuthorizeSecurityGroupEgress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`AuthorizeSecurityGroupIngress`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr_ip(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::cidr_ip) / [`set_cidr_ip(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_cidr_ip): <p>The IPv4 address range, in CIDR format. You can't specify this parameter when specifying a source security group. To specify an IPv6 address range, use a set of IP permissions.</p>  <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
    ///   - [`from_port(i32)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::from_port) / [`set_from_port(Option<i32>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_from_port): <p>If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP, this is the type number. A value of -1 indicates all ICMP types. If you specify all ICMP types, you must specify all ICMP codes.</p>  <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_group_id): <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_group_name): <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
    ///   - [`ip_permissions(Vec<IpPermission>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::ip_permissions) / [`set_ip_permissions(Option<Vec<IpPermission>>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_ip_permissions): <p>The sets of IP permissions.</p>
    ///   - [`ip_protocol(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::ip_protocol) / [`set_ip_protocol(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_ip_protocol): <p>The IP protocol name (<code>tcp</code>, <code>udp</code>, <code>icmp</code>) or number (see <a href="http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a>). To specify <code>icmpv6</code>, use a set of IP permissions.</p>  <p>[VPC only] Use <code>-1</code> to specify all protocols. If you specify <code>-1</code> or a protocol other than <code>tcp</code>, <code>udp</code>, or <code>icmp</code>, traffic on all ports is allowed, regardless of any ports you specify.</p>  <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
    ///   - [`source_security_group_name(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::source_security_group_name) / [`set_source_security_group_name(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_source_security_group_name): <p>[EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. For EC2-VPC, the source security group must be in the same VPC.</p>
    ///   - [`source_security_group_owner_id(impl Into<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::source_security_group_owner_id) / [`set_source_security_group_owner_id(Option<String>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_source_security_group_owner_id): <p>[nondefault VPC] The Amazon Web Services account ID for the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead.</p>
    ///   - [`to_port(i32)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::to_port) / [`set_to_port(Option<i32>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_to_port): <p>If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP, this is the code. A value of -1 indicates all ICMP codes. If you specify all ICMP types, you must specify all ICMP codes.</p>  <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::AuthorizeSecurityGroupIngress::set_tag_specifications): <p>[VPC Only] The tags applied to the security group rule.</p>
    /// - On success, responds with [`AuthorizeSecurityGroupIngressOutput`](crate::output::AuthorizeSecurityGroupIngressOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::AuthorizeSecurityGroupIngressOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    ///   - [`security_group_rules(Option<Vec<SecurityGroupRule>>)`](crate::output::AuthorizeSecurityGroupIngressOutput::security_group_rules): <p>Information about the inbound (ingress) security group rules that were added.</p>
    /// - On failure, responds with [`SdkError<AuthorizeSecurityGroupIngressError>`](crate::error::AuthorizeSecurityGroupIngressError)
    pub fn authorize_security_group_ingress(
        &self,
    ) -> fluent_builders::AuthorizeSecurityGroupIngress {
        fluent_builders::AuthorizeSecurityGroupIngress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`BundleInstance`](crate::client::fluent_builders::BundleInstance) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::BundleInstance::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::BundleInstance::set_instance_id): <p>The ID of the instance to bundle.</p>  <p>Type: String</p>  <p>Default: None</p>  <p>Required: Yes</p>
    ///   - [`storage(Storage)`](crate::client::fluent_builders::BundleInstance::storage) / [`set_storage(Option<Storage>)`](crate::client::fluent_builders::BundleInstance::set_storage): <p>The bucket in which to store the AMI. You can specify a bucket that you already own or a new bucket that Amazon EC2 creates on your behalf. If you specify a bucket that belongs to someone else, Amazon EC2 returns an error.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::BundleInstance::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::BundleInstance::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`BundleInstanceOutput`](crate::output::BundleInstanceOutput) with field(s):
    ///   - [`bundle_task(Option<BundleTask>)`](crate::output::BundleInstanceOutput::bundle_task): <p>Information about the bundle task.</p>
    /// - On failure, responds with [`SdkError<BundleInstanceError>`](crate::error::BundleInstanceError)
    pub fn bundle_instance(&self) -> fluent_builders::BundleInstance {
        fluent_builders::BundleInstance::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelBundleTask`](crate::client::fluent_builders::CancelBundleTask) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`bundle_id(impl Into<String>)`](crate::client::fluent_builders::CancelBundleTask::bundle_id) / [`set_bundle_id(Option<String>)`](crate::client::fluent_builders::CancelBundleTask::set_bundle_id): <p>The ID of the bundle task.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CancelBundleTask::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CancelBundleTask::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CancelBundleTaskOutput`](crate::output::CancelBundleTaskOutput) with field(s):
    ///   - [`bundle_task(Option<BundleTask>)`](crate::output::CancelBundleTaskOutput::bundle_task): <p>Information about the bundle task.</p>
    /// - On failure, responds with [`SdkError<CancelBundleTaskError>`](crate::error::CancelBundleTaskError)
    pub fn cancel_bundle_task(&self) -> fluent_builders::CancelBundleTask {
        fluent_builders::CancelBundleTask::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelCapacityReservation`](crate::client::fluent_builders::CancelCapacityReservation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`capacity_reservation_id(impl Into<String>)`](crate::client::fluent_builders::CancelCapacityReservation::capacity_reservation_id) / [`set_capacity_reservation_id(Option<String>)`](crate::client::fluent_builders::CancelCapacityReservation::set_capacity_reservation_id): <p>The ID of the Capacity Reservation to be cancelled.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CancelCapacityReservation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CancelCapacityReservation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CancelCapacityReservationOutput`](crate::output::CancelCapacityReservationOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::CancelCapacityReservationOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<CancelCapacityReservationError>`](crate::error::CancelCapacityReservationError)
    pub fn cancel_capacity_reservation(&self) -> fluent_builders::CancelCapacityReservation {
        fluent_builders::CancelCapacityReservation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelCapacityReservationFleets`](crate::client::fluent_builders::CancelCapacityReservationFleets) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CancelCapacityReservationFleets::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CancelCapacityReservationFleets::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`capacity_reservation_fleet_ids(Vec<String>)`](crate::client::fluent_builders::CancelCapacityReservationFleets::capacity_reservation_fleet_ids) / [`set_capacity_reservation_fleet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CancelCapacityReservationFleets::set_capacity_reservation_fleet_ids): <p>The IDs of the Capacity Reservation Fleets to cancel.</p>
    /// - On success, responds with [`CancelCapacityReservationFleetsOutput`](crate::output::CancelCapacityReservationFleetsOutput) with field(s):
    ///   - [`successful_fleet_cancellations(Option<Vec<CapacityReservationFleetCancellationState>>)`](crate::output::CancelCapacityReservationFleetsOutput::successful_fleet_cancellations): <p>Information about the Capacity Reservation Fleets that were successfully cancelled.</p>
    ///   - [`failed_fleet_cancellations(Option<Vec<FailedCapacityReservationFleetCancellationResult>>)`](crate::output::CancelCapacityReservationFleetsOutput::failed_fleet_cancellations): <p>Information about the Capacity Reservation Fleets that could not be cancelled.</p>
    /// - On failure, responds with [`SdkError<CancelCapacityReservationFleetsError>`](crate::error::CancelCapacityReservationFleetsError)
    pub fn cancel_capacity_reservation_fleets(
        &self,
    ) -> fluent_builders::CancelCapacityReservationFleets {
        fluent_builders::CancelCapacityReservationFleets::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelConversionTask`](crate::client::fluent_builders::CancelConversionTask) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`conversion_task_id(impl Into<String>)`](crate::client::fluent_builders::CancelConversionTask::conversion_task_id) / [`set_conversion_task_id(Option<String>)`](crate::client::fluent_builders::CancelConversionTask::set_conversion_task_id): <p>The ID of the conversion task.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CancelConversionTask::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CancelConversionTask::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`reason_message(impl Into<String>)`](crate::client::fluent_builders::CancelConversionTask::reason_message) / [`set_reason_message(Option<String>)`](crate::client::fluent_builders::CancelConversionTask::set_reason_message): <p>The reason for canceling the conversion task.</p>
    /// - On success, responds with [`CancelConversionTaskOutput`](crate::output::CancelConversionTaskOutput)

    /// - On failure, responds with [`SdkError<CancelConversionTaskError>`](crate::error::CancelConversionTaskError)
    pub fn cancel_conversion_task(&self) -> fluent_builders::CancelConversionTask {
        fluent_builders::CancelConversionTask::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelExportTask`](crate::client::fluent_builders::CancelExportTask) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`export_task_id(impl Into<String>)`](crate::client::fluent_builders::CancelExportTask::export_task_id) / [`set_export_task_id(Option<String>)`](crate::client::fluent_builders::CancelExportTask::set_export_task_id): <p>The ID of the export task. This is the ID returned by <code>CreateInstanceExportTask</code>.</p>
    /// - On success, responds with [`CancelExportTaskOutput`](crate::output::CancelExportTaskOutput)

    /// - On failure, responds with [`SdkError<CancelExportTaskError>`](crate::error::CancelExportTaskError)
    pub fn cancel_export_task(&self) -> fluent_builders::CancelExportTask {
        fluent_builders::CancelExportTask::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelImageLaunchPermission`](crate::client::fluent_builders::CancelImageLaunchPermission) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::CancelImageLaunchPermission::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::CancelImageLaunchPermission::set_image_id): <p>The ID of the AMI that was shared with your Amazon Web Services account.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CancelImageLaunchPermission::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CancelImageLaunchPermission::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CancelImageLaunchPermissionOutput`](crate::output::CancelImageLaunchPermissionOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::CancelImageLaunchPermissionOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<CancelImageLaunchPermissionError>`](crate::error::CancelImageLaunchPermissionError)
    pub fn cancel_image_launch_permission(&self) -> fluent_builders::CancelImageLaunchPermission {
        fluent_builders::CancelImageLaunchPermission::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelImportTask`](crate::client::fluent_builders::CancelImportTask) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cancel_reason(impl Into<String>)`](crate::client::fluent_builders::CancelImportTask::cancel_reason) / [`set_cancel_reason(Option<String>)`](crate::client::fluent_builders::CancelImportTask::set_cancel_reason): <p>The reason for canceling the task.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CancelImportTask::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CancelImportTask::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`import_task_id(impl Into<String>)`](crate::client::fluent_builders::CancelImportTask::import_task_id) / [`set_import_task_id(Option<String>)`](crate::client::fluent_builders::CancelImportTask::set_import_task_id): <p>The ID of the import image or import snapshot task to be canceled.</p>
    /// - On success, responds with [`CancelImportTaskOutput`](crate::output::CancelImportTaskOutput) with field(s):
    ///   - [`import_task_id(Option<String>)`](crate::output::CancelImportTaskOutput::import_task_id): <p>The ID of the task being canceled.</p>
    ///   - [`previous_state(Option<String>)`](crate::output::CancelImportTaskOutput::previous_state): <p>The current state of the task being canceled.</p>
    ///   - [`state(Option<String>)`](crate::output::CancelImportTaskOutput::state): <p>The current state of the task being canceled.</p>
    /// - On failure, responds with [`SdkError<CancelImportTaskError>`](crate::error::CancelImportTaskError)
    pub fn cancel_import_task(&self) -> fluent_builders::CancelImportTask {
        fluent_builders::CancelImportTask::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelReservedInstancesListing`](crate::client::fluent_builders::CancelReservedInstancesListing) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`reserved_instances_listing_id(impl Into<String>)`](crate::client::fluent_builders::CancelReservedInstancesListing::reserved_instances_listing_id) / [`set_reserved_instances_listing_id(Option<String>)`](crate::client::fluent_builders::CancelReservedInstancesListing::set_reserved_instances_listing_id): <p>The ID of the Reserved Instance listing.</p>
    /// - On success, responds with [`CancelReservedInstancesListingOutput`](crate::output::CancelReservedInstancesListingOutput) with field(s):
    ///   - [`reserved_instances_listings(Option<Vec<ReservedInstancesListing>>)`](crate::output::CancelReservedInstancesListingOutput::reserved_instances_listings): <p>The Reserved Instance listing.</p>
    /// - On failure, responds with [`SdkError<CancelReservedInstancesListingError>`](crate::error::CancelReservedInstancesListingError)
    pub fn cancel_reserved_instances_listing(
        &self,
    ) -> fluent_builders::CancelReservedInstancesListing {
        fluent_builders::CancelReservedInstancesListing::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelSpotFleetRequests`](crate::client::fluent_builders::CancelSpotFleetRequests) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CancelSpotFleetRequests::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CancelSpotFleetRequests::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`spot_fleet_request_ids(Vec<String>)`](crate::client::fluent_builders::CancelSpotFleetRequests::spot_fleet_request_ids) / [`set_spot_fleet_request_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CancelSpotFleetRequests::set_spot_fleet_request_ids): <p>The IDs of the Spot Fleet requests.</p>
    ///   - [`terminate_instances(bool)`](crate::client::fluent_builders::CancelSpotFleetRequests::terminate_instances) / [`set_terminate_instances(Option<bool>)`](crate::client::fluent_builders::CancelSpotFleetRequests::set_terminate_instances): <p>Indicates whether to terminate instances for a Spot Fleet request if it is canceled successfully.</p>
    /// - On success, responds with [`CancelSpotFleetRequestsOutput`](crate::output::CancelSpotFleetRequestsOutput) with field(s):
    ///   - [`successful_fleet_requests(Option<Vec<CancelSpotFleetRequestsSuccessItem>>)`](crate::output::CancelSpotFleetRequestsOutput::successful_fleet_requests): <p>Information about the Spot Fleet requests that are successfully canceled.</p>
    ///   - [`unsuccessful_fleet_requests(Option<Vec<CancelSpotFleetRequestsErrorItem>>)`](crate::output::CancelSpotFleetRequestsOutput::unsuccessful_fleet_requests): <p>Information about the Spot Fleet requests that are not successfully canceled.</p>
    /// - On failure, responds with [`SdkError<CancelSpotFleetRequestsError>`](crate::error::CancelSpotFleetRequestsError)
    pub fn cancel_spot_fleet_requests(&self) -> fluent_builders::CancelSpotFleetRequests {
        fluent_builders::CancelSpotFleetRequests::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CancelSpotInstanceRequests`](crate::client::fluent_builders::CancelSpotInstanceRequests) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CancelSpotInstanceRequests::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CancelSpotInstanceRequests::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`spot_instance_request_ids(Vec<String>)`](crate::client::fluent_builders::CancelSpotInstanceRequests::spot_instance_request_ids) / [`set_spot_instance_request_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CancelSpotInstanceRequests::set_spot_instance_request_ids): <p>One or more Spot Instance request IDs.</p>
    /// - On success, responds with [`CancelSpotInstanceRequestsOutput`](crate::output::CancelSpotInstanceRequestsOutput) with field(s):
    ///   - [`cancelled_spot_instance_requests(Option<Vec<CancelledSpotInstanceRequest>>)`](crate::output::CancelSpotInstanceRequestsOutput::cancelled_spot_instance_requests): <p>One or more Spot Instance requests.</p>
    /// - On failure, responds with [`SdkError<CancelSpotInstanceRequestsError>`](crate::error::CancelSpotInstanceRequestsError)
    pub fn cancel_spot_instance_requests(&self) -> fluent_builders::CancelSpotInstanceRequests {
        fluent_builders::CancelSpotInstanceRequests::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ConfirmProductInstance`](crate::client::fluent_builders::ConfirmProductInstance) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ConfirmProductInstance::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ConfirmProductInstance::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`product_code(impl Into<String>)`](crate::client::fluent_builders::ConfirmProductInstance::product_code) / [`set_product_code(Option<String>)`](crate::client::fluent_builders::ConfirmProductInstance::set_product_code): <p>The product code. This must be a product code that you own.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ConfirmProductInstance::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ConfirmProductInstance::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ConfirmProductInstanceOutput`](crate::output::ConfirmProductInstanceOutput) with field(s):
    ///   - [`owner_id(Option<String>)`](crate::output::ConfirmProductInstanceOutput::owner_id): <p>The Amazon Web Services account ID of the instance owner. This is only present if the product code is attached to the instance.</p>
    ///   - [`r#return(Option<bool>)`](crate::output::ConfirmProductInstanceOutput::return): <p>The return value of the request. Returns <code>true</code> if the specified product code is owned by the requester and associated with the specified instance.</p>
    /// - On failure, responds with [`SdkError<ConfirmProductInstanceError>`](crate::error::ConfirmProductInstanceError)
    pub fn confirm_product_instance(&self) -> fluent_builders::ConfirmProductInstance {
        fluent_builders::ConfirmProductInstance::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CopyFpgaImage`](crate::client::fluent_builders::CopyFpgaImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CopyFpgaImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CopyFpgaImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`source_fpga_image_id(impl Into<String>)`](crate::client::fluent_builders::CopyFpgaImage::source_fpga_image_id) / [`set_source_fpga_image_id(Option<String>)`](crate::client::fluent_builders::CopyFpgaImage::set_source_fpga_image_id): <p>The ID of the source AFI.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CopyFpgaImage::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CopyFpgaImage::set_description): <p>The description for the new AFI.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CopyFpgaImage::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CopyFpgaImage::set_name): <p>The name for the new AFI. The default is the name of the source AFI.</p>
    ///   - [`source_region(impl Into<String>)`](crate::client::fluent_builders::CopyFpgaImage::source_region) / [`set_source_region(Option<String>)`](crate::client::fluent_builders::CopyFpgaImage::set_source_region): <p>The Region that contains the source AFI.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CopyFpgaImage::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CopyFpgaImage::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
    /// - On success, responds with [`CopyFpgaImageOutput`](crate::output::CopyFpgaImageOutput) with field(s):
    ///   - [`fpga_image_id(Option<String>)`](crate::output::CopyFpgaImageOutput::fpga_image_id): <p>The ID of the new AFI.</p>
    /// - On failure, responds with [`SdkError<CopyFpgaImageError>`](crate::error::CopyFpgaImageError)
    pub fn copy_fpga_image(&self) -> fluent_builders::CopyFpgaImage {
        fluent_builders::CopyFpgaImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CopyImage`](crate::client::fluent_builders::CopyImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CopyImage::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CopyImage::set_client_token): <p>Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a> in the <i>Amazon EC2 API Reference</i>.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CopyImage::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CopyImage::set_description): <p>A description for the new AMI in the destination Region.</p>
    ///   - [`encrypted(bool)`](crate::client::fluent_builders::CopyImage::encrypted) / [`set_encrypted(Option<bool>)`](crate::client::fluent_builders::CopyImage::set_encrypted): <p>Specifies whether the destination snapshots of the copied image should be encrypted. You can encrypt a copy of an unencrypted snapshot, but you cannot create an unencrypted copy of an encrypted snapshot. The default KMS key for Amazon EBS is used unless you specify a non-default Key Management Service (KMS) KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`kms_key_id(impl Into<String>)`](crate::client::fluent_builders::CopyImage::kms_key_id) / [`set_kms_key_id(Option<String>)`](crate::client::fluent_builders::CopyImage::set_kms_key_id): <p>The identifier of the symmetric Key Management Service (KMS) KMS key to use when creating encrypted volumes. If this parameter is not specified, your Amazon Web Services managed KMS key for Amazon EBS is used. If you specify a KMS key, you must also set the encrypted state to <code>true</code>.</p>  <p>You can specify a KMS key using any of the following:</p>  <ul>   <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>   <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>   <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>   <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>  </ul>  <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an identifier that is not valid, the action can appear to complete, but eventually fails.</p>  <p>The specified KMS key must exist in the destination Region.</p>  <p>Amazon EBS does not support asymmetric KMS keys.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CopyImage::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CopyImage::set_name): <p>The name of the new AMI in the destination Region.</p>
    ///   - [`source_image_id(impl Into<String>)`](crate::client::fluent_builders::CopyImage::source_image_id) / [`set_source_image_id(Option<String>)`](crate::client::fluent_builders::CopyImage::set_source_image_id): <p>The ID of the AMI to copy.</p>
    ///   - [`source_region(impl Into<String>)`](crate::client::fluent_builders::CopyImage::source_region) / [`set_source_region(Option<String>)`](crate::client::fluent_builders::CopyImage::set_source_region): <p>The name of the Region that contains the AMI to copy.</p>
    ///   - [`destination_outpost_arn(impl Into<String>)`](crate::client::fluent_builders::CopyImage::destination_outpost_arn) / [`set_destination_outpost_arn(Option<String>)`](crate::client::fluent_builders::CopyImage::set_destination_outpost_arn): <p>The Amazon Resource Name (ARN) of the Outpost to which to copy the AMI. Only specify this parameter when copying an AMI from an Amazon Web Services Region to an Outpost. The AMI must be in the Region of the destination Outpost. You cannot copy an AMI from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p>  <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-amis"> Copy AMIs from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CopyImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CopyImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`copy_image_tags(bool)`](crate::client::fluent_builders::CopyImage::copy_image_tags) / [`set_copy_image_tags(Option<bool>)`](crate::client::fluent_builders::CopyImage::set_copy_image_tags): <p>Indicates whether to include your user-defined AMI tags when copying the AMI.</p>  <p>The following tags will not be copied:</p>  <ul>   <li> <p>System tags (prefixed with <code>aws:</code>)</p> </li>   <li> <p>For public and shared AMIs, user-defined tags that are attached by other Amazon Web Services accounts</p> </li>  </ul>  <p>Default: Your user-defined AMI tags are not copied.</p>
    /// - On success, responds with [`CopyImageOutput`](crate::output::CopyImageOutput) with field(s):
    ///   - [`image_id(Option<String>)`](crate::output::CopyImageOutput::image_id): <p>The ID of the new AMI.</p>
    /// - On failure, responds with [`SdkError<CopyImageError>`](crate::error::CopyImageError)
    pub fn copy_image(&self) -> fluent_builders::CopyImage {
        fluent_builders::CopyImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CopySnapshot`](crate::client::fluent_builders::CopySnapshot) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CopySnapshot::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CopySnapshot::set_description): <p>A description for the EBS snapshot.</p>
    ///   - [`destination_outpost_arn(impl Into<String>)`](crate::client::fluent_builders::CopySnapshot::destination_outpost_arn) / [`set_destination_outpost_arn(Option<String>)`](crate::client::fluent_builders::CopySnapshot::set_destination_outpost_arn): <p>The Amazon Resource Name (ARN) of the Outpost to which to copy the snapshot. Only specify this parameter when copying a snapshot from an Amazon Web Services Region to an Outpost. The snapshot must be in the Region for the destination Outpost. You cannot copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p>  <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-snapshots"> Copy snapshots from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`destination_region(impl Into<String>)`](crate::client::fluent_builders::CopySnapshot::destination_region) / [`set_destination_region(Option<String>)`](crate::client::fluent_builders::CopySnapshot::set_destination_region): <p>The destination Region to use in the <code>PresignedUrl</code> parameter of a snapshot copy operation. This parameter is only valid for specifying the destination Region in a <code>PresignedUrl</code> parameter, where it is required.</p>  <p>The snapshot copy is sent to the regional endpoint that you sent the HTTP request to (for example, <code>ec2.us-east-1.amazonaws.com</code>). With the CLI, this is specified using the <code>--region</code> parameter or the default Region in your Amazon Web Services configuration file.</p>
    ///   - [`encrypted(bool)`](crate::client::fluent_builders::CopySnapshot::encrypted) / [`set_encrypted(Option<bool>)`](crate::client::fluent_builders::CopySnapshot::set_encrypted): <p>To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled, enable encryption using this parameter. Otherwise, omit this parameter. Encrypted snapshots are encrypted, even if you omit this parameter and encryption by default is not enabled. You cannot set this parameter to false. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`kms_key_id(impl Into<String>)`](crate::client::fluent_builders::CopySnapshot::kms_key_id) / [`set_kms_key_id(Option<String>)`](crate::client::fluent_builders::CopySnapshot::set_kms_key_id): <p>The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>  <p>You can specify the KMS key using any of the following:</p>  <ul>   <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>   <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>   <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>   <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>  </ul>  <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>
    ///   - [`presigned_url(impl Into<String>)`](crate::client::fluent_builders::CopySnapshot::presigned_url) / [`set_presigned_url(Option<String>)`](crate::client::fluent_builders::CopySnapshot::set_presigned_url): <p>When you copy an encrypted source snapshot using the Amazon EC2 Query API, you must supply a pre-signed URL. This parameter is optional for unencrypted snapshots. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html">Query requests</a>.</p>  <p>The <code>PresignedUrl</code> should use the snapshot source endpoint, the <code>CopySnapshot</code> action, and include the <code>SourceRegion</code>, <code>SourceSnapshotId</code>, and <code>DestinationRegion</code> parameters. The <code>PresignedUrl</code> must be signed using Amazon Web Services Signature Version 4. Because EBS snapshots are stored in Amazon S3, the signing algorithm for this parameter uses the same logic that is described in <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html">Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)</a> in the <i>Amazon Simple Storage Service API Reference</i>. An invalid or improperly signed <code>PresignedUrl</code> will cause the copy operation to fail asynchronously, and the snapshot will move to an <code>error</code> state.</p>
    ///   - [`source_region(impl Into<String>)`](crate::client::fluent_builders::CopySnapshot::source_region) / [`set_source_region(Option<String>)`](crate::client::fluent_builders::CopySnapshot::set_source_region): <p>The ID of the Region that contains the snapshot to be copied.</p>
    ///   - [`source_snapshot_id(impl Into<String>)`](crate::client::fluent_builders::CopySnapshot::source_snapshot_id) / [`set_source_snapshot_id(Option<String>)`](crate::client::fluent_builders::CopySnapshot::set_source_snapshot_id): <p>The ID of the EBS snapshot to copy.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CopySnapshot::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CopySnapshot::set_tag_specifications): <p>The tags to apply to the new snapshot.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CopySnapshot::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CopySnapshot::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CopySnapshotOutput`](crate::output::CopySnapshotOutput) with field(s):
    ///   - [`snapshot_id(Option<String>)`](crate::output::CopySnapshotOutput::snapshot_id): <p>The ID of the new snapshot.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::CopySnapshotOutput::tags): <p>Any tags applied to the new snapshot.</p>
    /// - On failure, responds with [`SdkError<CopySnapshotError>`](crate::error::CopySnapshotError)
    pub fn copy_snapshot(&self) -> fluent_builders::CopySnapshot {
        fluent_builders::CopySnapshot::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateCapacityReservation`](crate::client::fluent_builders::CreateCapacityReservation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateCapacityReservation::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateCapacityReservation::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
    ///   - [`instance_type(impl Into<String>)`](crate::client::fluent_builders::CreateCapacityReservation::instance_type) / [`set_instance_type(Option<String>)`](crate::client::fluent_builders::CreateCapacityReservation::set_instance_type): <p>The instance type for which to reserve capacity. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`instance_platform(CapacityReservationInstancePlatform)`](crate::client::fluent_builders::CreateCapacityReservation::instance_platform) / [`set_instance_platform(Option<CapacityReservationInstancePlatform>)`](crate::client::fluent_builders::CreateCapacityReservation::set_instance_platform): <p>The type of operating system for which to reserve capacity.</p>
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::CreateCapacityReservation::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::CreateCapacityReservation::set_availability_zone): <p>The Availability Zone in which to create the Capacity Reservation.</p>
    ///   - [`availability_zone_id(impl Into<String>)`](crate::client::fluent_builders::CreateCapacityReservation::availability_zone_id) / [`set_availability_zone_id(Option<String>)`](crate::client::fluent_builders::CreateCapacityReservation::set_availability_zone_id): <p>The ID of the Availability Zone in which to create the Capacity Reservation.</p>
    ///   - [`tenancy(CapacityReservationTenancy)`](crate::client::fluent_builders::CreateCapacityReservation::tenancy) / [`set_tenancy(Option<CapacityReservationTenancy>)`](crate::client::fluent_builders::CreateCapacityReservation::set_tenancy): <p>Indicates the tenancy of the Capacity Reservation. A Capacity Reservation can have one of the following tenancy settings:</p>  <ul>   <li> <p> <code>default</code> - The Capacity Reservation is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>   <li> <p> <code>dedicated</code> - The Capacity Reservation is created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>  </ul>
    ///   - [`instance_count(i32)`](crate::client::fluent_builders::CreateCapacityReservation::instance_count) / [`set_instance_count(Option<i32>)`](crate::client::fluent_builders::CreateCapacityReservation::set_instance_count): <p>The number of instances for which to reserve capacity.</p>  <p>Valid range: 1 - 1000</p>
    ///   - [`ebs_optimized(bool)`](crate::client::fluent_builders::CreateCapacityReservation::ebs_optimized) / [`set_ebs_optimized(Option<bool>)`](crate::client::fluent_builders::CreateCapacityReservation::set_ebs_optimized): <p>Indicates whether the Capacity Reservation supports EBS-optimized instances. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS- optimized instance.</p>
    ///   - [`ephemeral_storage(bool)`](crate::client::fluent_builders::CreateCapacityReservation::ephemeral_storage) / [`set_ephemeral_storage(Option<bool>)`](crate::client::fluent_builders::CreateCapacityReservation::set_ephemeral_storage): <p> <i>Deprecated.</i> </p>
    ///   - [`end_date(DateTime)`](crate::client::fluent_builders::CreateCapacityReservation::end_date) / [`set_end_date(Option<DateTime>)`](crate::client::fluent_builders::CreateCapacityReservation::set_end_date): <p>The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to <code>expired</code> when it reaches its end date and time.</p>  <p>You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>. Omit <code>EndDate</code> if <code>EndDateType</code> is <code>unlimited</code>.</p>  <p>If the <code>EndDateType</code> is <code>limited</code>, the Capacity Reservation is cancelled within an hour from the specified time. For example, if you specify 5/31/2019, 13:30:55, the Capacity Reservation is guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019.</p>
    ///   - [`end_date_type(EndDateType)`](crate::client::fluent_builders::CreateCapacityReservation::end_date_type) / [`set_end_date_type(Option<EndDateType>)`](crate::client::fluent_builders::CreateCapacityReservation::set_end_date_type): <p>Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>  <ul>   <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it. Do not provide an <code>EndDate</code> if the <code>EndDateType</code> is <code>unlimited</code>.</p> </li>   <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time. You must provide an <code>EndDate</code> value if the <code>EndDateType</code> value is <code>limited</code>.</p> </li>  </ul>
    ///   - [`instance_match_criteria(InstanceMatchCriteria)`](crate::client::fluent_builders::CreateCapacityReservation::instance_match_criteria) / [`set_instance_match_criteria(Option<InstanceMatchCriteria>)`](crate::client::fluent_builders::CreateCapacityReservation::set_instance_match_criteria): <p>Indicates the type of instance launches that the Capacity Reservation accepts. The options include:</p>  <ul>   <li> <p> <code>open</code> - The Capacity Reservation automatically matches all instances that have matching attributes (instance type, platform, and Availability Zone). Instances that have matching attributes run in the Capacity Reservation automatically without specifying any additional parameters.</p> </li>   <li> <p> <code>targeted</code> - The Capacity Reservation only accepts instances that have matching attributes (instance type, platform, and Availability Zone), and explicitly target the Capacity Reservation. This ensures that only permitted instances can use the reserved capacity. </p> </li>  </ul>  <p>Default: <code>open</code> </p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateCapacityReservation::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateCapacityReservation::set_tag_specifications): <p>The tags to apply to the Capacity Reservation during launch.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateCapacityReservation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateCapacityReservation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`outpost_arn(impl Into<String>)`](crate::client::fluent_builders::CreateCapacityReservation::outpost_arn) / [`set_outpost_arn(Option<String>)`](crate::client::fluent_builders::CreateCapacityReservation::set_outpost_arn): <p>The Amazon Resource Name (ARN) of the Outpost on which to create the Capacity Reservation.</p>
    ///   - [`placement_group_arn(impl Into<String>)`](crate::client::fluent_builders::CreateCapacityReservation::placement_group_arn) / [`set_placement_group_arn(Option<String>)`](crate::client::fluent_builders::CreateCapacityReservation::set_placement_group_arn): <p>The Amazon Resource Name (ARN) of the cluster placement group in which to create the Capacity Reservation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html"> Capacity Reservations for cluster placement groups</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// - On success, responds with [`CreateCapacityReservationOutput`](crate::output::CreateCapacityReservationOutput) with field(s):
    ///   - [`capacity_reservation(Option<CapacityReservation>)`](crate::output::CreateCapacityReservationOutput::capacity_reservation): <p>Information about the Capacity Reservation.</p>
    /// - On failure, responds with [`SdkError<CreateCapacityReservationError>`](crate::error::CreateCapacityReservationError)
    pub fn create_capacity_reservation(&self) -> fluent_builders::CreateCapacityReservation {
        fluent_builders::CreateCapacityReservation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateCapacityReservationFleet`](crate::client::fluent_builders::CreateCapacityReservationFleet) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_strategy(impl Into<String>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::allocation_strategy) / [`set_allocation_strategy(Option<String>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_allocation_strategy): <p>The strategy used by the Capacity Reservation Fleet to determine which of the specified instance types to use. Currently, only the <code>prioritized</code> allocation strategy is supported. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy"> Allocation strategy</a> in the Amazon EC2 User Guide.</p>  <p>Valid values: <code>prioritized</code> </p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
    ///   - [`instance_type_specifications(Vec<ReservationFleetInstanceSpecification>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::instance_type_specifications) / [`set_instance_type_specifications(Option<Vec<ReservationFleetInstanceSpecification>>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_instance_type_specifications): <p>Information about the instance types for which to reserve the capacity.</p>
    ///   - [`tenancy(FleetCapacityReservationTenancy)`](crate::client::fluent_builders::CreateCapacityReservationFleet::tenancy) / [`set_tenancy(Option<FleetCapacityReservationTenancy>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_tenancy): <p>Indicates the tenancy of the Capacity Reservation Fleet. All Capacity Reservations in the Fleet inherit this tenancy. The Capacity Reservation Fleet can have one of the following tenancy settings:</p>  <ul>   <li> <p> <code>default</code> - The Capacity Reservation Fleet is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>   <li> <p> <code>dedicated</code> - The Capacity Reservations are created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>  </ul>
    ///   - [`total_target_capacity(i32)`](crate::client::fluent_builders::CreateCapacityReservationFleet::total_target_capacity) / [`set_total_target_capacity(Option<i32>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_total_target_capacity): <p>The total number of capacity units to be reserved by the Capacity Reservation Fleet. This value, together with the instance type weights that you assign to each instance type used by the Fleet determine the number of instances for which the Fleet reserves capacity. Both values are based on units that make sense for your workload. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity"> Total target capacity</a> in the Amazon EC2 User Guide.</p>
    ///   - [`end_date(DateTime)`](crate::client::fluent_builders::CreateCapacityReservationFleet::end_date) / [`set_end_date(Option<DateTime>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_end_date): <p>The date and time at which the Capacity Reservation Fleet expires. When the Capacity Reservation Fleet expires, its state changes to <code>expired</code> and all of the Capacity Reservations in the Fleet expire.</p>  <p>The Capacity Reservation Fleet expires within an hour after the specified time. For example, if you specify <code>5/31/2019</code>, <code>13:30:55</code>, the Capacity Reservation Fleet is guaranteed to expire between <code>13:30:55</code> and <code>14:30:55</code> on <code>5/31/2019</code>. </p>
    ///   - [`instance_match_criteria(FleetInstanceMatchCriteria)`](crate::client::fluent_builders::CreateCapacityReservationFleet::instance_match_criteria) / [`set_instance_match_criteria(Option<FleetInstanceMatchCriteria>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_instance_match_criteria): <p>Indicates the type of instance launches that the Capacity Reservation Fleet accepts. All Capacity Reservations in the Fleet inherit this instance matching criteria.</p>  <p>Currently, Capacity Reservation Fleets support <code>open</code> instance matching criteria only. This means that instances that have matching attributes (instance type, platform, and Availability Zone) run in the Capacity Reservations automatically. Instances do not need to explicitly target a Capacity Reservation Fleet to use its reserved capacity.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_tag_specifications): <p>The tags to assign to the Capacity Reservation Fleet. The tags are automatically assigned to the Capacity Reservations in the Fleet.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateCapacityReservationFleet::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateCapacityReservationFleet::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateCapacityReservationFleetOutput`](crate::output::CreateCapacityReservationFleetOutput) with field(s):
    ///   - [`capacity_reservation_fleet_id(Option<String>)`](crate::output::CreateCapacityReservationFleetOutput::capacity_reservation_fleet_id): <p>The ID of the Capacity Reservation Fleet.</p>
    ///   - [`state(Option<CapacityReservationFleetState>)`](crate::output::CreateCapacityReservationFleetOutput::state): <p>The status of the Capacity Reservation Fleet.</p>
    ///   - [`total_target_capacity(Option<i32>)`](crate::output::CreateCapacityReservationFleetOutput::total_target_capacity): <p>The total number of capacity units for which the Capacity Reservation Fleet reserves capacity.</p>
    ///   - [`total_fulfilled_capacity(Option<f64>)`](crate::output::CreateCapacityReservationFleetOutput::total_fulfilled_capacity): <p>The requested capacity units that have been successfully reserved.</p>
    ///   - [`instance_match_criteria(Option<FleetInstanceMatchCriteria>)`](crate::output::CreateCapacityReservationFleetOutput::instance_match_criteria): <p>The instance matching criteria for the Capacity Reservation Fleet.</p>
    ///   - [`allocation_strategy(Option<String>)`](crate::output::CreateCapacityReservationFleetOutput::allocation_strategy): <p>The allocation strategy used by the Capacity Reservation Fleet.</p>
    ///   - [`create_time(Option<DateTime>)`](crate::output::CreateCapacityReservationFleetOutput::create_time): <p>The date and time at which the Capacity Reservation Fleet was created.</p>
    ///   - [`end_date(Option<DateTime>)`](crate::output::CreateCapacityReservationFleetOutput::end_date): <p>The date and time at which the Capacity Reservation Fleet expires.</p>
    ///   - [`tenancy(Option<FleetCapacityReservationTenancy>)`](crate::output::CreateCapacityReservationFleetOutput::tenancy): <p>Indicates the tenancy of Capacity Reservation Fleet.</p>
    ///   - [`fleet_capacity_reservations(Option<Vec<FleetCapacityReservation>>)`](crate::output::CreateCapacityReservationFleetOutput::fleet_capacity_reservations): <p>Information about the individual Capacity Reservations in the Capacity Reservation Fleet.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::CreateCapacityReservationFleetOutput::tags): <p>The tags assigned to the Capacity Reservation Fleet.</p>
    /// - On failure, responds with [`SdkError<CreateCapacityReservationFleetError>`](crate::error::CreateCapacityReservationFleetError)
    pub fn create_capacity_reservation_fleet(
        &self,
    ) -> fluent_builders::CreateCapacityReservationFleet {
        fluent_builders::CreateCapacityReservationFleet::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateCarrierGateway`](crate::client::fluent_builders::CreateCarrierGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateCarrierGateway::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateCarrierGateway::set_vpc_id): <p>The ID of the VPC to associate with the carrier gateway.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateCarrierGateway::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateCarrierGateway::set_tag_specifications): <p>The tags to associate with the carrier gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateCarrierGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateCarrierGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateCarrierGateway::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateCarrierGateway::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On success, responds with [`CreateCarrierGatewayOutput`](crate::output::CreateCarrierGatewayOutput) with field(s):
    ///   - [`carrier_gateway(Option<CarrierGateway>)`](crate::output::CreateCarrierGatewayOutput::carrier_gateway): <p>Information about the carrier gateway.</p>
    /// - On failure, responds with [`SdkError<CreateCarrierGatewayError>`](crate::error::CreateCarrierGatewayError)
    pub fn create_carrier_gateway(&self) -> fluent_builders::CreateCarrierGateway {
        fluent_builders::CreateCarrierGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateClientVpnEndpoint`](crate::client::fluent_builders::CreateClientVpnEndpoint) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::client_cidr_block) / [`set_client_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_client_cidr_block): <p>The IPv4 address range, in CIDR notation, from which to assign client IP addresses. The address range cannot overlap with the local CIDR of the VPC in which the associated subnet is located, or the routes that you add manually. The address range cannot be changed after the Client VPN endpoint has been created. Client CIDR range must have a size of at least /22 and must not be greater than /12.</p>
    ///   - [`server_certificate_arn(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::server_certificate_arn) / [`set_server_certificate_arn(Option<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_server_certificate_arn): <p>The ARN of the server certificate. For more information, see the <a href="https://docs.aws.amazon.com/acm/latest/userguide/">Certificate Manager User Guide</a>.</p>
    ///   - [`authentication_options(Vec<ClientVpnAuthenticationRequest>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::authentication_options) / [`set_authentication_options(Option<Vec<ClientVpnAuthenticationRequest>>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_authentication_options): <p>Information about the authentication method to be used to authenticate clients.</p>
    ///   - [`connection_log_options(ConnectionLogOptions)`](crate::client::fluent_builders::CreateClientVpnEndpoint::connection_log_options) / [`set_connection_log_options(Option<ConnectionLogOptions>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_connection_log_options): <p>Information about the client connection logging options.</p>  <p>If you enable client connection logging, data about client connections is sent to a Cloudwatch Logs log stream. The following information is logged:</p>  <ul>   <li> <p>Client connection requests</p> </li>   <li> <p>Client connection results (successful and unsuccessful)</p> </li>   <li> <p>Reasons for unsuccessful client connection requests</p> </li>   <li> <p>Client connection termination time</p> </li>  </ul>
    ///   - [`dns_servers(Vec<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::dns_servers) / [`set_dns_servers(Option<Vec<String>>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_dns_servers): <p>Information about the DNS servers to be used for DNS resolution. A Client VPN endpoint can have up to two DNS servers. If no DNS server is specified, the DNS address configured on the device is used for the DNS server.</p>
    ///   - [`transport_protocol(TransportProtocol)`](crate::client::fluent_builders::CreateClientVpnEndpoint::transport_protocol) / [`set_transport_protocol(Option<TransportProtocol>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_transport_protocol): <p>The transport protocol to be used by the VPN session.</p>  <p>Default value: <code>udp</code> </p>
    ///   - [`vpn_port(i32)`](crate::client::fluent_builders::CreateClientVpnEndpoint::vpn_port) / [`set_vpn_port(Option<i32>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_vpn_port): <p>The port number to assign to the Client VPN endpoint for TCP and UDP traffic.</p>  <p>Valid Values: <code>443</code> | <code>1194</code> </p>  <p>Default Value: <code>443</code> </p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_description): <p>A brief description of the Client VPN endpoint.</p>
    ///   - [`split_tunnel(bool)`](crate::client::fluent_builders::CreateClientVpnEndpoint::split_tunnel) / [`set_split_tunnel(Option<bool>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_split_tunnel): <p>Indicates whether split-tunnel is enabled on the Client VPN endpoint.</p>  <p>By default, split-tunnel on a VPN endpoint is disabled.</p>  <p>For information about split-tunnel VPN endpoints, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html">Split-tunnel Client VPN endpoint</a> in the <i>Client VPN Administrator Guide</i>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateClientVpnEndpoint::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_tag_specifications): <p>The tags to apply to the Client VPN endpoint during creation.</p>
    ///   - [`security_group_ids(Vec<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::security_group_ids) / [`set_security_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_security_group_ids): <p>The IDs of one or more security groups to apply to the target network. You must also specify the ID of the VPC that contains the security groups.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_vpc_id): <p>The ID of the VPC to associate with the Client VPN endpoint. If no security group IDs are specified in the request, the default security group for the VPC is applied.</p>
    ///   - [`self_service_portal(SelfServicePortal)`](crate::client::fluent_builders::CreateClientVpnEndpoint::self_service_portal) / [`set_self_service_portal(Option<SelfServicePortal>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_self_service_portal): <p>Specify whether to enable the self-service portal for the Client VPN endpoint.</p>  <p>Default Value: <code>enabled</code> </p>
    ///   - [`client_connect_options(ClientConnectOptions)`](crate::client::fluent_builders::CreateClientVpnEndpoint::client_connect_options) / [`set_client_connect_options(Option<ClientConnectOptions>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_client_connect_options): <p>The options for managing connection authorization for new client connections.</p>
    ///   - [`session_timeout_hours(i32)`](crate::client::fluent_builders::CreateClientVpnEndpoint::session_timeout_hours) / [`set_session_timeout_hours(Option<i32>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_session_timeout_hours): <p>The maximum VPN session duration time in hours.</p>  <p>Valid values: <code>8 | 10 | 12 | 24</code> </p>  <p>Default value: <code>24</code> </p>
    ///   - [`client_login_banner_options(ClientLoginBannerOptions)`](crate::client::fluent_builders::CreateClientVpnEndpoint::client_login_banner_options) / [`set_client_login_banner_options(Option<ClientLoginBannerOptions>)`](crate::client::fluent_builders::CreateClientVpnEndpoint::set_client_login_banner_options): <p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>
    /// - On success, responds with [`CreateClientVpnEndpointOutput`](crate::output::CreateClientVpnEndpointOutput) with field(s):
    ///   - [`client_vpn_endpoint_id(Option<String>)`](crate::output::CreateClientVpnEndpointOutput::client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`status(Option<ClientVpnEndpointStatus>)`](crate::output::CreateClientVpnEndpointOutput::status): <p>The current state of the Client VPN endpoint.</p>
    ///   - [`dns_name(Option<String>)`](crate::output::CreateClientVpnEndpointOutput::dns_name): <p>The DNS name to be used by clients when establishing their VPN session.</p>
    /// - On failure, responds with [`SdkError<CreateClientVpnEndpointError>`](crate::error::CreateClientVpnEndpointError)
    pub fn create_client_vpn_endpoint(&self) -> fluent_builders::CreateClientVpnEndpoint {
        fluent_builders::CreateClientVpnEndpoint::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateClientVpnRoute`](crate::client::fluent_builders::CreateClientVpnRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint to which to add the route.</p>
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::set_destination_cidr_block): <p>The IPv4 address range, in CIDR notation, of the route destination. For example:</p>  <ul>   <li> <p>To add a route for Internet access, enter <code>0.0.0.0/0</code> </p> </li>   <li> <p>To add a route for a peered VPC, enter the peered VPC's IPv4 CIDR range</p> </li>   <li> <p>To add a route for an on-premises network, enter the Amazon Web Services Site-to-Site VPN connection's IPv4 CIDR range</p> </li>   <li> <p>To add a route for the local network, enter the client CIDR range</p> </li>  </ul>
    ///   - [`target_vpc_subnet_id(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::target_vpc_subnet_id) / [`set_target_vpc_subnet_id(Option<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::set_target_vpc_subnet_id): <p>The ID of the subnet through which you want to route traffic. The specified subnet must be an existing target network of the Client VPN endpoint.</p>  <p>Alternatively, if you're adding a route for the local network, specify <code>local</code>.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::set_description): <p>A brief description of the route.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateClientVpnRoute::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateClientVpnRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateClientVpnRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateClientVpnRouteOutput`](crate::output::CreateClientVpnRouteOutput) with field(s):
    ///   - [`status(Option<ClientVpnRouteStatus>)`](crate::output::CreateClientVpnRouteOutput::status): <p>The current state of the route.</p>
    /// - On failure, responds with [`SdkError<CreateClientVpnRouteError>`](crate::error::CreateClientVpnRouteError)
    pub fn create_client_vpn_route(&self) -> fluent_builders::CreateClientVpnRoute {
        fluent_builders::CreateClientVpnRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateCoipCidr`](crate::client::fluent_builders::CreateCoipCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::CreateCoipCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::CreateCoipCidr::set_cidr): <p> A customer-owned IP address range to create. </p>
    ///   - [`coip_pool_id(impl Into<String>)`](crate::client::fluent_builders::CreateCoipCidr::coip_pool_id) / [`set_coip_pool_id(Option<String>)`](crate::client::fluent_builders::CreateCoipCidr::set_coip_pool_id): <p> The ID of the address pool. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateCoipCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateCoipCidr::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateCoipCidrOutput`](crate::output::CreateCoipCidrOutput) with field(s):
    ///   - [`coip_cidr(Option<CoipCidr>)`](crate::output::CreateCoipCidrOutput::coip_cidr): <p> Information about a range of customer-owned IP addresses. </p>
    /// - On failure, responds with [`SdkError<CreateCoipCidrError>`](crate::error::CreateCoipCidrError)
    pub fn create_coip_cidr(&self) -> fluent_builders::CreateCoipCidr {
        fluent_builders::CreateCoipCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateCoipPool`](crate::client::fluent_builders::CreateCoipPool) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::CreateCoipPool::local_gateway_route_table_id) / [`set_local_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::CreateCoipPool::set_local_gateway_route_table_id): <p> The ID of the local gateway route table. </p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateCoipPool::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateCoipPool::set_tag_specifications): <p> The tags to assign to the CoIP address pool. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateCoipPool::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateCoipPool::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateCoipPoolOutput`](crate::output::CreateCoipPoolOutput) with field(s):
    ///   - [`coip_pool(Option<CoipPool>)`](crate::output::CreateCoipPoolOutput::coip_pool): <p>Information about the CoIP address pool.</p>
    /// - On failure, responds with [`SdkError<CreateCoipPoolError>`](crate::error::CreateCoipPoolError)
    pub fn create_coip_pool(&self) -> fluent_builders::CreateCoipPool {
        fluent_builders::CreateCoipPool::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateCustomerGateway`](crate::client::fluent_builders::CreateCustomerGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`bgp_asn(i32)`](crate::client::fluent_builders::CreateCustomerGateway::bgp_asn) / [`set_bgp_asn(Option<i32>)`](crate::client::fluent_builders::CreateCustomerGateway::set_bgp_asn): <p>For devices that support BGP, the customer gateway's BGP ASN.</p>  <p>Default: 65000</p>
    ///   - [`public_ip(impl Into<String>)`](crate::client::fluent_builders::CreateCustomerGateway::public_ip) / [`set_public_ip(Option<String>)`](crate::client::fluent_builders::CreateCustomerGateway::set_public_ip): <p> <i>This member has been deprecated.</i> The Internet-routable IP address for the customer gateway's outside interface. The address must be static.</p>
    ///   - [`certificate_arn(impl Into<String>)`](crate::client::fluent_builders::CreateCustomerGateway::certificate_arn) / [`set_certificate_arn(Option<String>)`](crate::client::fluent_builders::CreateCustomerGateway::set_certificate_arn): <p>The Amazon Resource Name (ARN) for the customer gateway certificate.</p>
    ///   - [`r#type(GatewayType)`](crate::client::fluent_builders::CreateCustomerGateway::type) / [`set_type(Option<GatewayType>)`](crate::client::fluent_builders::CreateCustomerGateway::set_type): <p>The type of VPN connection that this customer gateway supports (<code>ipsec.1</code>).</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateCustomerGateway::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateCustomerGateway::set_tag_specifications): <p>The tags to apply to the customer gateway.</p>
    ///   - [`device_name(impl Into<String>)`](crate::client::fluent_builders::CreateCustomerGateway::device_name) / [`set_device_name(Option<String>)`](crate::client::fluent_builders::CreateCustomerGateway::set_device_name): <p>A name for the customer gateway device.</p>  <p>Length Constraints: Up to 255 characters.</p>
    ///   - [`ip_address(impl Into<String>)`](crate::client::fluent_builders::CreateCustomerGateway::ip_address) / [`set_ip_address(Option<String>)`](crate::client::fluent_builders::CreateCustomerGateway::set_ip_address): <p> IPv4 address for the customer gateway device's outside interface. The address must be static. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateCustomerGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateCustomerGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateCustomerGatewayOutput`](crate::output::CreateCustomerGatewayOutput) with field(s):
    ///   - [`customer_gateway(Option<CustomerGateway>)`](crate::output::CreateCustomerGatewayOutput::customer_gateway): <p>Information about the customer gateway.</p>
    /// - On failure, responds with [`SdkError<CreateCustomerGatewayError>`](crate::error::CreateCustomerGatewayError)
    pub fn create_customer_gateway(&self) -> fluent_builders::CreateCustomerGateway {
        fluent_builders::CreateCustomerGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateDefaultSubnet`](crate::client::fluent_builders::CreateDefaultSubnet) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::CreateDefaultSubnet::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::CreateDefaultSubnet::set_availability_zone): <p>The Availability Zone in which to create the default subnet.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateDefaultSubnet::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateDefaultSubnet::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipv6_native(bool)`](crate::client::fluent_builders::CreateDefaultSubnet::ipv6_native) / [`set_ipv6_native(Option<bool>)`](crate::client::fluent_builders::CreateDefaultSubnet::set_ipv6_native): <p>Indicates whether to create an IPv6 only subnet. If you already have a default subnet for this Availability Zone, you must delete it before you can create an IPv6 only subnet.</p>
    /// - On success, responds with [`CreateDefaultSubnetOutput`](crate::output::CreateDefaultSubnetOutput) with field(s):
    ///   - [`subnet(Option<Subnet>)`](crate::output::CreateDefaultSubnetOutput::subnet): <p>Information about the subnet.</p>
    /// - On failure, responds with [`SdkError<CreateDefaultSubnetError>`](crate::error::CreateDefaultSubnetError)
    pub fn create_default_subnet(&self) -> fluent_builders::CreateDefaultSubnet {
        fluent_builders::CreateDefaultSubnet::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateDefaultVpc`](crate::client::fluent_builders::CreateDefaultVpc) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateDefaultVpc::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateDefaultVpc::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateDefaultVpcOutput`](crate::output::CreateDefaultVpcOutput) with field(s):
    ///   - [`vpc(Option<Vpc>)`](crate::output::CreateDefaultVpcOutput::vpc): <p>Information about the VPC.</p>
    /// - On failure, responds with [`SdkError<CreateDefaultVpcError>`](crate::error::CreateDefaultVpcError)
    pub fn create_default_vpc(&self) -> fluent_builders::CreateDefaultVpc {
        fluent_builders::CreateDefaultVpc::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateDhcpOptions`](crate::client::fluent_builders::CreateDhcpOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dhcp_configurations(Vec<NewDhcpConfiguration>)`](crate::client::fluent_builders::CreateDhcpOptions::dhcp_configurations) / [`set_dhcp_configurations(Option<Vec<NewDhcpConfiguration>>)`](crate::client::fluent_builders::CreateDhcpOptions::set_dhcp_configurations): <p>A DHCP configuration option.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateDhcpOptions::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateDhcpOptions::set_tag_specifications): <p>The tags to assign to the DHCP option.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateDhcpOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateDhcpOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateDhcpOptionsOutput`](crate::output::CreateDhcpOptionsOutput) with field(s):
    ///   - [`dhcp_options(Option<DhcpOptions>)`](crate::output::CreateDhcpOptionsOutput::dhcp_options): <p>A set of DHCP options.</p>
    /// - On failure, responds with [`SdkError<CreateDhcpOptionsError>`](crate::error::CreateDhcpOptionsError)
    pub fn create_dhcp_options(&self) -> fluent_builders::CreateDhcpOptions {
        fluent_builders::CreateDhcpOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateEgressOnlyInternetGateway`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway::set_vpc_id): <p>The ID of the VPC for which to create the egress-only internet gateway.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateEgressOnlyInternetGateway::set_tag_specifications): <p>The tags to assign to the egress-only internet gateway.</p>
    /// - On success, responds with [`CreateEgressOnlyInternetGatewayOutput`](crate::output::CreateEgressOnlyInternetGatewayOutput) with field(s):
    ///   - [`client_token(Option<String>)`](crate::output::CreateEgressOnlyInternetGatewayOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
    ///   - [`egress_only_internet_gateway(Option<EgressOnlyInternetGateway>)`](crate::output::CreateEgressOnlyInternetGatewayOutput::egress_only_internet_gateway): <p>Information about the egress-only internet gateway.</p>
    /// - On failure, responds with [`SdkError<CreateEgressOnlyInternetGatewayError>`](crate::error::CreateEgressOnlyInternetGatewayError)
    pub fn create_egress_only_internet_gateway(
        &self,
    ) -> fluent_builders::CreateEgressOnlyInternetGateway {
        fluent_builders::CreateEgressOnlyInternetGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateFleet`](crate::client::fluent_builders::CreateFleet) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateFleet::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateFleet::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateFleet::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateFleet::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
    ///   - [`spot_options(SpotOptionsRequest)`](crate::client::fluent_builders::CreateFleet::spot_options) / [`set_spot_options(Option<SpotOptionsRequest>)`](crate::client::fluent_builders::CreateFleet::set_spot_options): <p>Describes the configuration of Spot Instances in an EC2 Fleet.</p>
    ///   - [`on_demand_options(OnDemandOptionsRequest)`](crate::client::fluent_builders::CreateFleet::on_demand_options) / [`set_on_demand_options(Option<OnDemandOptionsRequest>)`](crate::client::fluent_builders::CreateFleet::set_on_demand_options): <p>Describes the configuration of On-Demand Instances in an EC2 Fleet.</p>
    ///   - [`excess_capacity_termination_policy(FleetExcessCapacityTerminationPolicy)`](crate::client::fluent_builders::CreateFleet::excess_capacity_termination_policy) / [`set_excess_capacity_termination_policy(Option<FleetExcessCapacityTerminationPolicy>)`](crate::client::fluent_builders::CreateFleet::set_excess_capacity_termination_policy): <p>Indicates whether running instances should be terminated if the total target capacity of the EC2 Fleet is decreased below the current size of the EC2 Fleet.</p>
    ///   - [`launch_template_configs(Vec<FleetLaunchTemplateConfigRequest>)`](crate::client::fluent_builders::CreateFleet::launch_template_configs) / [`set_launch_template_configs(Option<Vec<FleetLaunchTemplateConfigRequest>>)`](crate::client::fluent_builders::CreateFleet::set_launch_template_configs): <p>The configuration for the EC2 Fleet.</p>
    ///   - [`target_capacity_specification(TargetCapacitySpecificationRequest)`](crate::client::fluent_builders::CreateFleet::target_capacity_specification) / [`set_target_capacity_specification(Option<TargetCapacitySpecificationRequest>)`](crate::client::fluent_builders::CreateFleet::set_target_capacity_specification): <p>The number of units to request.</p>
    ///   - [`terminate_instances_with_expiration(bool)`](crate::client::fluent_builders::CreateFleet::terminate_instances_with_expiration) / [`set_terminate_instances_with_expiration(Option<bool>)`](crate::client::fluent_builders::CreateFleet::set_terminate_instances_with_expiration): <p>Indicates whether running instances should be terminated when the EC2 Fleet expires.</p>
    ///   - [`r#type(FleetType)`](crate::client::fluent_builders::CreateFleet::type) / [`set_type(Option<FleetType>)`](crate::client::fluent_builders::CreateFleet::set_type): <p>The fleet type. The default value is <code>maintain</code>.</p>  <ul>   <li> <p> <code>maintain</code> - The EC2 Fleet places an asynchronous request for your desired capacity, and continues to maintain your desired Spot capacity by replenishing interrupted Spot Instances.</p> </li>   <li> <p> <code>request</code> - The EC2 Fleet places an asynchronous one-time request for your desired capacity, but does submit Spot requests in alternative capacity pools if Spot capacity is unavailable, and does not maintain Spot capacity if Spot Instances are interrupted.</p> </li>   <li> <p> <code>instant</code> - The EC2 Fleet places a synchronous one-time request for your desired capacity, and returns errors for any instances that could not be launched.</p> </li>  </ul>  <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-request-type.html">EC2 Fleet request types</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`valid_from(DateTime)`](crate::client::fluent_builders::CreateFleet::valid_from) / [`set_valid_from(Option<DateTime>)`](crate::client::fluent_builders::CreateFleet::set_valid_from): <p>The start date and time of the request, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). The default is to start fulfilling the request immediately.</p>
    ///   - [`valid_until(DateTime)`](crate::client::fluent_builders::CreateFleet::valid_until) / [`set_valid_until(Option<DateTime>)`](crate::client::fluent_builders::CreateFleet::set_valid_until): <p>The end date and time of the request, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). At this point, no new EC2 Fleet requests are placed or able to fulfill the request. If no value is specified, the request remains until you cancel it.</p>
    ///   - [`replace_unhealthy_instances(bool)`](crate::client::fluent_builders::CreateFleet::replace_unhealthy_instances) / [`set_replace_unhealthy_instances(Option<bool>)`](crate::client::fluent_builders::CreateFleet::set_replace_unhealthy_instances): <p>Indicates whether EC2 Fleet should replace unhealthy Spot Instances. Supported only for fleets of type <code>maintain</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks">EC2 Fleet health checks</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateFleet::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateFleet::set_tag_specifications): <p>The key-value pair for tagging the EC2 Fleet request on creation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources">Tagging your resources</a>.</p>  <p>If the fleet type is <code>instant</code>, specify a resource type of <code>fleet</code> to tag the fleet or <code>instance</code> to tag the instances at launch.</p>  <p>If the fleet type is <code>maintain</code> or <code>request</code>, specify a resource type of <code>fleet</code> to tag the fleet. You cannot specify a resource type of <code>instance</code>. To tag instances at launch, specify the tags in a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template">launch template</a>.</p>
    ///   - [`context(impl Into<String>)`](crate::client::fluent_builders::CreateFleet::context) / [`set_context(Option<String>)`](crate::client::fluent_builders::CreateFleet::set_context): <p>Reserved.</p>
    /// - On success, responds with [`CreateFleetOutput`](crate::output::CreateFleetOutput) with field(s):
    ///   - [`fleet_id(Option<String>)`](crate::output::CreateFleetOutput::fleet_id): <p>The ID of the EC2 Fleet.</p>
    ///   - [`errors(Option<Vec<CreateFleetError>>)`](crate::output::CreateFleetOutput::errors): <p>Information about the instances that could not be launched by the fleet. Supported only for fleets of type <code>instant</code>.</p>
    ///   - [`instances(Option<Vec<CreateFleetInstance>>)`](crate::output::CreateFleetOutput::instances): <p>Information about the instances that were launched by the fleet. Supported only for fleets of type <code>instant</code>.</p>
    /// - On failure, responds with [`SdkError<CreateFleetError>`](crate::error::CreateFleetError)
    pub fn create_fleet(&self) -> fluent_builders::CreateFleet {
        fluent_builders::CreateFleet::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateFlowLogs`](crate::client::fluent_builders::CreateFlowLogs) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateFlowLogs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateFlowLogs::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateFlowLogs::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateFlowLogs::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`deliver_logs_permission_arn(impl Into<String>)`](crate::client::fluent_builders::CreateFlowLogs::deliver_logs_permission_arn) / [`set_deliver_logs_permission_arn(Option<String>)`](crate::client::fluent_builders::CreateFlowLogs::set_deliver_logs_permission_arn): <p>The ARN of the IAM role that allows Amazon EC2 to publish flow logs to a CloudWatch Logs log group in your account.</p>  <p>This parameter is required if the destination type is <code>cloud-watch-logs</code> and unsupported otherwise.</p>
    ///   - [`deliver_cross_account_role(impl Into<String>)`](crate::client::fluent_builders::CreateFlowLogs::deliver_cross_account_role) / [`set_deliver_cross_account_role(Option<String>)`](crate::client::fluent_builders::CreateFlowLogs::set_deliver_cross_account_role): <p>The ARN of the IAM role that allows Amazon EC2 to publish flow logs across accounts.</p>
    ///   - [`log_group_name(impl Into<String>)`](crate::client::fluent_builders::CreateFlowLogs::log_group_name) / [`set_log_group_name(Option<String>)`](crate::client::fluent_builders::CreateFlowLogs::set_log_group_name): <p>The name of a new or existing CloudWatch Logs log group where Amazon EC2 publishes your flow logs.</p>  <p>This parameter is valid only if the destination type is <code>cloud-watch-logs</code>.</p>
    ///   - [`resource_ids(Vec<String>)`](crate::client::fluent_builders::CreateFlowLogs::resource_ids) / [`set_resource_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CreateFlowLogs::set_resource_ids): <p>The IDs of the resources to monitor. For example, if the resource type is <code>VPC</code>, specify the IDs of the VPCs.</p>  <p>Constraints: Maximum of 25 for transit gateway resource types. Maximum of 1000 for the other resource types.</p>
    ///   - [`resource_type(FlowLogsResourceType)`](crate::client::fluent_builders::CreateFlowLogs::resource_type) / [`set_resource_type(Option<FlowLogsResourceType>)`](crate::client::fluent_builders::CreateFlowLogs::set_resource_type): <p>The type of resource to monitor.</p>
    ///   - [`traffic_type(TrafficType)`](crate::client::fluent_builders::CreateFlowLogs::traffic_type) / [`set_traffic_type(Option<TrafficType>)`](crate::client::fluent_builders::CreateFlowLogs::set_traffic_type): <p>The type of traffic to monitor (accepted traffic, rejected traffic, or all traffic). This parameter is not supported for transit gateway resource types. It is required for the other resource types.</p>
    ///   - [`log_destination_type(LogDestinationType)`](crate::client::fluent_builders::CreateFlowLogs::log_destination_type) / [`set_log_destination_type(Option<LogDestinationType>)`](crate::client::fluent_builders::CreateFlowLogs::set_log_destination_type): <p>The type of destination for the flow log data.</p>  <p>Default: <code>cloud-watch-logs</code> </p>
    ///   - [`log_destination(impl Into<String>)`](crate::client::fluent_builders::CreateFlowLogs::log_destination) / [`set_log_destination(Option<String>)`](crate::client::fluent_builders::CreateFlowLogs::set_log_destination): <p>The destination for the flow log data. The meaning of this parameter depends on the destination type.</p>  <ul>   <li> <p>If the destination type is <code>cloud-watch-logs</code>, specify the ARN of a CloudWatch Logs log group. For example:</p> <p>arn:aws:logs:<i>region</i>:<i>account_id</i>:log-group:<i>my_group</i> </p> <p>Alternatively, use the <code>LogGroupName</code> parameter.</p> </li>   <li> <p>If the destination type is <code>s3</code>, specify the ARN of an S3 bucket. For example:</p> <p>arn:aws:s3:::<i>my_bucket</i>/<i>my_subfolder</i>/</p> <p>The subfolder is optional. Note that you can't use <code>AWSLogs</code> as a subfolder name.</p> </li>   <li> <p>If the destination type is <code>kinesis-data-firehose</code>, specify the ARN of a Kinesis Data Firehose delivery stream. For example:</p> <p>arn:aws:firehose:<i>region</i>:<i>account_id</i>:deliverystream:<i>my_stream</i> </p> </li>  </ul>
    ///   - [`log_format(impl Into<String>)`](crate::client::fluent_builders::CreateFlowLogs::log_format) / [`set_log_format(Option<String>)`](crate::client::fluent_builders::CreateFlowLogs::set_log_format): <p>The fields to include in the flow log record. List the fields in the order in which they should appear. If you omit this parameter, the flow log is created using the default format. If you specify this parameter, you must include at least one field. For more information about the available fields, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records">Flow log records</a> in the <i>Amazon VPC User Guide</i> or <a href="https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html#flow-log-records">Transit Gateway Flow Log records</a> in the <i>Amazon Web Services Transit Gateway Guide</i>.</p>  <p>Specify the fields using the <code>${field-id}</code> format, separated by spaces. For the CLI, surround this parameter value with single quotes on Linux or double quotes on Windows.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateFlowLogs::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateFlowLogs::set_tag_specifications): <p>The tags to apply to the flow logs.</p>
    ///   - [`max_aggregation_interval(i32)`](crate::client::fluent_builders::CreateFlowLogs::max_aggregation_interval) / [`set_max_aggregation_interval(Option<i32>)`](crate::client::fluent_builders::CreateFlowLogs::set_max_aggregation_interval): <p>The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. The possible values are 60 seconds (1 minute) or 600 seconds (10 minutes). This parameter must be 60 seconds for transit gateway resource types.</p>  <p>When a network interface is attached to a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Nitro-based instance</a>, the aggregation interval is always 60 seconds or less, regardless of the value that you specify.</p>  <p>Default: 600</p>
    ///   - [`destination_options(DestinationOptionsRequest)`](crate::client::fluent_builders::CreateFlowLogs::destination_options) / [`set_destination_options(Option<DestinationOptionsRequest>)`](crate::client::fluent_builders::CreateFlowLogs::set_destination_options): <p>The destination options.</p>
    /// - On success, responds with [`CreateFlowLogsOutput`](crate::output::CreateFlowLogsOutput) with field(s):
    ///   - [`client_token(Option<String>)`](crate::output::CreateFlowLogsOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
    ///   - [`flow_log_ids(Option<Vec<String>>)`](crate::output::CreateFlowLogsOutput::flow_log_ids): <p>The IDs of the flow logs.</p>
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::CreateFlowLogsOutput::unsuccessful): <p>Information about the flow logs that could not be created successfully.</p>
    /// - On failure, responds with [`SdkError<CreateFlowLogsError>`](crate::error::CreateFlowLogsError)
    pub fn create_flow_logs(&self) -> fluent_builders::CreateFlowLogs {
        fluent_builders::CreateFlowLogs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateFpgaImage`](crate::client::fluent_builders::CreateFpgaImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateFpgaImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateFpgaImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`input_storage_location(StorageLocation)`](crate::client::fluent_builders::CreateFpgaImage::input_storage_location) / [`set_input_storage_location(Option<StorageLocation>)`](crate::client::fluent_builders::CreateFpgaImage::set_input_storage_location): <p>The location of the encrypted design checkpoint in Amazon S3. The input must be a tarball.</p>
    ///   - [`logs_storage_location(StorageLocation)`](crate::client::fluent_builders::CreateFpgaImage::logs_storage_location) / [`set_logs_storage_location(Option<StorageLocation>)`](crate::client::fluent_builders::CreateFpgaImage::set_logs_storage_location): <p>The location in Amazon S3 for the output logs.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateFpgaImage::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateFpgaImage::set_description): <p>A description for the AFI.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateFpgaImage::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateFpgaImage::set_name): <p>A name for the AFI.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateFpgaImage::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateFpgaImage::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateFpgaImage::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateFpgaImage::set_tag_specifications): <p>The tags to apply to the FPGA image during creation.</p>
    /// - On success, responds with [`CreateFpgaImageOutput`](crate::output::CreateFpgaImageOutput) with field(s):
    ///   - [`fpga_image_id(Option<String>)`](crate::output::CreateFpgaImageOutput::fpga_image_id): <p>The FPGA image identifier (AFI ID).</p>
    ///   - [`fpga_image_global_id(Option<String>)`](crate::output::CreateFpgaImageOutput::fpga_image_global_id): <p>The global FPGA image identifier (AGFI ID).</p>
    /// - On failure, responds with [`SdkError<CreateFpgaImageError>`](crate::error::CreateFpgaImageError)
    pub fn create_fpga_image(&self) -> fluent_builders::CreateFpgaImage {
        fluent_builders::CreateFpgaImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateImage`](crate::client::fluent_builders::CreateImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`block_device_mappings(Vec<BlockDeviceMapping>)`](crate::client::fluent_builders::CreateImage::block_device_mappings) / [`set_block_device_mappings(Option<Vec<BlockDeviceMapping>>)`](crate::client::fluent_builders::CreateImage::set_block_device_mappings): <p>The block device mappings. This parameter cannot be used to modify the encryption status of existing volumes or snapshots. To create an AMI with encrypted snapshots, use the <code>CopyImage</code> action.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateImage::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateImage::set_description): <p>A description for the new image.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::CreateImage::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::CreateImage::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateImage::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateImage::set_name): <p>A name for the new image.</p>  <p>Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)</p>
    ///   - [`no_reboot(bool)`](crate::client::fluent_builders::CreateImage::no_reboot) / [`set_no_reboot(Option<bool>)`](crate::client::fluent_builders::CreateImage::set_no_reboot): <p>By default, when Amazon EC2 creates the new AMI, it reboots the instance so that it can take snapshots of the attached volumes while data is at rest, in order to ensure a consistent state. You can set the <code>NoReboot</code> parameter to <code>true</code> in the API request, or use the <code>--no-reboot</code> option in the CLI to prevent Amazon EC2 from shutting down and rebooting the instance.</p> <important>   <p>If you choose to bypass the shutdown and reboot process by setting the <code>NoReboot</code> parameter to <code>true</code> in the API request, or by using the <code>--no-reboot</code> option in the CLI, we can't guarantee the file system integrity of the created image.</p>  </important>  <p>Default: <code>false</code> (follow standard reboot process)</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateImage::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateImage::set_tag_specifications): <p>The tags to apply to the AMI and snapshots on creation. You can tag the AMI, the snapshots, or both.</p>  <ul>   <li> <p>To tag the AMI, the value for <code>ResourceType</code> must be <code>image</code>.</p> </li>   <li> <p>To tag the snapshots that are created of the root volume and of other Amazon EBS volumes that are attached to the instance, the value for <code>ResourceType</code> must be <code>snapshot</code>. The same tag is applied to all of the snapshots that are created.</p> </li>  </ul>  <p>If you specify other values for <code>ResourceType</code>, the request fails.</p>  <p>To tag an AMI or snapshot after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>. </p>
    /// - On success, responds with [`CreateImageOutput`](crate::output::CreateImageOutput) with field(s):
    ///   - [`image_id(Option<String>)`](crate::output::CreateImageOutput::image_id): <p>The ID of the new AMI.</p>
    /// - On failure, responds with [`SdkError<CreateImageError>`](crate::error::CreateImageError)
    pub fn create_image(&self) -> fluent_builders::CreateImage {
        fluent_builders::CreateImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateInstanceEventWindow`](crate::client::fluent_builders::CreateInstanceEventWindow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateInstanceEventWindow::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateInstanceEventWindow::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateInstanceEventWindow::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateInstanceEventWindow::set_name): <p>The name of the event window.</p>
    ///   - [`time_ranges(Vec<InstanceEventWindowTimeRangeRequest>)`](crate::client::fluent_builders::CreateInstanceEventWindow::time_ranges) / [`set_time_ranges(Option<Vec<InstanceEventWindowTimeRangeRequest>>)`](crate::client::fluent_builders::CreateInstanceEventWindow::set_time_ranges): <p>The time range for the event window. If you specify a time range, you can't specify a cron expression.</p>
    ///   - [`cron_expression(impl Into<String>)`](crate::client::fluent_builders::CreateInstanceEventWindow::cron_expression) / [`set_cron_expression(Option<String>)`](crate::client::fluent_builders::CreateInstanceEventWindow::set_cron_expression): <p>The cron expression for the event window, for example, <code>* 0-4,20-23 * * 1,5</code>. If you specify a cron expression, you can't specify a time range.</p>  <p>Constraints:</p>  <ul>   <li> <p>Only hour and day of the week values are supported.</p> </li>   <li> <p>For day of the week values, you can specify either integers <code>0</code> through <code>6</code>, or alternative single values <code>SUN</code> through <code>SAT</code>.</p> </li>   <li> <p>The minute, month, and year must be specified by <code>*</code>.</p> </li>   <li> <p>The hour value must be one or a multiple range, for example, <code>0-4</code> or <code>0-4,20-23</code>.</p> </li>   <li> <p>Each hour range must be &gt;= 2 hours, for example, <code>0-2</code> or <code>20-23</code>.</p> </li>   <li> <p>The event window must be &gt;= 4 hours. The combined total time ranges in the event window must be &gt;= 4 hours.</p> </li>  </ul>  <p>For more information about cron expressions, see <a href="https://en.wikipedia.org/wiki/Cron">cron</a> on the <i>Wikipedia website</i>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateInstanceEventWindow::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateInstanceEventWindow::set_tag_specifications): <p>The tags to apply to the event window.</p>
    /// - On success, responds with [`CreateInstanceEventWindowOutput`](crate::output::CreateInstanceEventWindowOutput) with field(s):
    ///   - [`instance_event_window(Option<InstanceEventWindow>)`](crate::output::CreateInstanceEventWindowOutput::instance_event_window): <p>Information about the event window.</p>
    /// - On failure, responds with [`SdkError<CreateInstanceEventWindowError>`](crate::error::CreateInstanceEventWindowError)
    pub fn create_instance_event_window(&self) -> fluent_builders::CreateInstanceEventWindow {
        fluent_builders::CreateInstanceEventWindow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateInstanceExportTask`](crate::client::fluent_builders::CreateInstanceExportTask) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateInstanceExportTask::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateInstanceExportTask::set_description): <p>A description for the conversion task or the resource being exported. The maximum length is 255 characters.</p>
    ///   - [`export_to_s3_task(ExportToS3TaskSpecification)`](crate::client::fluent_builders::CreateInstanceExportTask::export_to_s3_task) / [`set_export_to_s3_task(Option<ExportToS3TaskSpecification>)`](crate::client::fluent_builders::CreateInstanceExportTask::set_export_to_s3_task): <p>The format and location for an export instance task.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::CreateInstanceExportTask::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::CreateInstanceExportTask::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`target_environment(ExportEnvironment)`](crate::client::fluent_builders::CreateInstanceExportTask::target_environment) / [`set_target_environment(Option<ExportEnvironment>)`](crate::client::fluent_builders::CreateInstanceExportTask::set_target_environment): <p>The target virtualization environment.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateInstanceExportTask::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateInstanceExportTask::set_tag_specifications): <p>The tags to apply to the export instance task during creation.</p>
    /// - On success, responds with [`CreateInstanceExportTaskOutput`](crate::output::CreateInstanceExportTaskOutput) with field(s):
    ///   - [`export_task(Option<ExportTask>)`](crate::output::CreateInstanceExportTaskOutput::export_task): <p>Information about the export instance task.</p>
    /// - On failure, responds with [`SdkError<CreateInstanceExportTaskError>`](crate::error::CreateInstanceExportTaskError)
    pub fn create_instance_export_task(&self) -> fluent_builders::CreateInstanceExportTask {
        fluent_builders::CreateInstanceExportTask::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateInternetGateway`](crate::client::fluent_builders::CreateInternetGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateInternetGateway::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateInternetGateway::set_tag_specifications): <p>The tags to assign to the internet gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateInternetGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateInternetGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateInternetGatewayOutput`](crate::output::CreateInternetGatewayOutput) with field(s):
    ///   - [`internet_gateway(Option<InternetGateway>)`](crate::output::CreateInternetGatewayOutput::internet_gateway): <p>Information about the internet gateway.</p>
    /// - On failure, responds with [`SdkError<CreateInternetGatewayError>`](crate::error::CreateInternetGatewayError)
    pub fn create_internet_gateway(&self) -> fluent_builders::CreateInternetGateway {
        fluent_builders::CreateInternetGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateIpam`](crate::client::fluent_builders::CreateIpam) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateIpam::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateIpam::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateIpam::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateIpam::set_description): <p>A description for the IPAM.</p>
    ///   - [`operating_regions(Vec<AddIpamOperatingRegion>)`](crate::client::fluent_builders::CreateIpam::operating_regions) / [`set_operating_regions(Option<Vec<AddIpamOperatingRegion>>)`](crate::client::fluent_builders::CreateIpam::set_operating_regions): <p>The operating Regions for the IPAM. Operating Regions are Amazon Web Services Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only discovers and monitors resources in the Amazon Web Services Regions you select as operating Regions.</p>  <p>For more information about operating Regions, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html">Create an IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateIpam::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateIpam::set_tag_specifications): <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateIpam::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateIpam::set_client_token): <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    /// - On success, responds with [`CreateIpamOutput`](crate::output::CreateIpamOutput) with field(s):
    ///   - [`ipam(Option<Ipam>)`](crate::output::CreateIpamOutput::ipam): <p>Information about the IPAM created.</p>
    /// - On failure, responds with [`SdkError<CreateIpamError>`](crate::error::CreateIpamError)
    pub fn create_ipam(&self) -> fluent_builders::CreateIpam {
        fluent_builders::CreateIpam::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateIpamPool`](crate::client::fluent_builders::CreateIpamPool) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateIpamPool::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateIpamPool::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_scope_id(impl Into<String>)`](crate::client::fluent_builders::CreateIpamPool::ipam_scope_id) / [`set_ipam_scope_id(Option<String>)`](crate::client::fluent_builders::CreateIpamPool::set_ipam_scope_id): <p>The ID of the scope in which you would like to create the IPAM pool.</p>
    ///   - [`locale(impl Into<String>)`](crate::client::fluent_builders::CreateIpamPool::locale) / [`set_locale(Option<String>)`](crate::client::fluent_builders::CreateIpamPool::set_locale): <p>In IPAM, the locale is the Amazon Web Services Region where you want to make an IPAM pool available for allocations. Only resources in the same Region as the locale of the pool can get IP address allocations from the pool. You can only allocate a CIDR for a VPC, for example, from an IPAM pool that shares a locale with the VPC’s Region. Note that once you choose a Locale for a pool, you cannot modify it. If you do not choose a locale, resources in Regions others than the IPAM's home region cannot use CIDRs from this pool.</p>  <p>Possible values: Any Amazon Web Services Region, such as us-east-1.</p>
    ///   - [`source_ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::CreateIpamPool::source_ipam_pool_id) / [`set_source_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::CreateIpamPool::set_source_ipam_pool_id): <p>The ID of the source IPAM pool. Use this option to create a pool within an existing pool. Note that the CIDR you provision for the pool within the source pool must be available in the source pool's CIDR range.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateIpamPool::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateIpamPool::set_description): <p>A description for the IPAM pool.</p>
    ///   - [`address_family(AddressFamily)`](crate::client::fluent_builders::CreateIpamPool::address_family) / [`set_address_family(Option<AddressFamily>)`](crate::client::fluent_builders::CreateIpamPool::set_address_family): <p>The IP protocol assigned to this IPAM pool. You must choose either IPv4 or IPv6 protocol for a pool.</p>
    ///   - [`auto_import(bool)`](crate::client::fluent_builders::CreateIpamPool::auto_import) / [`set_auto_import(Option<bool>)`](crate::client::fluent_builders::CreateIpamPool::set_auto_import): <p>If selected, IPAM will continuously look for resources within the CIDR range of this pool and automatically import them as allocations into your IPAM. The CIDRs that will be allocated for these resources must not already be allocated to other resources in order for the import to succeed. IPAM will import a CIDR regardless of its compliance with the pool's allocation rules, so a resource might be imported and subsequently marked as noncompliant. If IPAM discovers multiple CIDRs that overlap, IPAM will import the largest CIDR only. If IPAM discovers multiple CIDRs with matching CIDRs, IPAM will randomly import one of them only. </p>  <p>A locale must be set on the pool for this feature to work.</p>
    ///   - [`publicly_advertisable(bool)`](crate::client::fluent_builders::CreateIpamPool::publicly_advertisable) / [`set_publicly_advertisable(Option<bool>)`](crate::client::fluent_builders::CreateIpamPool::set_publicly_advertisable): <p>Determines if the pool is publicly advertisable. This option is not available for pools with AddressFamily set to <code>ipv4</code>.</p>
    ///   - [`allocation_min_netmask_length(i32)`](crate::client::fluent_builders::CreateIpamPool::allocation_min_netmask_length) / [`set_allocation_min_netmask_length(Option<i32>)`](crate::client::fluent_builders::CreateIpamPool::set_allocation_min_netmask_length): <p>The minimum netmask length required for CIDR allocations in this IPAM pool to be compliant. The minimum netmask length must be less than the maximum netmask length. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
    ///   - [`allocation_max_netmask_length(i32)`](crate::client::fluent_builders::CreateIpamPool::allocation_max_netmask_length) / [`set_allocation_max_netmask_length(Option<i32>)`](crate::client::fluent_builders::CreateIpamPool::set_allocation_max_netmask_length): <p>The maximum netmask length possible for CIDR allocations in this IPAM pool to be compliant. The maximum netmask length must be greater than the minimum netmask length. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
    ///   - [`allocation_default_netmask_length(i32)`](crate::client::fluent_builders::CreateIpamPool::allocation_default_netmask_length) / [`set_allocation_default_netmask_length(Option<i32>)`](crate::client::fluent_builders::CreateIpamPool::set_allocation_default_netmask_length): <p>The default netmask length for allocations added to this pool. If, for example, the CIDR assigned to this pool is 10.0.0.0/8 and you enter 16 here, new allocations will default to 10.0.0.0/16.</p>
    ///   - [`allocation_resource_tags(Vec<RequestIpamResourceTag>)`](crate::client::fluent_builders::CreateIpamPool::allocation_resource_tags) / [`set_allocation_resource_tags(Option<Vec<RequestIpamResourceTag>>)`](crate::client::fluent_builders::CreateIpamPool::set_allocation_resource_tags): <p>Tags that are required for resources that use CIDRs from this IPAM pool. Resources that do not have these tags will not be allowed to allocate space from the pool. If the resources have their tags changed after they have allocated space or if the allocation tagging requirements are changed on the pool, the resource may be marked as noncompliant.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateIpamPool::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateIpamPool::set_tag_specifications): <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateIpamPool::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateIpamPool::set_client_token): <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`aws_service(IpamPoolAwsService)`](crate::client::fluent_builders::CreateIpamPool::aws_service) / [`set_aws_service(Option<IpamPoolAwsService>)`](crate::client::fluent_builders::CreateIpamPool::set_aws_service): <p>Limits which service in Amazon Web Services that the pool can be used in. "ec2", for example, allows users to use space for Elastic IP addresses and VPCs.</p>
    /// - On success, responds with [`CreateIpamPoolOutput`](crate::output::CreateIpamPoolOutput) with field(s):
    ///   - [`ipam_pool(Option<IpamPool>)`](crate::output::CreateIpamPoolOutput::ipam_pool): <p>Information about the IPAM pool created.</p>
    /// - On failure, responds with [`SdkError<CreateIpamPoolError>`](crate::error::CreateIpamPoolError)
    pub fn create_ipam_pool(&self) -> fluent_builders::CreateIpamPool {
        fluent_builders::CreateIpamPool::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateIpamScope`](crate::client::fluent_builders::CreateIpamScope) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateIpamScope::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateIpamScope::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_id(impl Into<String>)`](crate::client::fluent_builders::CreateIpamScope::ipam_id) / [`set_ipam_id(Option<String>)`](crate::client::fluent_builders::CreateIpamScope::set_ipam_id): <p>The ID of the IPAM for which you're creating this scope.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateIpamScope::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateIpamScope::set_description): <p>A description for the scope you're creating.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateIpamScope::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateIpamScope::set_tag_specifications): <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateIpamScope::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateIpamScope::set_client_token): <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    /// - On success, responds with [`CreateIpamScopeOutput`](crate::output::CreateIpamScopeOutput) with field(s):
    ///   - [`ipam_scope(Option<IpamScope>)`](crate::output::CreateIpamScopeOutput::ipam_scope): <p>Information about the created scope.</p>
    /// - On failure, responds with [`SdkError<CreateIpamScopeError>`](crate::error::CreateIpamScopeError)
    pub fn create_ipam_scope(&self) -> fluent_builders::CreateIpamScope {
        fluent_builders::CreateIpamScope::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateKeyPair`](crate::client::fluent_builders::CreateKeyPair) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`key_name(impl Into<String>)`](crate::client::fluent_builders::CreateKeyPair::key_name) / [`set_key_name(Option<String>)`](crate::client::fluent_builders::CreateKeyPair::set_key_name): <p>A unique name for the key pair.</p>  <p>Constraints: Up to 255 ASCII characters</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateKeyPair::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateKeyPair::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`key_type(KeyType)`](crate::client::fluent_builders::CreateKeyPair::key_type) / [`set_key_type(Option<KeyType>)`](crate::client::fluent_builders::CreateKeyPair::set_key_type): <p>The type of key pair. Note that ED25519 keys are not supported for Windows instances.</p>  <p>Default: <code>rsa</code> </p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateKeyPair::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateKeyPair::set_tag_specifications): <p>The tags to apply to the new key pair.</p>
    ///   - [`key_format(KeyFormat)`](crate::client::fluent_builders::CreateKeyPair::key_format) / [`set_key_format(Option<KeyFormat>)`](crate::client::fluent_builders::CreateKeyPair::set_key_format): <p>The format of the key pair.</p>  <p>Default: <code>pem</code> </p>
    /// - On success, responds with [`CreateKeyPairOutput`](crate::output::CreateKeyPairOutput) with field(s):
    ///   - [`key_fingerprint(Option<String>)`](crate::output::CreateKeyPairOutput::key_fingerprint): <ul>   <li> <p>For RSA key pairs, the key fingerprint is the SHA-1 digest of the DER encoded private key.</p> </li>   <li> <p>For ED25519 key pairs, the key fingerprint is the base64-encoded SHA-256 digest, which is the default for OpenSSH, starting with OpenSSH 6.8.</p> </li>  </ul>
    ///   - [`key_material(Option<String>)`](crate::output::CreateKeyPairOutput::key_material): <p>An unencrypted PEM encoded RSA or ED25519 private key.</p>
    ///   - [`key_name(Option<String>)`](crate::output::CreateKeyPairOutput::key_name): <p>The name of the key pair.</p>
    ///   - [`key_pair_id(Option<String>)`](crate::output::CreateKeyPairOutput::key_pair_id): <p>The ID of the key pair.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::CreateKeyPairOutput::tags): <p>Any tags applied to the key pair.</p>
    /// - On failure, responds with [`SdkError<CreateKeyPairError>`](crate::error::CreateKeyPairError)
    pub fn create_key_pair(&self) -> fluent_builders::CreateKeyPair {
        fluent_builders::CreateKeyPair::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateLaunchTemplate`](crate::client::fluent_builders::CreateLaunchTemplate) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateLaunchTemplate::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateLaunchTemplate::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateLaunchTemplate::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateLaunchTemplate::set_client_token): <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>  <p>Constraint: Maximum 128 ASCII characters.</p>
    ///   - [`launch_template_name(impl Into<String>)`](crate::client::fluent_builders::CreateLaunchTemplate::launch_template_name) / [`set_launch_template_name(Option<String>)`](crate::client::fluent_builders::CreateLaunchTemplate::set_launch_template_name): <p>A name for the launch template.</p>
    ///   - [`version_description(impl Into<String>)`](crate::client::fluent_builders::CreateLaunchTemplate::version_description) / [`set_version_description(Option<String>)`](crate::client::fluent_builders::CreateLaunchTemplate::set_version_description): <p>A description for the first version of the launch template.</p>
    ///   - [`launch_template_data(RequestLaunchTemplateData)`](crate::client::fluent_builders::CreateLaunchTemplate::launch_template_data) / [`set_launch_template_data(Option<RequestLaunchTemplateData>)`](crate::client::fluent_builders::CreateLaunchTemplate::set_launch_template_data): <p>The information for the launch template.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateLaunchTemplate::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateLaunchTemplate::set_tag_specifications): <p>The tags to apply to the launch template on creation. To tag the launch template, the resource type must be <code>launch-template</code>.</p> <note>   <p>To specify the tags for the resources that are created when an instance is launched, you must use the <code>TagSpecifications</code> parameter in the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html">launch template data</a> structure.</p>  </note>
    /// - On success, responds with [`CreateLaunchTemplateOutput`](crate::output::CreateLaunchTemplateOutput) with field(s):
    ///   - [`launch_template(Option<LaunchTemplate>)`](crate::output::CreateLaunchTemplateOutput::launch_template): <p>Information about the launch template.</p>
    ///   - [`warning(Option<ValidationWarning>)`](crate::output::CreateLaunchTemplateOutput::warning): <p>If the launch template contains parameters or parameter combinations that are not valid, an error code and an error message are returned for each issue that's found.</p>
    /// - On failure, responds with [`SdkError<CreateLaunchTemplateError>`](crate::error::CreateLaunchTemplateError)
    pub fn create_launch_template(&self) -> fluent_builders::CreateLaunchTemplate {
        fluent_builders::CreateLaunchTemplate::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateLaunchTemplateVersion`](crate::client::fluent_builders::CreateLaunchTemplateVersion) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::set_client_token): <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>  <p>Constraint: Maximum 128 ASCII characters.</p>
    ///   - [`launch_template_id(impl Into<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::launch_template_id) / [`set_launch_template_id(Option<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::set_launch_template_id): <p>The ID of the launch template.</p>  <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
    ///   - [`launch_template_name(impl Into<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::launch_template_name) / [`set_launch_template_name(Option<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::set_launch_template_name): <p>The name of the launch template.</p>  <p>You must specify the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
    ///   - [`source_version(impl Into<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::source_version) / [`set_source_version(Option<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::set_source_version): <p>The version number of the launch template version on which to base the new version. The new version inherits the same launch parameters as the source version, except for parameters that you specify in <code>LaunchTemplateData</code>. Snapshots applied to the block device mapping are ignored when creating a new version unless they are explicitly included.</p>
    ///   - [`version_description(impl Into<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::version_description) / [`set_version_description(Option<String>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::set_version_description): <p>A description for the version of the launch template.</p>
    ///   - [`launch_template_data(RequestLaunchTemplateData)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::launch_template_data) / [`set_launch_template_data(Option<RequestLaunchTemplateData>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::set_launch_template_data): <p>The information for the launch template.</p>
    ///   - [`resolve_alias(bool)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::resolve_alias) / [`set_resolve_alias(Option<bool>)`](crate::client::fluent_builders::CreateLaunchTemplateVersion::set_resolve_alias): <p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageID</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>  <p>Default: <code>false</code> </p>
    /// - On success, responds with [`CreateLaunchTemplateVersionOutput`](crate::output::CreateLaunchTemplateVersionOutput) with field(s):
    ///   - [`launch_template_version(Option<LaunchTemplateVersion>)`](crate::output::CreateLaunchTemplateVersionOutput::launch_template_version): <p>Information about the launch template version.</p>
    ///   - [`warning(Option<ValidationWarning>)`](crate::output::CreateLaunchTemplateVersionOutput::warning): <p>If the new version of the launch template contains parameters or parameter combinations that are not valid, an error code and an error message are returned for each issue that's found.</p>
    /// - On failure, responds with [`SdkError<CreateLaunchTemplateVersionError>`](crate::error::CreateLaunchTemplateVersionError)
    pub fn create_launch_template_version(&self) -> fluent_builders::CreateLaunchTemplateVersion {
        fluent_builders::CreateLaunchTemplateVersion::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateLocalGatewayRoute`](crate::client::fluent_builders::CreateLocalGatewayRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::set_destination_cidr_block): <p>The CIDR range used for destination matches. Routing decisions are based on the most specific match.</p>
    ///   - [`local_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::local_gateway_route_table_id) / [`set_local_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::set_local_gateway_route_table_id): <p>The ID of the local gateway route table.</p>
    ///   - [`local_gateway_virtual_interface_group_id(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::local_gateway_virtual_interface_group_id) / [`set_local_gateway_virtual_interface_group_id(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::set_local_gateway_virtual_interface_group_id): <p>The ID of the virtual interface group.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateLocalGatewayRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRoute::set_network_interface_id): <p>The ID of the network interface.</p>
    /// - On success, responds with [`CreateLocalGatewayRouteOutput`](crate::output::CreateLocalGatewayRouteOutput) with field(s):
    ///   - [`route(Option<LocalGatewayRoute>)`](crate::output::CreateLocalGatewayRouteOutput::route): <p>Information about the route.</p>
    /// - On failure, responds with [`SdkError<CreateLocalGatewayRouteError>`](crate::error::CreateLocalGatewayRouteError)
    pub fn create_local_gateway_route(&self) -> fluent_builders::CreateLocalGatewayRoute {
        fluent_builders::CreateLocalGatewayRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateLocalGatewayRouteTable`](crate::client::fluent_builders::CreateLocalGatewayRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTable::local_gateway_id) / [`set_local_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTable::set_local_gateway_id): <p> The ID of the local gateway. </p>
    ///   - [`mode(LocalGatewayRouteTableMode)`](crate::client::fluent_builders::CreateLocalGatewayRouteTable::mode) / [`set_mode(Option<LocalGatewayRouteTableMode>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTable::set_mode): <p> The mode of the local gateway route table. </p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTable::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTable::set_tag_specifications): <p> The tags assigned to the local gateway route table. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateLocalGatewayRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateLocalGatewayRouteTableOutput`](crate::output::CreateLocalGatewayRouteTableOutput) with field(s):
    ///   - [`local_gateway_route_table(Option<LocalGatewayRouteTable>)`](crate::output::CreateLocalGatewayRouteTableOutput::local_gateway_route_table): <p>Information about the local gateway route table.</p>
    /// - On failure, responds with [`SdkError<CreateLocalGatewayRouteTableError>`](crate::error::CreateLocalGatewayRouteTableError)
    pub fn create_local_gateway_route_table(
        &self,
    ) -> fluent_builders::CreateLocalGatewayRouteTable {
        fluent_builders::CreateLocalGatewayRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::local_gateway_route_table_id) / [`set_local_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::set_local_gateway_route_table_id): <p> The ID of the local gateway route table. </p>
    ///   - [`local_gateway_virtual_interface_group_id(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::local_gateway_virtual_interface_group_id) / [`set_local_gateway_virtual_interface_group_id(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::set_local_gateway_virtual_interface_group_id): <p> The ID of the local gateway route table virtual interface group association. </p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::set_tag_specifications): <p> The tags assigned to the local gateway route table virtual interface group association. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationOutput`](crate::output::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationOutput) with field(s):
    ///   - [`local_gateway_route_table_virtual_interface_group_association(Option<LocalGatewayRouteTableVirtualInterfaceGroupAssociation>)`](crate::output::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationOutput::local_gateway_route_table_virtual_interface_group_association): <p>Information about the local gateway route table virtual interface group association.</p>
    /// - On failure, responds with [`SdkError<CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationError>`](crate::error::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationError)
    pub fn create_local_gateway_route_table_virtual_interface_group_association(
        &self,
    ) -> fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation {
        fluent_builders::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation::new(
            self.handle.clone(),
        )
    }
    /// Constructs a fluent builder for the [`CreateLocalGatewayRouteTableVpcAssociation`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::local_gateway_route_table_id) / [`set_local_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::set_local_gateway_route_table_id): <p>The ID of the local gateway route table.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::set_tag_specifications): <p>The tags to assign to the local gateway route table VPC association.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateLocalGatewayRouteTableVpcAssociationOutput`](crate::output::CreateLocalGatewayRouteTableVpcAssociationOutput) with field(s):
    ///   - [`local_gateway_route_table_vpc_association(Option<LocalGatewayRouteTableVpcAssociation>)`](crate::output::CreateLocalGatewayRouteTableVpcAssociationOutput::local_gateway_route_table_vpc_association): <p>Information about the association.</p>
    /// - On failure, responds with [`SdkError<CreateLocalGatewayRouteTableVpcAssociationError>`](crate::error::CreateLocalGatewayRouteTableVpcAssociationError)
    pub fn create_local_gateway_route_table_vpc_association(
        &self,
    ) -> fluent_builders::CreateLocalGatewayRouteTableVpcAssociation {
        fluent_builders::CreateLocalGatewayRouteTableVpcAssociation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateManagedPrefixList`](crate::client::fluent_builders::CreateManagedPrefixList) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateManagedPrefixList::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateManagedPrefixList::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`prefix_list_name(impl Into<String>)`](crate::client::fluent_builders::CreateManagedPrefixList::prefix_list_name) / [`set_prefix_list_name(Option<String>)`](crate::client::fluent_builders::CreateManagedPrefixList::set_prefix_list_name): <p>A name for the prefix list.</p>  <p>Constraints: Up to 255 characters in length. The name cannot start with <code>com.amazonaws</code>.</p>
    ///   - [`entries(Vec<AddPrefixListEntry>)`](crate::client::fluent_builders::CreateManagedPrefixList::entries) / [`set_entries(Option<Vec<AddPrefixListEntry>>)`](crate::client::fluent_builders::CreateManagedPrefixList::set_entries): <p>One or more entries for the prefix list.</p>
    ///   - [`max_entries(i32)`](crate::client::fluent_builders::CreateManagedPrefixList::max_entries) / [`set_max_entries(Option<i32>)`](crate::client::fluent_builders::CreateManagedPrefixList::set_max_entries): <p>The maximum number of entries for the prefix list.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateManagedPrefixList::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateManagedPrefixList::set_tag_specifications): <p>The tags to apply to the prefix list during creation.</p>
    ///   - [`address_family(impl Into<String>)`](crate::client::fluent_builders::CreateManagedPrefixList::address_family) / [`set_address_family(Option<String>)`](crate::client::fluent_builders::CreateManagedPrefixList::set_address_family): <p>The IP address type.</p>  <p>Valid Values: <code>IPv4</code> | <code>IPv6</code> </p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateManagedPrefixList::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateManagedPrefixList::set_client_token): <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>  <p>Constraints: Up to 255 UTF-8 characters in length.</p>
    /// - On success, responds with [`CreateManagedPrefixListOutput`](crate::output::CreateManagedPrefixListOutput) with field(s):
    ///   - [`prefix_list(Option<ManagedPrefixList>)`](crate::output::CreateManagedPrefixListOutput::prefix_list): <p>Information about the prefix list.</p>
    /// - On failure, responds with [`SdkError<CreateManagedPrefixListError>`](crate::error::CreateManagedPrefixListError)
    pub fn create_managed_prefix_list(&self) -> fluent_builders::CreateManagedPrefixList {
        fluent_builders::CreateManagedPrefixList::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNatGateway`](crate::client::fluent_builders::CreateNatGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_id(impl Into<String>)`](crate::client::fluent_builders::CreateNatGateway::allocation_id) / [`set_allocation_id(Option<String>)`](crate::client::fluent_builders::CreateNatGateway::set_allocation_id): <p>[Public NAT gateways only] The allocation ID of an Elastic IP address to associate with the NAT gateway. You cannot specify an Elastic IP address with a private NAT gateway. If the Elastic IP address is associated with another resource, you must first disassociate it.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateNatGateway::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateNatGateway::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>  <p>Constraint: Maximum 64 ASCII characters.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateNatGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateNatGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::CreateNatGateway::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::CreateNatGateway::set_subnet_id): <p>The subnet in which to create the NAT gateway.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateNatGateway::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateNatGateway::set_tag_specifications): <p>The tags to assign to the NAT gateway.</p>
    ///   - [`connectivity_type(ConnectivityType)`](crate::client::fluent_builders::CreateNatGateway::connectivity_type) / [`set_connectivity_type(Option<ConnectivityType>)`](crate::client::fluent_builders::CreateNatGateway::set_connectivity_type): <p>Indicates whether the NAT gateway supports public or private connectivity. The default is public connectivity.</p>
    ///   - [`private_ip_address(impl Into<String>)`](crate::client::fluent_builders::CreateNatGateway::private_ip_address) / [`set_private_ip_address(Option<String>)`](crate::client::fluent_builders::CreateNatGateway::set_private_ip_address): <p>The private IPv4 address to assign to the NAT gateway. If you don't provide an address, a private IPv4 address will be automatically assigned.</p>
    /// - On success, responds with [`CreateNatGatewayOutput`](crate::output::CreateNatGatewayOutput) with field(s):
    ///   - [`client_token(Option<String>)`](crate::output::CreateNatGatewayOutput::client_token): <p>Unique, case-sensitive identifier to ensure the idempotency of the request. Only returned if a client token was provided in the request.</p>
    ///   - [`nat_gateway(Option<NatGateway>)`](crate::output::CreateNatGatewayOutput::nat_gateway): <p>Information about the NAT gateway.</p>
    /// - On failure, responds with [`SdkError<CreateNatGatewayError>`](crate::error::CreateNatGatewayError)
    pub fn create_nat_gateway(&self) -> fluent_builders::CreateNatGateway {
        fluent_builders::CreateNatGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNetworkAcl`](crate::client::fluent_builders::CreateNetworkAcl) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateNetworkAcl::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateNetworkAcl::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkAcl::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateNetworkAcl::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateNetworkAcl::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateNetworkAcl::set_tag_specifications): <p>The tags to assign to the network ACL.</p>
    /// - On success, responds with [`CreateNetworkAclOutput`](crate::output::CreateNetworkAclOutput) with field(s):
    ///   - [`network_acl(Option<NetworkAcl>)`](crate::output::CreateNetworkAclOutput::network_acl): <p>Information about the network ACL.</p>
    /// - On failure, responds with [`SdkError<CreateNetworkAclError>`](crate::error::CreateNetworkAclError)
    pub fn create_network_acl(&self) -> fluent_builders::CreateNetworkAcl {
        fluent_builders::CreateNetworkAcl::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNetworkAclEntry`](crate::client::fluent_builders::CreateNetworkAclEntry) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkAclEntry::cidr_block) / [`set_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_cidr_block): <p>The IPv4 network range to allow or deny, in CIDR notation (for example <code>172.16.0.0/24</code>). We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateNetworkAclEntry::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`egress(bool)`](crate::client::fluent_builders::CreateNetworkAclEntry::egress) / [`set_egress(Option<bool>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_egress): <p>Indicates whether this is an egress rule (rule is applied to traffic leaving the subnet).</p>
    ///   - [`icmp_type_code(IcmpTypeCode)`](crate::client::fluent_builders::CreateNetworkAclEntry::icmp_type_code) / [`set_icmp_type_code(Option<IcmpTypeCode>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_icmp_type_code): <p>ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.</p>
    ///   - [`ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkAclEntry::ipv6_cidr_block) / [`set_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_ipv6_cidr_block): <p>The IPv6 network range to allow or deny, in CIDR notation (for example <code>2001:db8:1234:1a00::/64</code>).</p>
    ///   - [`network_acl_id(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkAclEntry::network_acl_id) / [`set_network_acl_id(Option<String>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_network_acl_id): <p>The ID of the network ACL.</p>
    ///   - [`port_range(PortRange)`](crate::client::fluent_builders::CreateNetworkAclEntry::port_range) / [`set_port_range(Option<PortRange>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_port_range): <p>TCP or UDP protocols: The range of ports the rule applies to. Required if specifying protocol 6 (TCP) or 17 (UDP).</p>
    ///   - [`protocol(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkAclEntry::protocol) / [`set_protocol(Option<String>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_protocol): <p>The protocol number. A value of "-1" means all protocols. If you specify "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), traffic on all ports is allowed, regardless of any ports or ICMP types or codes that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.</p>
    ///   - [`rule_action(RuleAction)`](crate::client::fluent_builders::CreateNetworkAclEntry::rule_action) / [`set_rule_action(Option<RuleAction>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_rule_action): <p>Indicates whether to allow or deny the traffic that matches the rule.</p>
    ///   - [`rule_number(i32)`](crate::client::fluent_builders::CreateNetworkAclEntry::rule_number) / [`set_rule_number(Option<i32>)`](crate::client::fluent_builders::CreateNetworkAclEntry::set_rule_number): <p>The rule number for the entry (for example, 100). ACL entries are processed in ascending order by rule number.</p>  <p>Constraints: Positive integer from 1 to 32766. The range 32767 to 65535 is reserved for internal use.</p>
    /// - On success, responds with [`CreateNetworkAclEntryOutput`](crate::output::CreateNetworkAclEntryOutput)

    /// - On failure, responds with [`SdkError<CreateNetworkAclEntryError>`](crate::error::CreateNetworkAclEntryError)
    pub fn create_network_acl_entry(&self) -> fluent_builders::CreateNetworkAclEntry {
        fluent_builders::CreateNetworkAclEntry::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNetworkInsightsAccessScope`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`match_paths(Vec<AccessScopePathRequest>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::match_paths) / [`set_match_paths(Option<Vec<AccessScopePathRequest>>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::set_match_paths): <p>The paths to match.</p>
    ///   - [`exclude_paths(Vec<AccessScopePathRequest>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::exclude_paths) / [`set_exclude_paths(Option<Vec<AccessScopePathRequest>>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::set_exclude_paths): <p>The paths to exclude.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::set_tag_specifications): <p>The tags to apply.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateNetworkInsightsAccessScope::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateNetworkInsightsAccessScopeOutput`](crate::output::CreateNetworkInsightsAccessScopeOutput) with field(s):
    ///   - [`network_insights_access_scope(Option<NetworkInsightsAccessScope>)`](crate::output::CreateNetworkInsightsAccessScopeOutput::network_insights_access_scope): <p>The Network Access Scope.</p>
    ///   - [`network_insights_access_scope_content(Option<NetworkInsightsAccessScopeContent>)`](crate::output::CreateNetworkInsightsAccessScopeOutput::network_insights_access_scope_content): <p>The Network Access Scope content.</p>
    /// - On failure, responds with [`SdkError<CreateNetworkInsightsAccessScopeError>`](crate::error::CreateNetworkInsightsAccessScopeError)
    pub fn create_network_insights_access_scope(
        &self,
    ) -> fluent_builders::CreateNetworkInsightsAccessScope {
        fluent_builders::CreateNetworkInsightsAccessScope::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNetworkInsightsPath`](crate::client::fluent_builders::CreateNetworkInsightsPath) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`source_ip(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::source_ip) / [`set_source_ip(Option<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_source_ip): <p>The IP address of the Amazon Web Services resource that is the source of the path.</p>
    ///   - [`destination_ip(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::destination_ip) / [`set_destination_ip(Option<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_destination_ip): <p>The IP address of the Amazon Web Services resource that is the destination of the path.</p>
    ///   - [`source(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::source) / [`set_source(Option<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_source): <p>The Amazon Web Services resource that is the source of the path.</p>
    ///   - [`destination(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::destination) / [`set_destination(Option<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_destination): <p>The Amazon Web Services resource that is the destination of the path.</p>
    ///   - [`protocol(Protocol)`](crate::client::fluent_builders::CreateNetworkInsightsPath::protocol) / [`set_protocol(Option<Protocol>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_protocol): <p>The protocol.</p>
    ///   - [`destination_port(i32)`](crate::client::fluent_builders::CreateNetworkInsightsPath::destination_port) / [`set_destination_port(Option<i32>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_destination_port): <p>The destination port.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_tag_specifications): <p>The tags to add to the path.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateNetworkInsightsPath::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateNetworkInsightsPath::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On success, responds with [`CreateNetworkInsightsPathOutput`](crate::output::CreateNetworkInsightsPathOutput) with field(s):
    ///   - [`network_insights_path(Option<NetworkInsightsPath>)`](crate::output::CreateNetworkInsightsPathOutput::network_insights_path): <p>Information about the path.</p>
    /// - On failure, responds with [`SdkError<CreateNetworkInsightsPathError>`](crate::error::CreateNetworkInsightsPathError)
    pub fn create_network_insights_path(&self) -> fluent_builders::CreateNetworkInsightsPath {
        fluent_builders::CreateNetworkInsightsPath::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNetworkInterface`](crate::client::fluent_builders::CreateNetworkInterface) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInterface::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateNetworkInterface::set_description): <p>A description for the network interface.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateNetworkInterface::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateNetworkInterface::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`groups(Vec<String>)`](crate::client::fluent_builders::CreateNetworkInterface::groups) / [`set_groups(Option<Vec<String>>)`](crate::client::fluent_builders::CreateNetworkInterface::set_groups): <p>The IDs of one or more security groups.</p>
    ///   - [`ipv6_address_count(i32)`](crate::client::fluent_builders::CreateNetworkInterface::ipv6_address_count) / [`set_ipv6_address_count(Option<i32>)`](crate::client::fluent_builders::CreateNetworkInterface::set_ipv6_address_count): <p>The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range.</p>  <p>You can't specify a count of IPv6 addresses using this parameter if you've specified one of the following: specific IPv6 addresses, specific IPv6 prefixes, or a count of IPv6 prefixes.</p>  <p>If your subnet has the <code>AssignIpv6AddressOnCreation</code> attribute set, you can override that setting by specifying 0 as the IPv6 address count.</p>
    ///   - [`ipv6_addresses(Vec<InstanceIpv6Address>)`](crate::client::fluent_builders::CreateNetworkInterface::ipv6_addresses) / [`set_ipv6_addresses(Option<Vec<InstanceIpv6Address>>)`](crate::client::fluent_builders::CreateNetworkInterface::set_ipv6_addresses): <p>The IPv6 addresses from the IPv6 CIDR block range of your subnet.</p>  <p>You can't specify IPv6 addresses using this parameter if you've specified one of the following: a count of IPv6 addresses, specific IPv6 prefixes, or a count of IPv6 prefixes.</p>
    ///   - [`private_ip_address(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInterface::private_ip_address) / [`set_private_ip_address(Option<String>)`](crate::client::fluent_builders::CreateNetworkInterface::set_private_ip_address): <p>The primary private IPv4 address of the network interface. If you don't specify an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR range. If you specify an IP address, you cannot indicate any IP addresses specified in <code>privateIpAddresses</code> as primary (only one IP address can be designated as primary).</p>
    ///   - [`private_ip_addresses(Vec<PrivateIpAddressSpecification>)`](crate::client::fluent_builders::CreateNetworkInterface::private_ip_addresses) / [`set_private_ip_addresses(Option<Vec<PrivateIpAddressSpecification>>)`](crate::client::fluent_builders::CreateNetworkInterface::set_private_ip_addresses): <p>The private IPv4 addresses.</p>  <p>You can't specify private IPv4 addresses if you've specified one of the following: a count of private IPv4 addresses, specific IPv4 prefixes, or a count of IPv4 prefixes.</p>
    ///   - [`secondary_private_ip_address_count(i32)`](crate::client::fluent_builders::CreateNetworkInterface::secondary_private_ip_address_count) / [`set_secondary_private_ip_address_count(Option<i32>)`](crate::client::fluent_builders::CreateNetworkInterface::set_secondary_private_ip_address_count): <p>The number of secondary private IPv4 addresses to assign to a network interface. When you specify a number of secondary IPv4 addresses, Amazon EC2 selects these IP addresses within the subnet's IPv4 CIDR range. You can't specify this option and specify more than one private IP address using <code>privateIpAddresses</code>.</p>  <p>You can't specify a count of private IPv4 addresses if you've specified one of the following: specific private IPv4 addresses, specific IPv4 prefixes, or a count of IPv4 prefixes.</p>
    ///   - [`ipv4_prefixes(Vec<Ipv4PrefixSpecificationRequest>)`](crate::client::fluent_builders::CreateNetworkInterface::ipv4_prefixes) / [`set_ipv4_prefixes(Option<Vec<Ipv4PrefixSpecificationRequest>>)`](crate::client::fluent_builders::CreateNetworkInterface::set_ipv4_prefixes): <p>The IPv4 prefixes assigned to the network interface.</p>  <p>You can't specify IPv4 prefixes if you've specified one of the following: a count of IPv4 prefixes, specific private IPv4 addresses, or a count of private IPv4 addresses.</p>
    ///   - [`ipv4_prefix_count(i32)`](crate::client::fluent_builders::CreateNetworkInterface::ipv4_prefix_count) / [`set_ipv4_prefix_count(Option<i32>)`](crate::client::fluent_builders::CreateNetworkInterface::set_ipv4_prefix_count): <p>The number of IPv4 prefixes that Amazon Web Services automatically assigns to the network interface.</p>  <p>You can't specify a count of IPv4 prefixes if you've specified one of the following: specific IPv4 prefixes, specific private IPv4 addresses, or a count of private IPv4 addresses.</p>
    ///   - [`ipv6_prefixes(Vec<Ipv6PrefixSpecificationRequest>)`](crate::client::fluent_builders::CreateNetworkInterface::ipv6_prefixes) / [`set_ipv6_prefixes(Option<Vec<Ipv6PrefixSpecificationRequest>>)`](crate::client::fluent_builders::CreateNetworkInterface::set_ipv6_prefixes): <p>The IPv6 prefixes assigned to the network interface.</p>  <p>You can't specify IPv6 prefixes if you've specified one of the following: a count of IPv6 prefixes, specific IPv6 addresses, or a count of IPv6 addresses.</p>
    ///   - [`ipv6_prefix_count(i32)`](crate::client::fluent_builders::CreateNetworkInterface::ipv6_prefix_count) / [`set_ipv6_prefix_count(Option<i32>)`](crate::client::fluent_builders::CreateNetworkInterface::set_ipv6_prefix_count): <p>The number of IPv6 prefixes that Amazon Web Services automatically assigns to the network interface.</p>  <p>You can't specify a count of IPv6 prefixes if you've specified one of the following: specific IPv6 prefixes, specific IPv6 addresses, or a count of IPv6 addresses.</p>
    ///   - [`interface_type(NetworkInterfaceCreationType)`](crate::client::fluent_builders::CreateNetworkInterface::interface_type) / [`set_interface_type(Option<NetworkInterfaceCreationType>)`](crate::client::fluent_builders::CreateNetworkInterface::set_interface_type): <p>The type of network interface. The default is <code>interface</code>.</p>  <p>The only supported values are <code>efa</code> and <code>trunk</code>.</p>
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInterface::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::CreateNetworkInterface::set_subnet_id): <p>The ID of the subnet to associate with the network interface.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateNetworkInterface::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateNetworkInterface::set_tag_specifications): <p>The tags to apply to the new network interface.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInterface::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateNetworkInterface::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    /// - On success, responds with [`CreateNetworkInterfaceOutput`](crate::output::CreateNetworkInterfaceOutput) with field(s):
    ///   - [`network_interface(Option<NetworkInterface>)`](crate::output::CreateNetworkInterfaceOutput::network_interface): <p>Information about the network interface.</p>
    ///   - [`client_token(Option<String>)`](crate::output::CreateNetworkInterfaceOutput::client_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<CreateNetworkInterfaceError>`](crate::error::CreateNetworkInterfaceError)
    pub fn create_network_interface(&self) -> fluent_builders::CreateNetworkInterface {
        fluent_builders::CreateNetworkInterface::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateNetworkInterfacePermission`](crate::client::fluent_builders::CreateNetworkInterfacePermission) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::set_network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`aws_account_id(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::aws_account_id) / [`set_aws_account_id(Option<String>)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::set_aws_account_id): <p>The Amazon Web Services account ID.</p>
    ///   - [`aws_service(impl Into<String>)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::aws_service) / [`set_aws_service(Option<String>)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::set_aws_service): <p>The Amazon Web Service. Currently not supported.</p>
    ///   - [`permission(InterfacePermissionType)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::permission) / [`set_permission(Option<InterfacePermissionType>)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::set_permission): <p>The type of permission to grant.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateNetworkInterfacePermission::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateNetworkInterfacePermissionOutput`](crate::output::CreateNetworkInterfacePermissionOutput) with field(s):
    ///   - [`interface_permission(Option<NetworkInterfacePermission>)`](crate::output::CreateNetworkInterfacePermissionOutput::interface_permission): <p>Information about the permission for the network interface.</p>
    /// - On failure, responds with [`SdkError<CreateNetworkInterfacePermissionError>`](crate::error::CreateNetworkInterfacePermissionError)
    pub fn create_network_interface_permission(
        &self,
    ) -> fluent_builders::CreateNetworkInterfacePermission {
        fluent_builders::CreateNetworkInterfacePermission::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreatePlacementGroup`](crate::client::fluent_builders::CreatePlacementGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreatePlacementGroup::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreatePlacementGroup::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::CreatePlacementGroup::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::CreatePlacementGroup::set_group_name): <p>A name for the placement group. Must be unique within the scope of your account for the Region.</p>  <p>Constraints: Up to 255 ASCII characters</p>
    ///   - [`strategy(PlacementStrategy)`](crate::client::fluent_builders::CreatePlacementGroup::strategy) / [`set_strategy(Option<PlacementStrategy>)`](crate::client::fluent_builders::CreatePlacementGroup::set_strategy): <p>The placement strategy.</p>
    ///   - [`partition_count(i32)`](crate::client::fluent_builders::CreatePlacementGroup::partition_count) / [`set_partition_count(Option<i32>)`](crate::client::fluent_builders::CreatePlacementGroup::set_partition_count): <p>The number of partitions. Valid only when <b>Strategy</b> is set to <code>partition</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreatePlacementGroup::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreatePlacementGroup::set_tag_specifications): <p>The tags to apply to the new placement group.</p>
    ///   - [`spread_level(SpreadLevel)`](crate::client::fluent_builders::CreatePlacementGroup::spread_level) / [`set_spread_level(Option<SpreadLevel>)`](crate::client::fluent_builders::CreatePlacementGroup::set_spread_level): <p>Determines how placement groups spread instances. </p>  <ul>   <li> <p>Host – You can use <code>host</code> only with Outpost placement groups.</p> </li>   <li> <p>Rack – No usage restrictions.</p> </li>  </ul>
    /// - On success, responds with [`CreatePlacementGroupOutput`](crate::output::CreatePlacementGroupOutput) with field(s):
    ///   - [`placement_group(Option<PlacementGroup>)`](crate::output::CreatePlacementGroupOutput::placement_group): <p>Information about the placement group.</p>
    /// - On failure, responds with [`SdkError<CreatePlacementGroupError>`](crate::error::CreatePlacementGroupError)
    pub fn create_placement_group(&self) -> fluent_builders::CreatePlacementGroup {
        fluent_builders::CreatePlacementGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreatePublicIpv4Pool`](crate::client::fluent_builders::CreatePublicIpv4Pool) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreatePublicIpv4Pool::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreatePublicIpv4Pool::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreatePublicIpv4Pool::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreatePublicIpv4Pool::set_tag_specifications): <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
    /// - On success, responds with [`CreatePublicIpv4PoolOutput`](crate::output::CreatePublicIpv4PoolOutput) with field(s):
    ///   - [`pool_id(Option<String>)`](crate::output::CreatePublicIpv4PoolOutput::pool_id): <p>The ID of the public IPv4 pool.</p>
    /// - On failure, responds with [`SdkError<CreatePublicIpv4PoolError>`](crate::error::CreatePublicIpv4PoolError)
    pub fn create_public_ipv4_pool(&self) -> fluent_builders::CreatePublicIpv4Pool {
        fluent_builders::CreatePublicIpv4Pool::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateReplaceRootVolumeTask`](crate::client::fluent_builders::CreateReplaceRootVolumeTask) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::set_instance_id): <p>The ID of the instance for which to replace the root volume.</p>
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::set_snapshot_id): <p>The ID of the snapshot from which to restore the replacement root volume. The specified snapshot must be a snapshot that you previously created from the original root volume.</p>  <p>If you want to restore the replacement root volume to the initial launch state, or if you want to restore the replacement root volume from an AMI, omit this parameter.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::set_client_token): <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::set_tag_specifications): <p>The tags to apply to the root volume replacement task.</p>
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::set_image_id): <p>The ID of the AMI to use to restore the root volume. The specified AMI must have the same product code, billing information, architecture type, and virtualization type as that of the instance.</p>  <p>If you want to restore the replacement volume from a specific snapshot, or if you want to restore it to its launch state, omit this parameter.</p>
    ///   - [`delete_replaced_root_volume(bool)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::delete_replaced_root_volume) / [`set_delete_replaced_root_volume(Option<bool>)`](crate::client::fluent_builders::CreateReplaceRootVolumeTask::set_delete_replaced_root_volume): <p>Indicates whether to automatically delete the original root volume after the root volume replacement task completes. To delete the original root volume, specify <code>true</code>. If you choose to keep the original root volume after the replacement task completes, you must manually delete it when you no longer need it.</p>
    /// - On success, responds with [`CreateReplaceRootVolumeTaskOutput`](crate::output::CreateReplaceRootVolumeTaskOutput) with field(s):
    ///   - [`replace_root_volume_task(Option<ReplaceRootVolumeTask>)`](crate::output::CreateReplaceRootVolumeTaskOutput::replace_root_volume_task): <p>Information about the root volume replacement task.</p>
    /// - On failure, responds with [`SdkError<CreateReplaceRootVolumeTaskError>`](crate::error::CreateReplaceRootVolumeTaskError)
    pub fn create_replace_root_volume_task(&self) -> fluent_builders::CreateReplaceRootVolumeTask {
        fluent_builders::CreateReplaceRootVolumeTask::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateReservedInstancesListing`](crate::client::fluent_builders::CreateReservedInstancesListing) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateReservedInstancesListing::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateReservedInstancesListing::set_client_token): <p>Unique, case-sensitive identifier you provide to ensure idempotency of your listings. This helps avoid duplicate listings. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`instance_count(i32)`](crate::client::fluent_builders::CreateReservedInstancesListing::instance_count) / [`set_instance_count(Option<i32>)`](crate::client::fluent_builders::CreateReservedInstancesListing::set_instance_count): <p>The number of instances that are a part of a Reserved Instance account to be listed in the Reserved Instance Marketplace. This number should be less than or equal to the instance count associated with the Reserved Instance ID specified in this call.</p>
    ///   - [`price_schedules(Vec<PriceScheduleSpecification>)`](crate::client::fluent_builders::CreateReservedInstancesListing::price_schedules) / [`set_price_schedules(Option<Vec<PriceScheduleSpecification>>)`](crate::client::fluent_builders::CreateReservedInstancesListing::set_price_schedules): <p>A list specifying the price of the Standard Reserved Instance for each month remaining in the Reserved Instance term.</p>
    ///   - [`reserved_instances_id(impl Into<String>)`](crate::client::fluent_builders::CreateReservedInstancesListing::reserved_instances_id) / [`set_reserved_instances_id(Option<String>)`](crate::client::fluent_builders::CreateReservedInstancesListing::set_reserved_instances_id): <p>The ID of the active Standard Reserved Instance.</p>
    /// - On success, responds with [`CreateReservedInstancesListingOutput`](crate::output::CreateReservedInstancesListingOutput) with field(s):
    ///   - [`reserved_instances_listings(Option<Vec<ReservedInstancesListing>>)`](crate::output::CreateReservedInstancesListingOutput::reserved_instances_listings): <p>Information about the Standard Reserved Instance listing.</p>
    /// - On failure, responds with [`SdkError<CreateReservedInstancesListingError>`](crate::error::CreateReservedInstancesListingError)
    pub fn create_reserved_instances_listing(
        &self,
    ) -> fluent_builders::CreateReservedInstancesListing {
        fluent_builders::CreateReservedInstancesListing::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateRestoreImageTask`](crate::client::fluent_builders::CreateRestoreImageTask) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`bucket(impl Into<String>)`](crate::client::fluent_builders::CreateRestoreImageTask::bucket) / [`set_bucket(Option<String>)`](crate::client::fluent_builders::CreateRestoreImageTask::set_bucket): <p>The name of the Amazon S3 bucket that contains the stored AMI object.</p>
    ///   - [`object_key(impl Into<String>)`](crate::client::fluent_builders::CreateRestoreImageTask::object_key) / [`set_object_key(Option<String>)`](crate::client::fluent_builders::CreateRestoreImageTask::set_object_key): <p>The name of the stored AMI object in the bucket.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::CreateRestoreImageTask::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::CreateRestoreImageTask::set_name): <p>The name for the restored AMI. The name must be unique for AMIs in the Region for this account. If you do not provide a name, the new AMI gets the same name as the original AMI.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateRestoreImageTask::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateRestoreImageTask::set_tag_specifications): <p>The tags to apply to the AMI and snapshots on restoration. You can tag the AMI, the snapshots, or both.</p>  <ul>   <li> <p>To tag the AMI, the value for <code>ResourceType</code> must be <code>image</code>.</p> </li>   <li> <p>To tag the snapshots, the value for <code>ResourceType</code> must be <code>snapshot</code>. The same tag is applied to all of the snapshots that are created.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateRestoreImageTask::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateRestoreImageTask::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateRestoreImageTaskOutput`](crate::output::CreateRestoreImageTaskOutput) with field(s):
    ///   - [`image_id(Option<String>)`](crate::output::CreateRestoreImageTaskOutput::image_id): <p>The AMI ID.</p>
    /// - On failure, responds with [`SdkError<CreateRestoreImageTaskError>`](crate::error::CreateRestoreImageTaskError)
    pub fn create_restore_image_task(&self) -> fluent_builders::CreateRestoreImageTask {
        fluent_builders::CreateRestoreImageTask::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateRoute`](crate::client::fluent_builders::CreateRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_destination_cidr_block): <p>The IPv4 CIDR address block used for the destination match. Routing decisions are based on the most specific match. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
    ///   - [`destination_ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::destination_ipv6_cidr_block) / [`set_destination_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_destination_ipv6_cidr_block): <p>The IPv6 CIDR block used for the destination match. Routing decisions are based on the most specific match.</p>
    ///   - [`destination_prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::destination_prefix_list_id) / [`set_destination_prefix_list_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_destination_prefix_list_id): <p>The ID of a prefix list used for the destination match.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::vpc_endpoint_id) / [`set_vpc_endpoint_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_vpc_endpoint_id): <p>The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints only.</p>
    ///   - [`egress_only_internet_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::egress_only_internet_gateway_id) / [`set_egress_only_internet_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_egress_only_internet_gateway_id): <p>[IPv6 traffic only] The ID of an egress-only internet gateway.</p>
    ///   - [`gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::gateway_id) / [`set_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_gateway_id): <p>The ID of an internet gateway or virtual private gateway attached to your VPC.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_instance_id): <p>The ID of a NAT instance in your VPC. The operation fails if you specify an instance ID unless exactly one network interface is attached.</p>
    ///   - [`nat_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::nat_gateway_id) / [`set_nat_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_nat_gateway_id): <p>[IPv4 traffic only] The ID of a NAT gateway.</p>
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_transit_gateway_id): <p>The ID of a transit gateway.</p>
    ///   - [`local_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::local_gateway_id) / [`set_local_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_local_gateway_id): <p>The ID of the local gateway.</p>
    ///   - [`carrier_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::carrier_gateway_id) / [`set_carrier_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_carrier_gateway_id): <p>The ID of the carrier gateway.</p>  <p>You can only use this option when the VPC contains a subnet which is associated with a Wavelength Zone.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_network_interface_id): <p>The ID of a network interface.</p>
    ///   - [`route_table_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::route_table_id) / [`set_route_table_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_route_table_id): <p>The ID of the route table for the route.</p>
    ///   - [`vpc_peering_connection_id(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::vpc_peering_connection_id) / [`set_vpc_peering_connection_id(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_vpc_peering_connection_id): <p>The ID of a VPC peering connection.</p>
    ///   - [`core_network_arn(impl Into<String>)`](crate::client::fluent_builders::CreateRoute::core_network_arn) / [`set_core_network_arn(Option<String>)`](crate::client::fluent_builders::CreateRoute::set_core_network_arn): <p>The Amazon Resource Name (ARN) of the core network.</p>
    /// - On success, responds with [`CreateRouteOutput`](crate::output::CreateRouteOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::CreateRouteOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<CreateRouteError>`](crate::error::CreateRouteError)
    pub fn create_route(&self) -> fluent_builders::CreateRoute {
        fluent_builders::CreateRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateRouteTable`](crate::client::fluent_builders::CreateRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateRouteTable::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateRouteTable::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateRouteTable::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateRouteTable::set_tag_specifications): <p>The tags to assign to the route table.</p>
    /// - On success, responds with [`CreateRouteTableOutput`](crate::output::CreateRouteTableOutput) with field(s):
    ///   - [`route_table(Option<RouteTable>)`](crate::output::CreateRouteTableOutput::route_table): <p>Information about the route table.</p>
    /// - On failure, responds with [`SdkError<CreateRouteTableError>`](crate::error::CreateRouteTableError)
    pub fn create_route_table(&self) -> fluent_builders::CreateRouteTable {
        fluent_builders::CreateRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateSecurityGroup`](crate::client::fluent_builders::CreateSecurityGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateSecurityGroup::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateSecurityGroup::set_description): <p>A description for the security group. This is informational only.</p>  <p>Constraints: Up to 255 characters in length</p>  <p>Constraints for EC2-Classic: ASCII characters</p>  <p>Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&amp;;{}!$*</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::CreateSecurityGroup::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::CreateSecurityGroup::set_group_name): <p>The name of the security group.</p>  <p>Constraints: Up to 255 characters in length. Cannot start with <code>sg-</code>.</p>  <p>Constraints for EC2-Classic: ASCII characters</p>  <p>Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&amp;;{}!$*</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateSecurityGroup::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateSecurityGroup::set_vpc_id): <p>[EC2-VPC] The ID of the VPC. Required for EC2-VPC.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateSecurityGroup::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateSecurityGroup::set_tag_specifications): <p>The tags to assign to the security group.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateSecurityGroup::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateSecurityGroup::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateSecurityGroupOutput`](crate::output::CreateSecurityGroupOutput) with field(s):
    ///   - [`group_id(Option<String>)`](crate::output::CreateSecurityGroupOutput::group_id): <p>The ID of the security group.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::CreateSecurityGroupOutput::tags): <p>The tags assigned to the security group.</p>
    /// - On failure, responds with [`SdkError<CreateSecurityGroupError>`](crate::error::CreateSecurityGroupError)
    pub fn create_security_group(&self) -> fluent_builders::CreateSecurityGroup {
        fluent_builders::CreateSecurityGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateSnapshot`](crate::client::fluent_builders::CreateSnapshot) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateSnapshot::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateSnapshot::set_description): <p>A description for the snapshot.</p>
    ///   - [`outpost_arn(impl Into<String>)`](crate::client::fluent_builders::CreateSnapshot::outpost_arn) / [`set_outpost_arn(Option<String>)`](crate::client::fluent_builders::CreateSnapshot::set_outpost_arn): <p>The Amazon Resource Name (ARN) of the Outpost on which to create a local snapshot.</p>  <ul>   <li> <p>To create a snapshot of a volume in a Region, omit this parameter. The snapshot is created in the same Region as the volume.</p> </li>   <li> <p>To create a snapshot of a volume on an Outpost and store the snapshot in the Region, omit this parameter. The snapshot is created in the Region for the Outpost.</p> </li>   <li> <p>To create a snapshot of a volume on an Outpost and store the snapshot on an Outpost, specify the ARN of the destination Outpost. The snapshot must be created on the same Outpost as the volume.</p> </li>  </ul>  <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-snapshot">Create local snapshots from volumes on an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`volume_id(impl Into<String>)`](crate::client::fluent_builders::CreateSnapshot::volume_id) / [`set_volume_id(Option<String>)`](crate::client::fluent_builders::CreateSnapshot::set_volume_id): <p>The ID of the Amazon EBS volume.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateSnapshot::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateSnapshot::set_tag_specifications): <p>The tags to apply to the snapshot during creation.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateSnapshot::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateSnapshot::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateSnapshotOutput`](crate::output::CreateSnapshotOutput) with field(s):
    ///   - [`data_encryption_key_id(Option<String>)`](crate::output::CreateSnapshotOutput::data_encryption_key_id): <p>The data encryption key identifier for the snapshot. This value is a unique identifier that corresponds to the data encryption key that was used to encrypt the original volume or snapshot copy. Because data encryption keys are inherited by volumes created from snapshots, and vice versa, if snapshots share the same data encryption key identifier, then they belong to the same volume/snapshot lineage. This parameter is only returned by <code>DescribeSnapshots</code>.</p>
    ///   - [`description(Option<String>)`](crate::output::CreateSnapshotOutput::description): <p>The description for the snapshot.</p>
    ///   - [`encrypted(Option<bool>)`](crate::output::CreateSnapshotOutput::encrypted): <p>Indicates whether the snapshot is encrypted.</p>
    ///   - [`kms_key_id(Option<String>)`](crate::output::CreateSnapshotOutput::kms_key_id): <p>The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that was used to protect the volume encryption key for the parent volume.</p>
    ///   - [`owner_id(Option<String>)`](crate::output::CreateSnapshotOutput::owner_id): <p>The ID of the Amazon Web Services account that owns the EBS snapshot.</p>
    ///   - [`progress(Option<String>)`](crate::output::CreateSnapshotOutput::progress): <p>The progress of the snapshot, as a percentage.</p>
    ///   - [`snapshot_id(Option<String>)`](crate::output::CreateSnapshotOutput::snapshot_id): <p>The ID of the snapshot. Each snapshot receives a unique identifier when it is created.</p>
    ///   - [`start_time(Option<DateTime>)`](crate::output::CreateSnapshotOutput::start_time): <p>The time stamp when the snapshot was initiated.</p>
    ///   - [`state(Option<SnapshotState>)`](crate::output::CreateSnapshotOutput::state): <p>The snapshot state.</p>
    ///   - [`state_message(Option<String>)`](crate::output::CreateSnapshotOutput::state_message): <p>Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation fails (for example, if the proper Key Management Service (KMS) permissions are not obtained) this field displays error state details to help you diagnose why the error occurred. This parameter is only returned by <code>DescribeSnapshots</code>.</p>
    ///   - [`volume_id(Option<String>)`](crate::output::CreateSnapshotOutput::volume_id): <p>The ID of the volume that was used to create the snapshot. Snapshots created by the <code>CopySnapshot</code> action have an arbitrary volume ID that should not be used for any purpose.</p>
    ///   - [`volume_size(Option<i32>)`](crate::output::CreateSnapshotOutput::volume_size): <p>The size of the volume, in GiB.</p>
    ///   - [`owner_alias(Option<String>)`](crate::output::CreateSnapshotOutput::owner_alias): <p>The Amazon Web Services owner alias, from an Amazon-maintained list (<code>amazon</code>). This is not the user-configured Amazon Web Services account alias set using the IAM console.</p>
    ///   - [`outpost_arn(Option<String>)`](crate::output::CreateSnapshotOutput::outpost_arn): <p>The ARN of the Outpost on which the snapshot is stored. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html">Amazon EBS local snapshots on Outposts</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::CreateSnapshotOutput::tags): <p>Any tags assigned to the snapshot.</p>
    ///   - [`storage_tier(Option<StorageTier>)`](crate::output::CreateSnapshotOutput::storage_tier): <p>The storage tier in which the snapshot is stored. <code>standard</code> indicates that the snapshot is stored in the standard snapshot storage tier and that it is ready for use. <code>archive</code> indicates that the snapshot is currently archived and that it must be restored before it can be used.</p>
    ///   - [`restore_expiry_time(Option<DateTime>)`](crate::output::CreateSnapshotOutput::restore_expiry_time): <p>Only for archived snapshots that are temporarily restored. Indicates the date and time when a temporarily restored snapshot will be automatically re-archived.</p>
    /// - On failure, responds with [`SdkError<CreateSnapshotError>`](crate::error::CreateSnapshotError)
    pub fn create_snapshot(&self) -> fluent_builders::CreateSnapshot {
        fluent_builders::CreateSnapshot::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateSnapshots`](crate::client::fluent_builders::CreateSnapshots) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateSnapshots::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateSnapshots::set_description): <p> A description propagated to every snapshot specified by the instance.</p>
    ///   - [`instance_specification(InstanceSpecification)`](crate::client::fluent_builders::CreateSnapshots::instance_specification) / [`set_instance_specification(Option<InstanceSpecification>)`](crate::client::fluent_builders::CreateSnapshots::set_instance_specification): <p>The instance to specify which volumes should be included in the snapshots.</p>
    ///   - [`outpost_arn(impl Into<String>)`](crate::client::fluent_builders::CreateSnapshots::outpost_arn) / [`set_outpost_arn(Option<String>)`](crate::client::fluent_builders::CreateSnapshots::set_outpost_arn): <p>The Amazon Resource Name (ARN) of the Outpost on which to create the local snapshots.</p>  <ul>   <li> <p>To create snapshots from an instance in a Region, omit this parameter. The snapshots are created in the same Region as the instance.</p> </li>   <li> <p>To create snapshots from an instance on an Outpost and store the snapshots in the Region, omit this parameter. The snapshots are created in the Region for the Outpost.</p> </li>   <li> <p>To create snapshots from an instance on an Outpost and store the snapshots on an Outpost, specify the ARN of the destination Outpost. The snapshots must be created on the same Outpost as the instance.</p> </li>  </ul>  <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-multivol-snapshot"> Create multi-volume local snapshots from instances on an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateSnapshots::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateSnapshots::set_tag_specifications): <p>Tags to apply to every snapshot specified by the instance.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateSnapshots::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateSnapshots::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`copy_tags_from_source(CopyTagsFromSource)`](crate::client::fluent_builders::CreateSnapshots::copy_tags_from_source) / [`set_copy_tags_from_source(Option<CopyTagsFromSource>)`](crate::client::fluent_builders::CreateSnapshots::set_copy_tags_from_source): <p>Copies the tags from the specified volume to corresponding snapshot.</p>
    /// - On success, responds with [`CreateSnapshotsOutput`](crate::output::CreateSnapshotsOutput) with field(s):
    ///   - [`snapshots(Option<Vec<SnapshotInfo>>)`](crate::output::CreateSnapshotsOutput::snapshots): <p>List of snapshots.</p>
    /// - On failure, responds with [`SdkError<CreateSnapshotsError>`](crate::error::CreateSnapshotsError)
    pub fn create_snapshots(&self) -> fluent_builders::CreateSnapshots {
        fluent_builders::CreateSnapshots::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateSpotDatafeedSubscription`](crate::client::fluent_builders::CreateSpotDatafeedSubscription) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`bucket(impl Into<String>)`](crate::client::fluent_builders::CreateSpotDatafeedSubscription::bucket) / [`set_bucket(Option<String>)`](crate::client::fluent_builders::CreateSpotDatafeedSubscription::set_bucket): <p>The name of the Amazon S3 bucket in which to store the Spot Instance data feed. For more information about bucket names, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules">Rules for bucket naming</a> in the <i>Amazon S3 Developer Guide</i>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateSpotDatafeedSubscription::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateSpotDatafeedSubscription::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`prefix(impl Into<String>)`](crate::client::fluent_builders::CreateSpotDatafeedSubscription::prefix) / [`set_prefix(Option<String>)`](crate::client::fluent_builders::CreateSpotDatafeedSubscription::set_prefix): <p>The prefix for the data feed file names.</p>
    /// - On success, responds with [`CreateSpotDatafeedSubscriptionOutput`](crate::output::CreateSpotDatafeedSubscriptionOutput) with field(s):
    ///   - [`spot_datafeed_subscription(Option<SpotDatafeedSubscription>)`](crate::output::CreateSpotDatafeedSubscriptionOutput::spot_datafeed_subscription): <p>The Spot Instance data feed subscription.</p>
    /// - On failure, responds with [`SdkError<CreateSpotDatafeedSubscriptionError>`](crate::error::CreateSpotDatafeedSubscriptionError)
    pub fn create_spot_datafeed_subscription(
        &self,
    ) -> fluent_builders::CreateSpotDatafeedSubscription {
        fluent_builders::CreateSpotDatafeedSubscription::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateStoreImageTask`](crate::client::fluent_builders::CreateStoreImageTask) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::CreateStoreImageTask::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::CreateStoreImageTask::set_image_id): <p>The ID of the AMI.</p>
    ///   - [`bucket(impl Into<String>)`](crate::client::fluent_builders::CreateStoreImageTask::bucket) / [`set_bucket(Option<String>)`](crate::client::fluent_builders::CreateStoreImageTask::set_bucket): <p>The name of the Amazon S3 bucket in which the AMI object will be stored. The bucket must be in the Region in which the request is being made. The AMI object appears in the bucket only after the upload task has completed. </p>
    ///   - [`s3_object_tags(Vec<S3ObjectTag>)`](crate::client::fluent_builders::CreateStoreImageTask::s3_object_tags) / [`set_s3_object_tags(Option<Vec<S3ObjectTag>>)`](crate::client::fluent_builders::CreateStoreImageTask::set_s3_object_tags): <p>The tags to apply to the AMI object that will be stored in the Amazon S3 bucket. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateStoreImageTask::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateStoreImageTask::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateStoreImageTaskOutput`](crate::output::CreateStoreImageTaskOutput) with field(s):
    ///   - [`object_key(Option<String>)`](crate::output::CreateStoreImageTaskOutput::object_key): <p>The name of the stored AMI object in the S3 bucket.</p>
    /// - On failure, responds with [`SdkError<CreateStoreImageTaskError>`](crate::error::CreateStoreImageTaskError)
    pub fn create_store_image_task(&self) -> fluent_builders::CreateStoreImageTask {
        fluent_builders::CreateStoreImageTask::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateSubnet`](crate::client::fluent_builders::CreateSubnet) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateSubnet::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateSubnet::set_tag_specifications): <p>The tags to assign to the subnet.</p>
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::CreateSubnet::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::CreateSubnet::set_availability_zone): <p>The Availability Zone or Local Zone for the subnet.</p>  <p>Default: Amazon Web Services selects one for you. If you create more than one subnet in your VPC, we do not necessarily select a different zone for each subnet.</p>  <p>To create a subnet in a Local Zone, set this value to the Local Zone ID, for example <code>us-west-2-lax-1a</code>. For information about the Regions that support Local Zones, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions">Available Regions</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>  <p>To create a subnet in an Outpost, set this value to the Availability Zone for the Outpost and specify the Outpost ARN.</p>
    ///   - [`availability_zone_id(impl Into<String>)`](crate::client::fluent_builders::CreateSubnet::availability_zone_id) / [`set_availability_zone_id(Option<String>)`](crate::client::fluent_builders::CreateSubnet::set_availability_zone_id): <p>The AZ ID or the Local Zone ID of the subnet.</p>
    ///   - [`cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateSubnet::cidr_block) / [`set_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateSubnet::set_cidr_block): <p>The IPv4 network range for the subnet, in CIDR notation. For example, <code>10.0.0.0/24</code>. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>  <p>This parameter is not supported for an IPv6 only subnet.</p>
    ///   - [`ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateSubnet::ipv6_cidr_block) / [`set_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateSubnet::set_ipv6_cidr_block): <p>The IPv6 network range for the subnet, in CIDR notation. The subnet size must use a /64 prefix length.</p>  <p>This parameter is required for an IPv6 only subnet.</p>
    ///   - [`outpost_arn(impl Into<String>)`](crate::client::fluent_builders::CreateSubnet::outpost_arn) / [`set_outpost_arn(Option<String>)`](crate::client::fluent_builders::CreateSubnet::set_outpost_arn): <p>The Amazon Resource Name (ARN) of the Outpost. If you specify an Outpost ARN, you must also specify the Availability Zone of the Outpost subnet.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateSubnet::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateSubnet::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateSubnet::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateSubnet::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipv6_native(bool)`](crate::client::fluent_builders::CreateSubnet::ipv6_native) / [`set_ipv6_native(Option<bool>)`](crate::client::fluent_builders::CreateSubnet::set_ipv6_native): <p>Indicates whether to create an IPv6 only subnet.</p>
    /// - On success, responds with [`CreateSubnetOutput`](crate::output::CreateSubnetOutput) with field(s):
    ///   - [`subnet(Option<Subnet>)`](crate::output::CreateSubnetOutput::subnet): <p>Information about the subnet.</p>
    /// - On failure, responds with [`SdkError<CreateSubnetError>`](crate::error::CreateSubnetError)
    pub fn create_subnet(&self) -> fluent_builders::CreateSubnet {
        fluent_builders::CreateSubnet::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateSubnetCidrReservation`](crate::client::fluent_builders::CreateSubnetCidrReservation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::set_subnet_id): <p>The ID of the subnet.</p>
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::set_cidr): <p>The IPv4 or IPV6 CIDR range to reserve.</p>
    ///   - [`reservation_type(SubnetCidrReservationType)`](crate::client::fluent_builders::CreateSubnetCidrReservation::reservation_type) / [`set_reservation_type(Option<SubnetCidrReservationType>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::set_reservation_type): <p>The type of reservation.</p>  <p>The following are valid values:</p>  <ul>   <li> <p> <code>prefix</code>: The Amazon EC2 Prefix Delegation feature assigns the IP addresses to network interfaces that are associated with an instance. For information about Prefix Delegation, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-delegation.html">Prefix Delegation for Amazon EC2 network interfaces</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </li>   <li> <p> <code>explicit</code>: You manually assign the IP addresses to resources that reside in your subnet. </p> </li>  </ul>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::set_description): <p>The description to assign to the subnet CIDR reservation.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateSubnetCidrReservation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateSubnetCidrReservation::set_tag_specifications): <p>The tags to assign to the subnet CIDR reservation.</p>
    /// - On success, responds with [`CreateSubnetCidrReservationOutput`](crate::output::CreateSubnetCidrReservationOutput) with field(s):
    ///   - [`subnet_cidr_reservation(Option<SubnetCidrReservation>)`](crate::output::CreateSubnetCidrReservationOutput::subnet_cidr_reservation): <p>Information about the created subnet CIDR reservation.</p>
    /// - On failure, responds with [`SdkError<CreateSubnetCidrReservationError>`](crate::error::CreateSubnetCidrReservationError)
    pub fn create_subnet_cidr_reservation(&self) -> fluent_builders::CreateSubnetCidrReservation {
        fluent_builders::CreateSubnetCidrReservation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTags`](crate::client::fluent_builders::CreateTags) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTags::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTags::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`resources(Vec<String>)`](crate::client::fluent_builders::CreateTags::resources) / [`set_resources(Option<Vec<String>>)`](crate::client::fluent_builders::CreateTags::set_resources): <p>The IDs of the resources, separated by spaces.</p>  <p>Constraints: Up to 1000 resource IDs. We recommend breaking up this request into smaller batches.</p>
    ///   - [`tags(Vec<Tag>)`](crate::client::fluent_builders::CreateTags::tags) / [`set_tags(Option<Vec<Tag>>)`](crate::client::fluent_builders::CreateTags::set_tags): <p>The tags. The <code>value</code> parameter is required, but if you don't want the tag to have a value, specify the parameter with no value, and we set the value to an empty string.</p>
    /// - On success, responds with [`CreateTagsOutput`](crate::output::CreateTagsOutput)

    /// - On failure, responds with [`SdkError<CreateTagsError>`](crate::error::CreateTagsError)
    pub fn create_tags(&self) -> fluent_builders::CreateTags {
        fluent_builders::CreateTags::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTrafficMirrorFilter`](crate::client::fluent_builders::CreateTrafficMirrorFilter) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilter::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilter::set_description): <p>The description of the Traffic Mirror filter.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTrafficMirrorFilter::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTrafficMirrorFilter::set_tag_specifications): <p>The tags to assign to a Traffic Mirror filter.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTrafficMirrorFilter::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTrafficMirrorFilter::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilter::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilter::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On success, responds with [`CreateTrafficMirrorFilterOutput`](crate::output::CreateTrafficMirrorFilterOutput) with field(s):
    ///   - [`traffic_mirror_filter(Option<TrafficMirrorFilter>)`](crate::output::CreateTrafficMirrorFilterOutput::traffic_mirror_filter): <p>Information about the Traffic Mirror filter.</p>
    ///   - [`client_token(Option<String>)`](crate::output::CreateTrafficMirrorFilterOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On failure, responds with [`SdkError<CreateTrafficMirrorFilterError>`](crate::error::CreateTrafficMirrorFilterError)
    pub fn create_traffic_mirror_filter(&self) -> fluent_builders::CreateTrafficMirrorFilter {
        fluent_builders::CreateTrafficMirrorFilter::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTrafficMirrorFilterRule`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_filter_id(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::traffic_mirror_filter_id) / [`set_traffic_mirror_filter_id(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_traffic_mirror_filter_id): <p>The ID of the filter that this rule is associated with.</p>
    ///   - [`traffic_direction(TrafficDirection)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::traffic_direction) / [`set_traffic_direction(Option<TrafficDirection>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_traffic_direction): <p>The type of traffic.</p>
    ///   - [`rule_number(i32)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::rule_number) / [`set_rule_number(Option<i32>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_rule_number): <p>The number of the Traffic Mirror rule. This number must be unique for each Traffic Mirror rule in a given direction. The rules are processed in ascending order by rule number.</p>
    ///   - [`rule_action(TrafficMirrorRuleAction)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::rule_action) / [`set_rule_action(Option<TrafficMirrorRuleAction>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_rule_action): <p>The action to take on the filtered traffic.</p>
    ///   - [`destination_port_range(TrafficMirrorPortRangeRequest)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::destination_port_range) / [`set_destination_port_range(Option<TrafficMirrorPortRangeRequest>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_destination_port_range): <p>The destination port range.</p>
    ///   - [`source_port_range(TrafficMirrorPortRangeRequest)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::source_port_range) / [`set_source_port_range(Option<TrafficMirrorPortRangeRequest>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_source_port_range): <p>The source port range.</p>
    ///   - [`protocol(i32)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::protocol) / [`set_protocol(Option<i32>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_protocol): <p>The protocol, for example UDP, to assign to the Traffic Mirror rule.</p>  <p>For information about the protocol value, see <a href="https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a> on the Internet Assigned Numbers Authority (IANA) website.</p>
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_destination_cidr_block): <p>The destination CIDR block to assign to the Traffic Mirror rule.</p>
    ///   - [`source_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::source_cidr_block) / [`set_source_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_source_cidr_block): <p>The source CIDR block to assign to the Traffic Mirror rule.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_description): <p>The description of the Traffic Mirror rule.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorFilterRule::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On success, responds with [`CreateTrafficMirrorFilterRuleOutput`](crate::output::CreateTrafficMirrorFilterRuleOutput) with field(s):
    ///   - [`traffic_mirror_filter_rule(Option<TrafficMirrorFilterRule>)`](crate::output::CreateTrafficMirrorFilterRuleOutput::traffic_mirror_filter_rule): <p>The Traffic Mirror rule.</p>
    ///   - [`client_token(Option<String>)`](crate::output::CreateTrafficMirrorFilterRuleOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On failure, responds with [`SdkError<CreateTrafficMirrorFilterRuleError>`](crate::error::CreateTrafficMirrorFilterRuleError)
    pub fn create_traffic_mirror_filter_rule(
        &self,
    ) -> fluent_builders::CreateTrafficMirrorFilterRule {
        fluent_builders::CreateTrafficMirrorFilterRule::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTrafficMirrorSession`](crate::client::fluent_builders::CreateTrafficMirrorSession) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_network_interface_id): <p>The ID of the source network interface.</p>
    ///   - [`traffic_mirror_target_id(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::traffic_mirror_target_id) / [`set_traffic_mirror_target_id(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_traffic_mirror_target_id): <p>The ID of the Traffic Mirror target.</p>
    ///   - [`traffic_mirror_filter_id(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::traffic_mirror_filter_id) / [`set_traffic_mirror_filter_id(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_traffic_mirror_filter_id): <p>The ID of the Traffic Mirror filter.</p>
    ///   - [`packet_length(i32)`](crate::client::fluent_builders::CreateTrafficMirrorSession::packet_length) / [`set_packet_length(Option<i32>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_packet_length): <p>The number of bytes in each packet to mirror. These are bytes after the VXLAN header. Do not specify this parameter when you want to mirror the entire packet. To mirror a subset of the packet, set this to the length (in bytes) that you want to mirror. For example, if you set this value to 100, then the first 100 bytes that meet the filter criteria are copied to the target.</p>  <p>If you do not want to mirror the entire packet, use the <code>PacketLength</code> parameter to specify the number of bytes in each packet to mirror.</p>
    ///   - [`session_number(i32)`](crate::client::fluent_builders::CreateTrafficMirrorSession::session_number) / [`set_session_number(Option<i32>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_session_number): <p>The session number determines the order in which sessions are evaluated when an interface is used by multiple sessions. The first session with a matching filter is the one that mirrors the packets.</p>  <p>Valid values are 1-32766.</p>
    ///   - [`virtual_network_id(i32)`](crate::client::fluent_builders::CreateTrafficMirrorSession::virtual_network_id) / [`set_virtual_network_id(Option<i32>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_virtual_network_id): <p>The VXLAN ID for the Traffic Mirror session. For more information about the VXLAN protocol, see <a href="https://tools.ietf.org/html/rfc7348">RFC 7348</a>. If you do not specify a <code>VirtualNetworkId</code>, an account-wide unique id is chosen at random.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_description): <p>The description of the Traffic Mirror session.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_tag_specifications): <p>The tags to assign to a Traffic Mirror session.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTrafficMirrorSession::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorSession::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On success, responds with [`CreateTrafficMirrorSessionOutput`](crate::output::CreateTrafficMirrorSessionOutput) with field(s):
    ///   - [`traffic_mirror_session(Option<TrafficMirrorSession>)`](crate::output::CreateTrafficMirrorSessionOutput::traffic_mirror_session): <p>Information about the Traffic Mirror session.</p>
    ///   - [`client_token(Option<String>)`](crate::output::CreateTrafficMirrorSessionOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On failure, responds with [`SdkError<CreateTrafficMirrorSessionError>`](crate::error::CreateTrafficMirrorSessionError)
    pub fn create_traffic_mirror_session(&self) -> fluent_builders::CreateTrafficMirrorSession {
        fluent_builders::CreateTrafficMirrorSession::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTrafficMirrorTarget`](crate::client::fluent_builders::CreateTrafficMirrorTarget) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::set_network_interface_id): <p>The network interface ID that is associated with the target.</p>
    ///   - [`network_load_balancer_arn(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::network_load_balancer_arn) / [`set_network_load_balancer_arn(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::set_network_load_balancer_arn): <p>The Amazon Resource Name (ARN) of the Network Load Balancer that is associated with the target.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::set_description): <p>The description of the Traffic Mirror target.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::set_tag_specifications): <p>The tags to assign to the Traffic Mirror target.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`gateway_load_balancer_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::gateway_load_balancer_endpoint_id) / [`set_gateway_load_balancer_endpoint_id(Option<String>)`](crate::client::fluent_builders::CreateTrafficMirrorTarget::set_gateway_load_balancer_endpoint_id): <p>The ID of the Gateway Load Balancer endpoint.</p>
    /// - On success, responds with [`CreateTrafficMirrorTargetOutput`](crate::output::CreateTrafficMirrorTargetOutput) with field(s):
    ///   - [`traffic_mirror_target(Option<TrafficMirrorTarget>)`](crate::output::CreateTrafficMirrorTargetOutput::traffic_mirror_target): <p>Information about the Traffic Mirror target.</p>
    ///   - [`client_token(Option<String>)`](crate::output::CreateTrafficMirrorTargetOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On failure, responds with [`SdkError<CreateTrafficMirrorTargetError>`](crate::error::CreateTrafficMirrorTargetError)
    pub fn create_traffic_mirror_target(&self) -> fluent_builders::CreateTrafficMirrorTarget {
        fluent_builders::CreateTrafficMirrorTarget::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGateway`](crate::client::fluent_builders::CreateTransitGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGateway::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateTransitGateway::set_description): <p>A description of the transit gateway.</p>
    ///   - [`options(TransitGatewayRequestOptions)`](crate::client::fluent_builders::CreateTransitGateway::options) / [`set_options(Option<TransitGatewayRequestOptions>)`](crate::client::fluent_builders::CreateTransitGateway::set_options): <p>The transit gateway options.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGateway::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGateway::set_tag_specifications): <p>The tags to apply to the transit gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayOutput`](crate::output::CreateTransitGatewayOutput) with field(s):
    ///   - [`transit_gateway(Option<TransitGateway>)`](crate::output::CreateTransitGatewayOutput::transit_gateway): <p>Information about the transit gateway.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayError>`](crate::error::CreateTransitGatewayError)
    pub fn create_transit_gateway(&self) -> fluent_builders::CreateTransitGateway {
        fluent_builders::CreateTransitGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayConnect`](crate::client::fluent_builders::CreateTransitGatewayConnect) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transport_transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnect::transport_transit_gateway_attachment_id) / [`set_transport_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnect::set_transport_transit_gateway_attachment_id): <p>The ID of the transit gateway attachment. You can specify a VPC attachment or Amazon Web Services Direct Connect attachment.</p>
    ///   - [`options(CreateTransitGatewayConnectRequestOptions)`](crate::client::fluent_builders::CreateTransitGatewayConnect::options) / [`set_options(Option<CreateTransitGatewayConnectRequestOptions>)`](crate::client::fluent_builders::CreateTransitGatewayConnect::set_options): <p>The Connect attachment options.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGatewayConnect::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGatewayConnect::set_tag_specifications): <p>The tags to apply to the Connect attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayConnect::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayConnect::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayConnectOutput`](crate::output::CreateTransitGatewayConnectOutput) with field(s):
    ///   - [`transit_gateway_connect(Option<TransitGatewayConnect>)`](crate::output::CreateTransitGatewayConnectOutput::transit_gateway_connect): <p>Information about the Connect attachment.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayConnectError>`](crate::error::CreateTransitGatewayConnectError)
    pub fn create_transit_gateway_connect(&self) -> fluent_builders::CreateTransitGatewayConnect {
        fluent_builders::CreateTransitGatewayConnect::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayConnectPeer`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::set_transit_gateway_attachment_id): <p>The ID of the Connect attachment.</p>
    ///   - [`transit_gateway_address(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::transit_gateway_address) / [`set_transit_gateway_address(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::set_transit_gateway_address): <p>The peer IP address (GRE outer IP address) on the transit gateway side of the Connect peer, which must be specified from a transit gateway CIDR block. If not specified, Amazon automatically assigns the first available IP address from the transit gateway CIDR block.</p>
    ///   - [`peer_address(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::peer_address) / [`set_peer_address(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::set_peer_address): <p>The peer IP address (GRE outer IP address) on the appliance side of the Connect peer.</p>
    ///   - [`bgp_options(TransitGatewayConnectRequestBgpOptions)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::bgp_options) / [`set_bgp_options(Option<TransitGatewayConnectRequestBgpOptions>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::set_bgp_options): <p>The BGP options for the Connect peer.</p>
    ///   - [`inside_cidr_blocks(Vec<String>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::inside_cidr_blocks) / [`set_inside_cidr_blocks(Option<Vec<String>>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::set_inside_cidr_blocks): <p>The range of inside IP addresses that are used for BGP peering. You must specify a size /29 IPv4 CIDR block from the <code>169.254.0.0/16</code> range. The first address from the range must be configured on the appliance as the BGP IP address. You can also optionally specify a size /125 IPv6 CIDR block from the <code>fd00::/8</code> range.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::set_tag_specifications): <p>The tags to apply to the Connect peer.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayConnectPeer::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayConnectPeerOutput`](crate::output::CreateTransitGatewayConnectPeerOutput) with field(s):
    ///   - [`transit_gateway_connect_peer(Option<TransitGatewayConnectPeer>)`](crate::output::CreateTransitGatewayConnectPeerOutput::transit_gateway_connect_peer): <p>Information about the Connect peer.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayConnectPeerError>`](crate::error::CreateTransitGatewayConnectPeerError)
    pub fn create_transit_gateway_connect_peer(
        &self,
    ) -> fluent_builders::CreateTransitGatewayConnectPeer {
        fluent_builders::CreateTransitGatewayConnectPeer::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayMulticastDomain`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain::set_transit_gateway_id): <p>The ID of the transit gateway.</p>
    ///   - [`options(CreateTransitGatewayMulticastDomainRequestOptions)`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain::options) / [`set_options(Option<CreateTransitGatewayMulticastDomainRequestOptions>)`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain::set_options): <p>The options for the transit gateway multicast domain.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain::set_tag_specifications): <p>The tags for the transit gateway multicast domain.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayMulticastDomain::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayMulticastDomainOutput`](crate::output::CreateTransitGatewayMulticastDomainOutput) with field(s):
    ///   - [`transit_gateway_multicast_domain(Option<TransitGatewayMulticastDomain>)`](crate::output::CreateTransitGatewayMulticastDomainOutput::transit_gateway_multicast_domain): <p>Information about the transit gateway multicast domain.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayMulticastDomainError>`](crate::error::CreateTransitGatewayMulticastDomainError)
    pub fn create_transit_gateway_multicast_domain(
        &self,
    ) -> fluent_builders::CreateTransitGatewayMulticastDomain {
        fluent_builders::CreateTransitGatewayMulticastDomain::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayPeeringAttachment`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::set_transit_gateway_id): <p>The ID of the transit gateway.</p>
    ///   - [`peer_transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::peer_transit_gateway_id) / [`set_peer_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::set_peer_transit_gateway_id): <p>The ID of the peer transit gateway with which to create the peering attachment.</p>
    ///   - [`peer_account_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::peer_account_id) / [`set_peer_account_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::set_peer_account_id): <p>The ID of the Amazon Web Services account that owns the peer transit gateway.</p>
    ///   - [`peer_region(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::peer_region) / [`set_peer_region(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::set_peer_region): <p>The Region where the peer transit gateway is located.</p>
    ///   - [`options(CreateTransitGatewayPeeringAttachmentRequestOptions)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::options) / [`set_options(Option<CreateTransitGatewayPeeringAttachmentRequestOptions>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::set_options): <p>Requests a transit gateway peering attachment.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::set_tag_specifications): <p>The tags to apply to the transit gateway peering attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayPeeringAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayPeeringAttachmentOutput`](crate::output::CreateTransitGatewayPeeringAttachmentOutput) with field(s):
    ///   - [`transit_gateway_peering_attachment(Option<TransitGatewayPeeringAttachment>)`](crate::output::CreateTransitGatewayPeeringAttachmentOutput::transit_gateway_peering_attachment): <p>The transit gateway peering attachment.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayPeeringAttachmentError>`](crate::error::CreateTransitGatewayPeeringAttachmentError)
    pub fn create_transit_gateway_peering_attachment(
        &self,
    ) -> fluent_builders::CreateTransitGatewayPeeringAttachment {
        fluent_builders::CreateTransitGatewayPeeringAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayPolicyTable`](crate::client::fluent_builders::CreateTransitGatewayPolicyTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayPolicyTable::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayPolicyTable::set_transit_gateway_id): <p>The ID of the transit gateway used for the policy table.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGatewayPolicyTable::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGatewayPolicyTable::set_tag_specifications): <p>The tags specification for the transit gateway policy table created during the request.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayPolicyTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayPolicyTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayPolicyTableOutput`](crate::output::CreateTransitGatewayPolicyTableOutput) with field(s):
    ///   - [`transit_gateway_policy_table(Option<TransitGatewayPolicyTable>)`](crate::output::CreateTransitGatewayPolicyTableOutput::transit_gateway_policy_table): <p>Describes the created transit gateway policy table.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayPolicyTableError>`](crate::error::CreateTransitGatewayPolicyTableError)
    pub fn create_transit_gateway_policy_table(
        &self,
    ) -> fluent_builders::CreateTransitGatewayPolicyTable {
        fluent_builders::CreateTransitGatewayPolicyTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayPrefixListReference`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::prefix_list_id) / [`set_prefix_list_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::set_prefix_list_id): <p>The ID of the prefix list that is used for destination matches.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::set_transit_gateway_attachment_id): <p>The ID of the attachment to which traffic is routed.</p>
    ///   - [`blackhole(bool)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::blackhole) / [`set_blackhole(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::set_blackhole): <p>Indicates whether to drop traffic that matches this route.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayPrefixListReference::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayPrefixListReferenceOutput`](crate::output::CreateTransitGatewayPrefixListReferenceOutput) with field(s):
    ///   - [`transit_gateway_prefix_list_reference(Option<TransitGatewayPrefixListReference>)`](crate::output::CreateTransitGatewayPrefixListReferenceOutput::transit_gateway_prefix_list_reference): <p>Information about the prefix list reference.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayPrefixListReferenceError>`](crate::error::CreateTransitGatewayPrefixListReferenceError)
    pub fn create_transit_gateway_prefix_list_reference(
        &self,
    ) -> fluent_builders::CreateTransitGatewayPrefixListReference {
        fluent_builders::CreateTransitGatewayPrefixListReference::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayRoute`](crate::client::fluent_builders::CreateTransitGatewayRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayRoute::set_destination_cidr_block): <p>The CIDR range used for destination matches. Routing decisions are based on the most specific match.</p>
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayRoute::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayRoute::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayRoute::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayRoute::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`blackhole(bool)`](crate::client::fluent_builders::CreateTransitGatewayRoute::blackhole) / [`set_blackhole(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayRoute::set_blackhole): <p>Indicates whether to drop traffic that matches this route.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayRouteOutput`](crate::output::CreateTransitGatewayRouteOutput) with field(s):
    ///   - [`route(Option<TransitGatewayRoute>)`](crate::output::CreateTransitGatewayRouteOutput::route): <p>Information about the route.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayRouteError>`](crate::error::CreateTransitGatewayRouteError)
    pub fn create_transit_gateway_route(&self) -> fluent_builders::CreateTransitGatewayRoute {
        fluent_builders::CreateTransitGatewayRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayRouteTable`](crate::client::fluent_builders::CreateTransitGatewayRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTable::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTable::set_transit_gateway_id): <p>The ID of the transit gateway.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTable::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTable::set_tag_specifications): <p>The tags to apply to the transit gateway route table.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayRouteTableOutput`](crate::output::CreateTransitGatewayRouteTableOutput) with field(s):
    ///   - [`transit_gateway_route_table(Option<TransitGatewayRouteTable>)`](crate::output::CreateTransitGatewayRouteTableOutput::transit_gateway_route_table): <p>Information about the transit gateway route table.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayRouteTableError>`](crate::error::CreateTransitGatewayRouteTableError)
    pub fn create_transit_gateway_route_table(
        &self,
    ) -> fluent_builders::CreateTransitGatewayRouteTable {
        fluent_builders::CreateTransitGatewayRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayRouteTableAnnouncement`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`peering_attachment_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement::peering_attachment_id) / [`set_peering_attachment_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement::set_peering_attachment_id): <p>The ID of the peering attachment.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement::set_tag_specifications): <p>The tags specifications applied to the transit gateway route table announcement.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayRouteTableAnnouncement::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayRouteTableAnnouncementOutput`](crate::output::CreateTransitGatewayRouteTableAnnouncementOutput) with field(s):
    ///   - [`transit_gateway_route_table_announcement(Option<TransitGatewayRouteTableAnnouncement>)`](crate::output::CreateTransitGatewayRouteTableAnnouncementOutput::transit_gateway_route_table_announcement): <p>Provides details about the transit gateway route table announcement.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayRouteTableAnnouncementError>`](crate::error::CreateTransitGatewayRouteTableAnnouncementError)
    pub fn create_transit_gateway_route_table_announcement(
        &self,
    ) -> fluent_builders::CreateTransitGatewayRouteTableAnnouncement {
        fluent_builders::CreateTransitGatewayRouteTableAnnouncement::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateTransitGatewayVpcAttachment`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::set_transit_gateway_id): <p>The ID of the transit gateway.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`subnet_ids(Vec<String>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::subnet_ids) / [`set_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::set_subnet_ids): <p>The IDs of one or more subnets. You can specify only one subnet per Availability Zone. You must specify at least one subnet, but we recommend that you specify two subnets for better availability. The transit gateway uses one IP address from each specified subnet.</p>
    ///   - [`options(CreateTransitGatewayVpcAttachmentRequestOptions)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::options) / [`set_options(Option<CreateTransitGatewayVpcAttachmentRequestOptions>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::set_options): <p>The VPC attachment options.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::set_tag_specifications): <p>The tags to apply to the VPC attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateTransitGatewayVpcAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateTransitGatewayVpcAttachmentOutput`](crate::output::CreateTransitGatewayVpcAttachmentOutput) with field(s):
    ///   - [`transit_gateway_vpc_attachment(Option<TransitGatewayVpcAttachment>)`](crate::output::CreateTransitGatewayVpcAttachmentOutput::transit_gateway_vpc_attachment): <p>Information about the VPC attachment.</p>
    /// - On failure, responds with [`SdkError<CreateTransitGatewayVpcAttachmentError>`](crate::error::CreateTransitGatewayVpcAttachmentError)
    pub fn create_transit_gateway_vpc_attachment(
        &self,
    ) -> fluent_builders::CreateTransitGatewayVpcAttachment {
        fluent_builders::CreateTransitGatewayVpcAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVerifiedAccessEndpoint`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_group_id(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::verified_access_group_id) / [`set_verified_access_group_id(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_verified_access_group_id): <p>The ID of the Verified Access group to associate the endpoint with.</p>
    ///   - [`endpoint_type(VerifiedAccessEndpointType)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::endpoint_type) / [`set_endpoint_type(Option<VerifiedAccessEndpointType>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_endpoint_type): <p>The type of Amazon Web Services Verified Access endpoint to create.</p>
    ///   - [`attachment_type(VerifiedAccessEndpointAttachmentType)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::attachment_type) / [`set_attachment_type(Option<VerifiedAccessEndpointAttachmentType>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_attachment_type): <p>The Amazon Web Services network component Verified Access attaches to.</p>
    ///   - [`domain_certificate_arn(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::domain_certificate_arn) / [`set_domain_certificate_arn(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_domain_certificate_arn): <p>The ARN of the public TLS/SSL certificate in Amazon Web Services Certificate Manager to associate with the endpoint. The CN in the certificate must match the DNS name your end users will use to reach your application.</p>
    ///   - [`application_domain(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::application_domain) / [`set_application_domain(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_application_domain): <p>The DNS name for users to reach your application.</p>
    ///   - [`endpoint_domain_prefix(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::endpoint_domain_prefix) / [`set_endpoint_domain_prefix(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_endpoint_domain_prefix): <p>A custom identifier that gets prepended to a DNS name that is generated for the endpoint.</p>
    ///   - [`security_group_ids(Vec<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::security_group_ids) / [`set_security_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_security_group_ids): <p>The Amazon EC2 security groups to associate with the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`load_balancer_options(CreateVerifiedAccessEndpointLoadBalancerOptions)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::load_balancer_options) / [`set_load_balancer_options(Option<CreateVerifiedAccessEndpointLoadBalancerOptions>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_load_balancer_options): <p>The load balancer details if creating the Amazon Web Services Verified Access endpoint as <code>load-balancer</code>type.</p>
    ///   - [`network_interface_options(CreateVerifiedAccessEndpointEniOptions)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::network_interface_options) / [`set_network_interface_options(Option<CreateVerifiedAccessEndpointEniOptions>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_network_interface_options): <p>The network interface details if creating the Amazon Web Services Verified Access endpoint as <code>network-interface</code>type.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_description): <p>A description for the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`policy_document(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::policy_document) / [`set_policy_document(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_policy_document): <p>The Amazon Web Services Verified Access policy document.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_tag_specifications): <p>The tags to assign to the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVerifiedAccessEndpoint::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateVerifiedAccessEndpointOutput`](crate::output::CreateVerifiedAccessEndpointOutput) with field(s):
    ///   - [`verified_access_endpoint(Option<VerifiedAccessEndpoint>)`](crate::output::CreateVerifiedAccessEndpointOutput::verified_access_endpoint): <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
    /// - On failure, responds with [`SdkError<CreateVerifiedAccessEndpointError>`](crate::error::CreateVerifiedAccessEndpointError)
    pub fn create_verified_access_endpoint(&self) -> fluent_builders::CreateVerifiedAccessEndpoint {
        fluent_builders::CreateVerifiedAccessEndpoint::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVerifiedAccessGroup`](crate::client::fluent_builders::CreateVerifiedAccessGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::set_description): <p>A description for the Amazon Web Services Verified Access group.</p>
    ///   - [`policy_document(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::policy_document) / [`set_policy_document(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::set_policy_document): <p>The Amazon Web Services Verified Access policy document.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::set_tag_specifications): <p>The tags to assign to the Amazon Web Services Verified Access group.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVerifiedAccessGroup::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateVerifiedAccessGroupOutput`](crate::output::CreateVerifiedAccessGroupOutput) with field(s):
    ///   - [`verified_access_group(Option<VerifiedAccessGroup>)`](crate::output::CreateVerifiedAccessGroupOutput::verified_access_group): <p>The ID of the Verified Access group.</p>
    /// - On failure, responds with [`SdkError<CreateVerifiedAccessGroupError>`](crate::error::CreateVerifiedAccessGroupError)
    pub fn create_verified_access_group(&self) -> fluent_builders::CreateVerifiedAccessGroup {
        fluent_builders::CreateVerifiedAccessGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVerifiedAccessInstance`](crate::client::fluent_builders::CreateVerifiedAccessInstance) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessInstance::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessInstance::set_description): <p>A description for the Amazon Web Services Verified Access instance.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVerifiedAccessInstance::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVerifiedAccessInstance::set_tag_specifications): <p>The tags to assign to the Amazon Web Services Verified Access instance.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessInstance::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessInstance::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVerifiedAccessInstance::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVerifiedAccessInstance::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateVerifiedAccessInstanceOutput`](crate::output::CreateVerifiedAccessInstanceOutput) with field(s):
    ///   - [`verified_access_instance(Option<VerifiedAccessInstance>)`](crate::output::CreateVerifiedAccessInstanceOutput::verified_access_instance): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    /// - On failure, responds with [`SdkError<CreateVerifiedAccessInstanceError>`](crate::error::CreateVerifiedAccessInstanceError)
    pub fn create_verified_access_instance(&self) -> fluent_builders::CreateVerifiedAccessInstance {
        fluent_builders::CreateVerifiedAccessInstance::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVerifiedAccessTrustProvider`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`trust_provider_type(TrustProviderType)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::trust_provider_type) / [`set_trust_provider_type(Option<TrustProviderType>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_trust_provider_type): <p>The type of trust provider can be either user or device-based.</p>
    ///   - [`user_trust_provider_type(UserTrustProviderType)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::user_trust_provider_type) / [`set_user_trust_provider_type(Option<UserTrustProviderType>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_user_trust_provider_type): <p>The type of user-based trust provider.</p>
    ///   - [`device_trust_provider_type(DeviceTrustProviderType)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::device_trust_provider_type) / [`set_device_trust_provider_type(Option<DeviceTrustProviderType>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_device_trust_provider_type): <p>The type of device-based trust provider.</p>
    ///   - [`oidc_options(CreateVerifiedAccessTrustProviderOidcOptions)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::oidc_options) / [`set_oidc_options(Option<CreateVerifiedAccessTrustProviderOidcOptions>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_oidc_options): <p>The OpenID Connect details for an <code>oidc</code>-type, user-identity based trust provider.</p>
    ///   - [`device_options(CreateVerifiedAccessTrustProviderDeviceOptions)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::device_options) / [`set_device_options(Option<CreateVerifiedAccessTrustProviderDeviceOptions>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_device_options): <p>The options for device identity based trust providers.</p>
    ///   - [`policy_reference_name(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::policy_reference_name) / [`set_policy_reference_name(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_policy_reference_name): <p>The identifier to be used when working with policy rules.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_description): <p>A description for the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_tag_specifications): <p>The tags to assign to the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVerifiedAccessTrustProvider::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateVerifiedAccessTrustProviderOutput`](crate::output::CreateVerifiedAccessTrustProviderOutput) with field(s):
    ///   - [`verified_access_trust_provider(Option<VerifiedAccessTrustProvider>)`](crate::output::CreateVerifiedAccessTrustProviderOutput::verified_access_trust_provider): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    /// - On failure, responds with [`SdkError<CreateVerifiedAccessTrustProviderError>`](crate::error::CreateVerifiedAccessTrustProviderError)
    pub fn create_verified_access_trust_provider(
        &self,
    ) -> fluent_builders::CreateVerifiedAccessTrustProvider {
        fluent_builders::CreateVerifiedAccessTrustProvider::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVolume`](crate::client::fluent_builders::CreateVolume) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::CreateVolume::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::CreateVolume::set_availability_zone): <p>The Availability Zone in which to create the volume.</p>
    ///   - [`encrypted(bool)`](crate::client::fluent_builders::CreateVolume::encrypted) / [`set_encrypted(Option<bool>)`](crate::client::fluent_builders::CreateVolume::set_encrypted): <p>Indicates whether the volume should be encrypted. The effect of setting the encryption state to <code>true</code> depends on the volume origin (new or from a snapshot), starting encryption state, ownership, and whether encryption by default is enabled. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default">Encryption by default</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>  <p>Encrypted Amazon EBS volumes must be attached to instances that support Amazon EBS encryption. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances">Supported instance types</a>.</p>
    ///   - [`iops(i32)`](crate::client::fluent_builders::CreateVolume::iops) / [`set_iops(Option<i32>)`](crate::client::fluent_builders::CreateVolume::set_iops): <p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p>  <p>The following are the supported values for each volume type:</p>  <ul>   <li> <p> <code>gp3</code>: 3,000-16,000 IOPS</p> </li>   <li> <p> <code>io1</code>: 100-64,000 IOPS</p> </li>   <li> <p> <code>io2</code>: 100-64,000 IOPS</p> </li>  </ul>  <p> <code>io1</code> and <code>io2</code> volumes support up to 64,000 IOPS only on <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Instances built on the Nitro System</a>. Other instance families support performance up to 32,000 IOPS.</p>  <p>This parameter is required for <code>io1</code> and <code>io2</code> volumes. The default for <code>gp3</code> volumes is 3,000 IOPS. This parameter is not supported for <code>gp2</code>, <code>st1</code>, <code>sc1</code>, or <code>standard</code> volumes.</p>
    ///   - [`kms_key_id(impl Into<String>)`](crate::client::fluent_builders::CreateVolume::kms_key_id) / [`set_kms_key_id(Option<String>)`](crate::client::fluent_builders::CreateVolume::set_kms_key_id): <p>The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>  <p>You can specify the KMS key using any of the following:</p>  <ul>   <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>   <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>   <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>   <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>  </ul>  <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>
    ///   - [`outpost_arn(impl Into<String>)`](crate::client::fluent_builders::CreateVolume::outpost_arn) / [`set_outpost_arn(Option<String>)`](crate::client::fluent_builders::CreateVolume::set_outpost_arn): <p>The Amazon Resource Name (ARN) of the Outpost.</p>
    ///   - [`size(i32)`](crate::client::fluent_builders::CreateVolume::size) / [`set_size(Option<i32>)`](crate::client::fluent_builders::CreateVolume::set_size): <p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size. You can specify a volume size that is equal to or larger than the snapshot size.</p>  <p>The following are the supported volumes sizes for each volume type:</p>  <ul>   <li> <p> <code>gp2</code> and <code>gp3</code>: 1-16,384</p> </li>   <li> <p> <code>io1</code> and <code>io2</code>: 4-16,384</p> </li>   <li> <p> <code>st1</code> and <code>sc1</code>: 125-16,384</p> </li>   <li> <p> <code>standard</code>: 1-1,024</p> </li>  </ul>
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::CreateVolume::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::CreateVolume::set_snapshot_id): <p>The snapshot from which to create the volume. You must specify either a snapshot ID or a volume size.</p>
    ///   - [`volume_type(VolumeType)`](crate::client::fluent_builders::CreateVolume::volume_type) / [`set_volume_type(Option<VolumeType>)`](crate::client::fluent_builders::CreateVolume::set_volume_type): <p>The volume type. This parameter can be one of the following values:</p>  <ul>   <li> <p>General Purpose SSD: <code>gp2</code> | <code>gp3</code> </p> </li>   <li> <p>Provisioned IOPS SSD: <code>io1</code> | <code>io2</code> </p> </li>   <li> <p>Throughput Optimized HDD: <code>st1</code> </p> </li>   <li> <p>Cold HDD: <code>sc1</code> </p> </li>   <li> <p>Magnetic: <code>standard</code> </p> </li>  </ul>  <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html">Amazon EBS volume types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>  <p>Default: <code>gp2</code> </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVolume::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVolume::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVolume::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVolume::set_tag_specifications): <p>The tags to apply to the volume during creation.</p>
    ///   - [`multi_attach_enabled(bool)`](crate::client::fluent_builders::CreateVolume::multi_attach_enabled) / [`set_multi_attach_enabled(Option<bool>)`](crate::client::fluent_builders::CreateVolume::set_multi_attach_enabled): <p>Indicates whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Instances built on the Nitro System</a> in the same Availability Zone. This parameter is supported with <code>io1</code> and <code>io2</code> volumes only. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html"> Amazon EBS Multi-Attach</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`throughput(i32)`](crate::client::fluent_builders::CreateVolume::throughput) / [`set_throughput(Option<i32>)`](crate::client::fluent_builders::CreateVolume::set_throughput): <p>The throughput to provision for a volume, with a maximum of 1,000 MiB/s.</p>  <p>This parameter is valid only for <code>gp3</code> volumes.</p>  <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateVolume::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateVolume::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
    /// - On success, responds with [`CreateVolumeOutput`](crate::output::CreateVolumeOutput) with field(s):
    ///   - [`attachments(Option<Vec<VolumeAttachment>>)`](crate::output::CreateVolumeOutput::attachments): <p>Information about the volume attachments.</p>
    ///   - [`availability_zone(Option<String>)`](crate::output::CreateVolumeOutput::availability_zone): <p>The Availability Zone for the volume.</p>
    ///   - [`create_time(Option<DateTime>)`](crate::output::CreateVolumeOutput::create_time): <p>The time stamp when volume creation was initiated.</p>
    ///   - [`encrypted(Option<bool>)`](crate::output::CreateVolumeOutput::encrypted): <p>Indicates whether the volume is encrypted.</p>
    ///   - [`kms_key_id(Option<String>)`](crate::output::CreateVolumeOutput::kms_key_id): <p>The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that was used to protect the volume encryption key for the volume.</p>
    ///   - [`outpost_arn(Option<String>)`](crate::output::CreateVolumeOutput::outpost_arn): <p>The Amazon Resource Name (ARN) of the Outpost.</p>
    ///   - [`size(Option<i32>)`](crate::output::CreateVolumeOutput::size): <p>The size of the volume, in GiBs.</p>
    ///   - [`snapshot_id(Option<String>)`](crate::output::CreateVolumeOutput::snapshot_id): <p>The snapshot from which the volume was created, if applicable.</p>
    ///   - [`state(Option<VolumeState>)`](crate::output::CreateVolumeOutput::state): <p>The volume state.</p>
    ///   - [`volume_id(Option<String>)`](crate::output::CreateVolumeOutput::volume_id): <p>The ID of the volume.</p>
    ///   - [`iops(Option<i32>)`](crate::output::CreateVolumeOutput::iops): <p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::CreateVolumeOutput::tags): <p>Any tags assigned to the volume.</p>
    ///   - [`volume_type(Option<VolumeType>)`](crate::output::CreateVolumeOutput::volume_type): <p>The volume type.</p>
    ///   - [`fast_restored(Option<bool>)`](crate::output::CreateVolumeOutput::fast_restored): <p>Indicates whether the volume was created using fast snapshot restore.</p>
    ///   - [`multi_attach_enabled(Option<bool>)`](crate::output::CreateVolumeOutput::multi_attach_enabled): <p>Indicates whether Amazon EBS Multi-Attach is enabled.</p>
    ///   - [`throughput(Option<i32>)`](crate::output::CreateVolumeOutput::throughput): <p>The throughput that the volume supports, in MiB/s.</p>
    /// - On failure, responds with [`SdkError<CreateVolumeError>`](crate::error::CreateVolumeError)
    pub fn create_volume(&self) -> fluent_builders::CreateVolume {
        fluent_builders::CreateVolume::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVpc`](crate::client::fluent_builders::CreateVpc) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateVpc::cidr_block) / [`set_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateVpc::set_cidr_block): <p>The IPv4 network range for the VPC, in CIDR notation. For example, <code>10.0.0.0/16</code>. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
    ///   - [`amazon_provided_ipv6_cidr_block(bool)`](crate::client::fluent_builders::CreateVpc::amazon_provided_ipv6_cidr_block) / [`set_amazon_provided_ipv6_cidr_block(Option<bool>)`](crate::client::fluent_builders::CreateVpc::set_amazon_provided_ipv6_cidr_block): <p>Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.</p>
    ///   - [`ipv6_pool(impl Into<String>)`](crate::client::fluent_builders::CreateVpc::ipv6_pool) / [`set_ipv6_pool(Option<String>)`](crate::client::fluent_builders::CreateVpc::set_ipv6_pool): <p>The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block.</p>
    ///   - [`ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateVpc::ipv6_cidr_block) / [`set_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateVpc::set_ipv6_cidr_block): <p>The IPv6 CIDR block from the IPv6 address pool. You must also specify <code>Ipv6Pool</code> in the request.</p>  <p>To let Amazon choose the IPv6 CIDR block for you, omit this parameter.</p>
    ///   - [`ipv4_ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpc::ipv4_ipam_pool_id) / [`set_ipv4_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::CreateVpc::set_ipv4_ipam_pool_id): <p>The ID of an IPv4 IPAM pool you want to use for allocating this VPC's CIDR. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    ///   - [`ipv4_netmask_length(i32)`](crate::client::fluent_builders::CreateVpc::ipv4_netmask_length) / [`set_ipv4_netmask_length(Option<i32>)`](crate::client::fluent_builders::CreateVpc::set_ipv4_netmask_length): <p>The netmask length of the IPv4 CIDR you want to allocate to this VPC from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    ///   - [`ipv6_ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpc::ipv6_ipam_pool_id) / [`set_ipv6_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::CreateVpc::set_ipv6_ipam_pool_id): <p>The ID of an IPv6 IPAM pool which will be used to allocate this VPC an IPv6 CIDR. IPAM is a VPC feature that you can use to automate your IP address management workflows including assigning, tracking, troubleshooting, and auditing IP addresses across Amazon Web Services Regions and accounts throughout your Amazon Web Services Organization. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    ///   - [`ipv6_netmask_length(i32)`](crate::client::fluent_builders::CreateVpc::ipv6_netmask_length) / [`set_ipv6_netmask_length(Option<i32>)`](crate::client::fluent_builders::CreateVpc::set_ipv6_netmask_length): <p>The netmask length of the IPv6 CIDR you want to allocate to this VPC from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVpc::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVpc::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_tenancy(Tenancy)`](crate::client::fluent_builders::CreateVpc::instance_tenancy) / [`set_instance_tenancy(Option<Tenancy>)`](crate::client::fluent_builders::CreateVpc::set_instance_tenancy): <p>The tenancy options for instances launched into the VPC. For <code>default</code>, instances are launched with shared tenancy by default. You can launch instances with any tenancy into a shared tenancy VPC. For <code>dedicated</code>, instances are launched as dedicated tenancy instances by default. You can only launch instances with a tenancy of <code>dedicated</code> or <code>host</code> into a dedicated tenancy VPC. </p>  <p> <b>Important:</b> The <code>host</code> value cannot be used with this parameter. Use the <code>default</code> or <code>dedicated</code> values only.</p>  <p>Default: <code>default</code> </p>
    ///   - [`ipv6_cidr_block_network_border_group(impl Into<String>)`](crate::client::fluent_builders::CreateVpc::ipv6_cidr_block_network_border_group) / [`set_ipv6_cidr_block_network_border_group(Option<String>)`](crate::client::fluent_builders::CreateVpc::set_ipv6_cidr_block_network_border_group): <p>The name of the location from which we advertise the IPV6 CIDR block. Use this parameter to limit the address to this location.</p>  <p> You must set <code>AmazonProvidedIpv6CidrBlock</code> to <code>true</code> to use this parameter.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVpc::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVpc::set_tag_specifications): <p>The tags to assign to the VPC.</p>
    /// - On success, responds with [`CreateVpcOutput`](crate::output::CreateVpcOutput) with field(s):
    ///   - [`vpc(Option<Vpc>)`](crate::output::CreateVpcOutput::vpc): <p>Information about the VPC.</p>
    /// - On failure, responds with [`SdkError<CreateVpcError>`](crate::error::CreateVpcError)
    pub fn create_vpc(&self) -> fluent_builders::CreateVpc {
        fluent_builders::CreateVpc::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVpcEndpoint`](crate::client::fluent_builders::CreateVpcEndpoint) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVpcEndpoint::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_endpoint_type(VpcEndpointType)`](crate::client::fluent_builders::CreateVpcEndpoint::vpc_endpoint_type) / [`set_vpc_endpoint_type(Option<VpcEndpointType>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_vpc_endpoint_type): <p>The type of endpoint.</p>  <p>Default: Gateway</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_vpc_id): <p>The ID of the VPC for the endpoint.</p>
    ///   - [`service_name(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::service_name) / [`set_service_name(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_service_name): <p>The service name.</p>
    ///   - [`policy_document(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::policy_document) / [`set_policy_document(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_policy_document): <p>(Interface and gateway endpoints) A policy to attach to the endpoint that controls access to the service. The policy must be in valid JSON format. If this parameter is not specified, we attach a default policy that allows full access to the service.</p>
    ///   - [`route_table_ids(Vec<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::route_table_ids) / [`set_route_table_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_route_table_ids): <p>(Gateway endpoint) The route table IDs.</p>
    ///   - [`subnet_ids(Vec<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::subnet_ids) / [`set_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_subnet_ids): <p>(Interface and Gateway Load Balancer endpoints) The IDs of the subnets in which to create an endpoint network interface. For a Gateway Load Balancer endpoint, you can specify only one subnet.</p>
    ///   - [`security_group_ids(Vec<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::security_group_ids) / [`set_security_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_security_group_ids): <p>(Interface endpoint) The IDs of the security groups to associate with the endpoint network interface. If this parameter is not specified, we use the default security group for the VPC.</p>
    ///   - [`ip_address_type(IpAddressType)`](crate::client::fluent_builders::CreateVpcEndpoint::ip_address_type) / [`set_ip_address_type(Option<IpAddressType>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_ip_address_type): <p>The IP address type for the endpoint.</p>
    ///   - [`dns_options(DnsOptionsSpecification)`](crate::client::fluent_builders::CreateVpcEndpoint::dns_options) / [`set_dns_options(Option<DnsOptionsSpecification>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_dns_options): <p>The DNS options for the endpoint.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`private_dns_enabled(bool)`](crate::client::fluent_builders::CreateVpcEndpoint::private_dns_enabled) / [`set_private_dns_enabled(Option<bool>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_private_dns_enabled): <p>(Interface endpoint) Indicates whether to associate a private hosted zone with the specified VPC. The private hosted zone contains a record set for the default public DNS name for the service for the Region (for example, <code>kinesis.us-east-1.amazonaws.com</code>), which resolves to the private IP addresses of the endpoint network interfaces in the VPC. This enables you to make requests to the default public DNS name for the service instead of the public DNS names that are automatically generated by the VPC endpoint service.</p>  <p>To use a private hosted zone, you must set the following VPC attributes to <code>true</code>: <code>enableDnsHostnames</code> and <code>enableDnsSupport</code>. Use <code>ModifyVpcAttribute</code> to set the VPC attributes.</p>  <p>Default: <code>true</code> </p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVpcEndpoint::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVpcEndpoint::set_tag_specifications): <p>The tags to associate with the endpoint.</p>
    /// - On success, responds with [`CreateVpcEndpointOutput`](crate::output::CreateVpcEndpointOutput) with field(s):
    ///   - [`vpc_endpoint(Option<VpcEndpoint>)`](crate::output::CreateVpcEndpointOutput::vpc_endpoint): <p>Information about the endpoint.</p>
    ///   - [`client_token(Option<String>)`](crate::output::CreateVpcEndpointOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
    /// - On failure, responds with [`SdkError<CreateVpcEndpointError>`](crate::error::CreateVpcEndpointError)
    pub fn create_vpc_endpoint(&self) -> fluent_builders::CreateVpcEndpoint {
        fluent_builders::CreateVpcEndpoint::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVpcEndpointConnectionNotification`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::service_id) / [`set_service_id(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::set_service_id): <p>The ID of the endpoint service.</p>
    ///   - [`vpc_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::vpc_endpoint_id) / [`set_vpc_endpoint_id(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::set_vpc_endpoint_id): <p>The ID of the endpoint.</p>
    ///   - [`connection_notification_arn(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::connection_notification_arn) / [`set_connection_notification_arn(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::set_connection_notification_arn): <p>The ARN of the SNS topic for the notifications.</p>
    ///   - [`connection_events(Vec<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::connection_events) / [`set_connection_events(Option<Vec<String>>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::set_connection_events): <p>The endpoint events for which to receive notifications. Valid values are <code>Accept</code>, <code>Connect</code>, <code>Delete</code>, and <code>Reject</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpointConnectionNotification::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On success, responds with [`CreateVpcEndpointConnectionNotificationOutput`](crate::output::CreateVpcEndpointConnectionNotificationOutput) with field(s):
    ///   - [`connection_notification(Option<ConnectionNotification>)`](crate::output::CreateVpcEndpointConnectionNotificationOutput::connection_notification): <p>Information about the notification.</p>
    ///   - [`client_token(Option<String>)`](crate::output::CreateVpcEndpointConnectionNotificationOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
    /// - On failure, responds with [`SdkError<CreateVpcEndpointConnectionNotificationError>`](crate::error::CreateVpcEndpointConnectionNotificationError)
    pub fn create_vpc_endpoint_connection_notification(
        &self,
    ) -> fluent_builders::CreateVpcEndpointConnectionNotification {
        fluent_builders::CreateVpcEndpointConnectionNotification::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVpcEndpointServiceConfiguration`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`acceptance_required(bool)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::acceptance_required) / [`set_acceptance_required(Option<bool>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::set_acceptance_required): <p>Indicates whether requests from service consumers to create an endpoint to your service must be accepted manually.</p>
    ///   - [`private_dns_name(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::private_dns_name) / [`set_private_dns_name(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::set_private_dns_name): <p>(Interface endpoint configuration) The private DNS name to assign to the VPC endpoint service.</p>
    ///   - [`network_load_balancer_arns(Vec<String>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::network_load_balancer_arns) / [`set_network_load_balancer_arns(Option<Vec<String>>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::set_network_load_balancer_arns): <p>The Amazon Resource Names (ARNs) of the Network Load Balancers.</p>
    ///   - [`gateway_load_balancer_arns(Vec<String>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::gateway_load_balancer_arns) / [`set_gateway_load_balancer_arns(Option<Vec<String>>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::set_gateway_load_balancer_arns): <p>The Amazon Resource Names (ARNs) of the Gateway Load Balancers.</p>
    ///   - [`supported_ip_address_types(Vec<String>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::supported_ip_address_types) / [`set_supported_ip_address_types(Option<Vec<String>>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::set_supported_ip_address_types): <p>The supported IP address types. The possible values are <code>ipv4</code> and <code>ipv6</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVpcEndpointServiceConfiguration::set_tag_specifications): <p>The tags to associate with the service.</p>
    /// - On success, responds with [`CreateVpcEndpointServiceConfigurationOutput`](crate::output::CreateVpcEndpointServiceConfigurationOutput) with field(s):
    ///   - [`service_configuration(Option<ServiceConfiguration>)`](crate::output::CreateVpcEndpointServiceConfigurationOutput::service_configuration): <p>Information about the service configuration.</p>
    ///   - [`client_token(Option<String>)`](crate::output::CreateVpcEndpointServiceConfigurationOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
    /// - On failure, responds with [`SdkError<CreateVpcEndpointServiceConfigurationError>`](crate::error::CreateVpcEndpointServiceConfigurationError)
    pub fn create_vpc_endpoint_service_configuration(
        &self,
    ) -> fluent_builders::CreateVpcEndpointServiceConfiguration {
        fluent_builders::CreateVpcEndpointServiceConfiguration::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVpcPeeringConnection`](crate::client::fluent_builders::CreateVpcPeeringConnection) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVpcPeeringConnection::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`peer_owner_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::peer_owner_id) / [`set_peer_owner_id(Option<String>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::set_peer_owner_id): <p>The Amazon Web Services account ID of the owner of the accepter VPC.</p>  <p>Default: Your Amazon Web Services account ID</p>
    ///   - [`peer_vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::peer_vpc_id) / [`set_peer_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::set_peer_vpc_id): <p>The ID of the VPC with which you are creating the VPC peering connection. You must specify this parameter in the request.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::set_vpc_id): <p>The ID of the requester VPC. You must specify this parameter in the request.</p>
    ///   - [`peer_region(impl Into<String>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::peer_region) / [`set_peer_region(Option<String>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::set_peer_region): <p>The Region code for the accepter VPC, if the accepter VPC is located in a Region other than the Region in which you make the request.</p>  <p>Default: The Region in which you make the request.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVpcPeeringConnection::set_tag_specifications): <p>The tags to assign to the peering connection.</p>
    /// - On success, responds with [`CreateVpcPeeringConnectionOutput`](crate::output::CreateVpcPeeringConnectionOutput) with field(s):
    ///   - [`vpc_peering_connection(Option<VpcPeeringConnection>)`](crate::output::CreateVpcPeeringConnectionOutput::vpc_peering_connection): <p>Information about the VPC peering connection.</p>
    /// - On failure, responds with [`SdkError<CreateVpcPeeringConnectionError>`](crate::error::CreateVpcPeeringConnectionError)
    pub fn create_vpc_peering_connection(&self) -> fluent_builders::CreateVpcPeeringConnection {
        fluent_builders::CreateVpcPeeringConnection::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVpnConnection`](crate::client::fluent_builders::CreateVpnConnection) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`customer_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpnConnection::customer_gateway_id) / [`set_customer_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateVpnConnection::set_customer_gateway_id): <p>The ID of the customer gateway.</p>
    ///   - [`r#type(impl Into<String>)`](crate::client::fluent_builders::CreateVpnConnection::type) / [`set_type(Option<String>)`](crate::client::fluent_builders::CreateVpnConnection::set_type): <p>The type of VPN connection (<code>ipsec.1</code>).</p>
    ///   - [`vpn_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpnConnection::vpn_gateway_id) / [`set_vpn_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateVpnConnection::set_vpn_gateway_id): <p>The ID of the virtual private gateway. If you specify a virtual private gateway, you cannot specify a transit gateway.</p>
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpnConnection::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::CreateVpnConnection::set_transit_gateway_id): <p>The ID of the transit gateway. If you specify a transit gateway, you cannot specify a virtual private gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVpnConnection::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVpnConnection::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`options(VpnConnectionOptionsSpecification)`](crate::client::fluent_builders::CreateVpnConnection::options) / [`set_options(Option<VpnConnectionOptionsSpecification>)`](crate::client::fluent_builders::CreateVpnConnection::set_options): <p>The options for the VPN connection.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVpnConnection::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVpnConnection::set_tag_specifications): <p>The tags to apply to the VPN connection.</p>
    /// - On success, responds with [`CreateVpnConnectionOutput`](crate::output::CreateVpnConnectionOutput) with field(s):
    ///   - [`vpn_connection(Option<VpnConnection>)`](crate::output::CreateVpnConnectionOutput::vpn_connection): <p>Information about the VPN connection.</p>
    /// - On failure, responds with [`SdkError<CreateVpnConnectionError>`](crate::error::CreateVpnConnectionError)
    pub fn create_vpn_connection(&self) -> fluent_builders::CreateVpnConnection {
        fluent_builders::CreateVpnConnection::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVpnConnectionRoute`](crate::client::fluent_builders::CreateVpnConnectionRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::CreateVpnConnectionRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::CreateVpnConnectionRoute::set_destination_cidr_block): <p>The CIDR block associated with the local subnet of the customer network.</p>
    ///   - [`vpn_connection_id(impl Into<String>)`](crate::client::fluent_builders::CreateVpnConnectionRoute::vpn_connection_id) / [`set_vpn_connection_id(Option<String>)`](crate::client::fluent_builders::CreateVpnConnectionRoute::set_vpn_connection_id): <p>The ID of the VPN connection.</p>
    /// - On success, responds with [`CreateVpnConnectionRouteOutput`](crate::output::CreateVpnConnectionRouteOutput)

    /// - On failure, responds with [`SdkError<CreateVpnConnectionRouteError>`](crate::error::CreateVpnConnectionRouteError)
    pub fn create_vpn_connection_route(&self) -> fluent_builders::CreateVpnConnectionRoute {
        fluent_builders::CreateVpnConnectionRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`CreateVpnGateway`](crate::client::fluent_builders::CreateVpnGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::CreateVpnGateway::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::CreateVpnGateway::set_availability_zone): <p>The Availability Zone for the virtual private gateway.</p>
    ///   - [`r#type(GatewayType)`](crate::client::fluent_builders::CreateVpnGateway::type) / [`set_type(Option<GatewayType>)`](crate::client::fluent_builders::CreateVpnGateway::set_type): <p>The type of VPN connection this virtual private gateway supports.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::CreateVpnGateway::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::CreateVpnGateway::set_tag_specifications): <p>The tags to apply to the virtual private gateway.</p>
    ///   - [`amazon_side_asn(i64)`](crate::client::fluent_builders::CreateVpnGateway::amazon_side_asn) / [`set_amazon_side_asn(Option<i64>)`](crate::client::fluent_builders::CreateVpnGateway::set_amazon_side_asn): <p>A private Autonomous System Number (ASN) for the Amazon side of a BGP session. If you're using a 16-bit ASN, it must be in the 64512 to 65534 range. If you're using a 32-bit ASN, it must be in the 4200000000 to 4294967294 range.</p>  <p>Default: 64512</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::CreateVpnGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::CreateVpnGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`CreateVpnGatewayOutput`](crate::output::CreateVpnGatewayOutput) with field(s):
    ///   - [`vpn_gateway(Option<VpnGateway>)`](crate::output::CreateVpnGatewayOutput::vpn_gateway): <p>Information about the virtual private gateway.</p>
    /// - On failure, responds with [`SdkError<CreateVpnGatewayError>`](crate::error::CreateVpnGatewayError)
    pub fn create_vpn_gateway(&self) -> fluent_builders::CreateVpnGateway {
        fluent_builders::CreateVpnGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteCarrierGateway`](crate::client::fluent_builders::DeleteCarrierGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`carrier_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DeleteCarrierGateway::carrier_gateway_id) / [`set_carrier_gateway_id(Option<String>)`](crate::client::fluent_builders::DeleteCarrierGateway::set_carrier_gateway_id): <p>The ID of the carrier gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteCarrierGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteCarrierGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteCarrierGatewayOutput`](crate::output::DeleteCarrierGatewayOutput) with field(s):
    ///   - [`carrier_gateway(Option<CarrierGateway>)`](crate::output::DeleteCarrierGatewayOutput::carrier_gateway): <p>Information about the carrier gateway.</p>
    /// - On failure, responds with [`SdkError<DeleteCarrierGatewayError>`](crate::error::DeleteCarrierGatewayError)
    pub fn delete_carrier_gateway(&self) -> fluent_builders::DeleteCarrierGateway {
        fluent_builders::DeleteCarrierGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteClientVpnEndpoint`](crate::client::fluent_builders::DeleteClientVpnEndpoint) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::DeleteClientVpnEndpoint::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::DeleteClientVpnEndpoint::set_client_vpn_endpoint_id): <p>The ID of the Client VPN to be deleted.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteClientVpnEndpoint::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteClientVpnEndpoint::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteClientVpnEndpointOutput`](crate::output::DeleteClientVpnEndpointOutput) with field(s):
    ///   - [`status(Option<ClientVpnEndpointStatus>)`](crate::output::DeleteClientVpnEndpointOutput::status): <p>The current state of the Client VPN endpoint.</p>
    /// - On failure, responds with [`SdkError<DeleteClientVpnEndpointError>`](crate::error::DeleteClientVpnEndpointError)
    pub fn delete_client_vpn_endpoint(&self) -> fluent_builders::DeleteClientVpnEndpoint {
        fluent_builders::DeleteClientVpnEndpoint::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteClientVpnRoute`](crate::client::fluent_builders::DeleteClientVpnRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::DeleteClientVpnRoute::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::DeleteClientVpnRoute::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint from which the route is to be deleted.</p>
    ///   - [`target_vpc_subnet_id(impl Into<String>)`](crate::client::fluent_builders::DeleteClientVpnRoute::target_vpc_subnet_id) / [`set_target_vpc_subnet_id(Option<String>)`](crate::client::fluent_builders::DeleteClientVpnRoute::set_target_vpc_subnet_id): <p>The ID of the target subnet used by the route.</p>
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::DeleteClientVpnRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::DeleteClientVpnRoute::set_destination_cidr_block): <p>The IPv4 address range, in CIDR notation, of the route to be deleted.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteClientVpnRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteClientVpnRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteClientVpnRouteOutput`](crate::output::DeleteClientVpnRouteOutput) with field(s):
    ///   - [`status(Option<ClientVpnRouteStatus>)`](crate::output::DeleteClientVpnRouteOutput::status): <p>The current state of the route.</p>
    /// - On failure, responds with [`SdkError<DeleteClientVpnRouteError>`](crate::error::DeleteClientVpnRouteError)
    pub fn delete_client_vpn_route(&self) -> fluent_builders::DeleteClientVpnRoute {
        fluent_builders::DeleteClientVpnRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteCoipCidr`](crate::client::fluent_builders::DeleteCoipCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::DeleteCoipCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::DeleteCoipCidr::set_cidr): <p> A customer-owned IP address range that you want to delete. </p>
    ///   - [`coip_pool_id(impl Into<String>)`](crate::client::fluent_builders::DeleteCoipCidr::coip_pool_id) / [`set_coip_pool_id(Option<String>)`](crate::client::fluent_builders::DeleteCoipCidr::set_coip_pool_id): <p> The ID of the customer-owned address pool. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteCoipCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteCoipCidr::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteCoipCidrOutput`](crate::output::DeleteCoipCidrOutput) with field(s):
    ///   - [`coip_cidr(Option<CoipCidr>)`](crate::output::DeleteCoipCidrOutput::coip_cidr): <p> Information about a range of customer-owned IP addresses. </p>
    /// - On failure, responds with [`SdkError<DeleteCoipCidrError>`](crate::error::DeleteCoipCidrError)
    pub fn delete_coip_cidr(&self) -> fluent_builders::DeleteCoipCidr {
        fluent_builders::DeleteCoipCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteCoipPool`](crate::client::fluent_builders::DeleteCoipPool) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`coip_pool_id(impl Into<String>)`](crate::client::fluent_builders::DeleteCoipPool::coip_pool_id) / [`set_coip_pool_id(Option<String>)`](crate::client::fluent_builders::DeleteCoipPool::set_coip_pool_id): <p>The ID of the CoIP pool that you want to delete. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteCoipPool::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteCoipPool::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteCoipPoolOutput`](crate::output::DeleteCoipPoolOutput) with field(s):
    ///   - [`coip_pool(Option<CoipPool>)`](crate::output::DeleteCoipPoolOutput::coip_pool): <p>Information about the CoIP address pool.</p>
    /// - On failure, responds with [`SdkError<DeleteCoipPoolError>`](crate::error::DeleteCoipPoolError)
    pub fn delete_coip_pool(&self) -> fluent_builders::DeleteCoipPool {
        fluent_builders::DeleteCoipPool::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteCustomerGateway`](crate::client::fluent_builders::DeleteCustomerGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`customer_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DeleteCustomerGateway::customer_gateway_id) / [`set_customer_gateway_id(Option<String>)`](crate::client::fluent_builders::DeleteCustomerGateway::set_customer_gateway_id): <p>The ID of the customer gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteCustomerGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteCustomerGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteCustomerGatewayOutput`](crate::output::DeleteCustomerGatewayOutput)

    /// - On failure, responds with [`SdkError<DeleteCustomerGatewayError>`](crate::error::DeleteCustomerGatewayError)
    pub fn delete_customer_gateway(&self) -> fluent_builders::DeleteCustomerGateway {
        fluent_builders::DeleteCustomerGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteDhcpOptions`](crate::client::fluent_builders::DeleteDhcpOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dhcp_options_id(impl Into<String>)`](crate::client::fluent_builders::DeleteDhcpOptions::dhcp_options_id) / [`set_dhcp_options_id(Option<String>)`](crate::client::fluent_builders::DeleteDhcpOptions::set_dhcp_options_id): <p>The ID of the DHCP options set.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteDhcpOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteDhcpOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteDhcpOptionsOutput`](crate::output::DeleteDhcpOptionsOutput)

    /// - On failure, responds with [`SdkError<DeleteDhcpOptionsError>`](crate::error::DeleteDhcpOptionsError)
    pub fn delete_dhcp_options(&self) -> fluent_builders::DeleteDhcpOptions {
        fluent_builders::DeleteDhcpOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteEgressOnlyInternetGateway`](crate::client::fluent_builders::DeleteEgressOnlyInternetGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteEgressOnlyInternetGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteEgressOnlyInternetGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`egress_only_internet_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DeleteEgressOnlyInternetGateway::egress_only_internet_gateway_id) / [`set_egress_only_internet_gateway_id(Option<String>)`](crate::client::fluent_builders::DeleteEgressOnlyInternetGateway::set_egress_only_internet_gateway_id): <p>The ID of the egress-only internet gateway.</p>
    /// - On success, responds with [`DeleteEgressOnlyInternetGatewayOutput`](crate::output::DeleteEgressOnlyInternetGatewayOutput) with field(s):
    ///   - [`return_code(Option<bool>)`](crate::output::DeleteEgressOnlyInternetGatewayOutput::return_code): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<DeleteEgressOnlyInternetGatewayError>`](crate::error::DeleteEgressOnlyInternetGatewayError)
    pub fn delete_egress_only_internet_gateway(
        &self,
    ) -> fluent_builders::DeleteEgressOnlyInternetGateway {
        fluent_builders::DeleteEgressOnlyInternetGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteFleets`](crate::client::fluent_builders::DeleteFleets) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteFleets::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteFleets::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`fleet_ids(Vec<String>)`](crate::client::fluent_builders::DeleteFleets::fleet_ids) / [`set_fleet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DeleteFleets::set_fleet_ids): <p>The IDs of the EC2 Fleets.</p>
    ///   - [`terminate_instances(bool)`](crate::client::fluent_builders::DeleteFleets::terminate_instances) / [`set_terminate_instances(Option<bool>)`](crate::client::fluent_builders::DeleteFleets::set_terminate_instances): <p>Indicates whether to terminate the instances when the EC2 Fleet is deleted. The default is to terminate the instances.</p>  <p>To let the instances continue to run after the EC2 Fleet is deleted, specify <code>NoTerminateInstances</code>. Supported only for fleets of type <code>maintain</code> and <code>request</code>.</p>  <p>For <code>instant</code> fleets, you cannot specify <code>NoTerminateInstances</code>. A deleted <code>instant</code> fleet with running instances is not supported.</p>
    /// - On success, responds with [`DeleteFleetsOutput`](crate::output::DeleteFleetsOutput) with field(s):
    ///   - [`successful_fleet_deletions(Option<Vec<DeleteFleetSuccessItem>>)`](crate::output::DeleteFleetsOutput::successful_fleet_deletions): <p>Information about the EC2 Fleets that are successfully deleted.</p>
    ///   - [`unsuccessful_fleet_deletions(Option<Vec<DeleteFleetErrorItem>>)`](crate::output::DeleteFleetsOutput::unsuccessful_fleet_deletions): <p>Information about the EC2 Fleets that are not successfully deleted.</p>
    /// - On failure, responds with [`SdkError<DeleteFleetsError>`](crate::error::DeleteFleetsError)
    pub fn delete_fleets(&self) -> fluent_builders::DeleteFleets {
        fluent_builders::DeleteFleets::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteFlowLogs`](crate::client::fluent_builders::DeleteFlowLogs) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteFlowLogs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteFlowLogs::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`flow_log_ids(Vec<String>)`](crate::client::fluent_builders::DeleteFlowLogs::flow_log_ids) / [`set_flow_log_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DeleteFlowLogs::set_flow_log_ids): <p>One or more flow log IDs.</p>  <p>Constraint: Maximum of 1000 flow log IDs.</p>
    /// - On success, responds with [`DeleteFlowLogsOutput`](crate::output::DeleteFlowLogsOutput) with field(s):
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::DeleteFlowLogsOutput::unsuccessful): <p>Information about the flow logs that could not be deleted successfully.</p>
    /// - On failure, responds with [`SdkError<DeleteFlowLogsError>`](crate::error::DeleteFlowLogsError)
    pub fn delete_flow_logs(&self) -> fluent_builders::DeleteFlowLogs {
        fluent_builders::DeleteFlowLogs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteFpgaImage`](crate::client::fluent_builders::DeleteFpgaImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteFpgaImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteFpgaImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`fpga_image_id(impl Into<String>)`](crate::client::fluent_builders::DeleteFpgaImage::fpga_image_id) / [`set_fpga_image_id(Option<String>)`](crate::client::fluent_builders::DeleteFpgaImage::set_fpga_image_id): <p>The ID of the AFI.</p>
    /// - On success, responds with [`DeleteFpgaImageOutput`](crate::output::DeleteFpgaImageOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DeleteFpgaImageOutput::return): <p>Is <code>true</code> if the request succeeds, and an error otherwise.</p>
    /// - On failure, responds with [`SdkError<DeleteFpgaImageError>`](crate::error::DeleteFpgaImageError)
    pub fn delete_fpga_image(&self) -> fluent_builders::DeleteFpgaImage {
        fluent_builders::DeleteFpgaImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteInstanceEventWindow`](crate::client::fluent_builders::DeleteInstanceEventWindow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteInstanceEventWindow::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteInstanceEventWindow::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`force_delete(bool)`](crate::client::fluent_builders::DeleteInstanceEventWindow::force_delete) / [`set_force_delete(Option<bool>)`](crate::client::fluent_builders::DeleteInstanceEventWindow::set_force_delete): <p>Specify <code>true</code> to force delete the event window. Use the force delete parameter if the event window is currently associated with targets.</p>
    ///   - [`instance_event_window_id(impl Into<String>)`](crate::client::fluent_builders::DeleteInstanceEventWindow::instance_event_window_id) / [`set_instance_event_window_id(Option<String>)`](crate::client::fluent_builders::DeleteInstanceEventWindow::set_instance_event_window_id): <p>The ID of the event window.</p>
    /// - On success, responds with [`DeleteInstanceEventWindowOutput`](crate::output::DeleteInstanceEventWindowOutput) with field(s):
    ///   - [`instance_event_window_state(Option<InstanceEventWindowStateChange>)`](crate::output::DeleteInstanceEventWindowOutput::instance_event_window_state): <p>The state of the event window.</p>
    /// - On failure, responds with [`SdkError<DeleteInstanceEventWindowError>`](crate::error::DeleteInstanceEventWindowError)
    pub fn delete_instance_event_window(&self) -> fluent_builders::DeleteInstanceEventWindow {
        fluent_builders::DeleteInstanceEventWindow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteInternetGateway`](crate::client::fluent_builders::DeleteInternetGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteInternetGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteInternetGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`internet_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DeleteInternetGateway::internet_gateway_id) / [`set_internet_gateway_id(Option<String>)`](crate::client::fluent_builders::DeleteInternetGateway::set_internet_gateway_id): <p>The ID of the internet gateway.</p>
    /// - On success, responds with [`DeleteInternetGatewayOutput`](crate::output::DeleteInternetGatewayOutput)

    /// - On failure, responds with [`SdkError<DeleteInternetGatewayError>`](crate::error::DeleteInternetGatewayError)
    pub fn delete_internet_gateway(&self) -> fluent_builders::DeleteInternetGateway {
        fluent_builders::DeleteInternetGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteIpam`](crate::client::fluent_builders::DeleteIpam) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteIpam::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteIpam::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_id(impl Into<String>)`](crate::client::fluent_builders::DeleteIpam::ipam_id) / [`set_ipam_id(Option<String>)`](crate::client::fluent_builders::DeleteIpam::set_ipam_id): <p>The ID of the IPAM to delete.</p>
    ///   - [`cascade(bool)`](crate::client::fluent_builders::DeleteIpam::cascade) / [`set_cascade(Option<bool>)`](crate::client::fluent_builders::DeleteIpam::set_cascade): <p>Enables you to quickly delete an IPAM, private scopes, pools in private scopes, and any allocations in the pools in private scopes. You cannot delete the IPAM with this option if there is a pool in your public scope. If you use this option, IPAM does the following:</p>  <ul>   <li> <p>Deallocates any CIDRs allocated to VPC resources (such as VPCs) in pools in private scopes.</p> <note>     <p>No VPC resources are deleted as a result of enabling this option. The CIDR associated with the resource will no longer be allocated from an IPAM pool, but the CIDR itself will remain unchanged.</p>    </note> </li>   <li> <p>Deprovisions all IPv4 CIDRs provisioned to IPAM pools in private scopes.</p> </li>   <li> <p>Deletes all IPAM pools in private scopes.</p> </li>   <li> <p>Deletes all non-default private scopes in the IPAM.</p> </li>   <li> <p>Deletes the default public and private scopes and the IPAM.</p> </li>  </ul>
    /// - On success, responds with [`DeleteIpamOutput`](crate::output::DeleteIpamOutput) with field(s):
    ///   - [`ipam(Option<Ipam>)`](crate::output::DeleteIpamOutput::ipam): <p>Information about the results of the deletion.</p>
    /// - On failure, responds with [`SdkError<DeleteIpamError>`](crate::error::DeleteIpamError)
    pub fn delete_ipam(&self) -> fluent_builders::DeleteIpam {
        fluent_builders::DeleteIpam::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteIpamPool`](crate::client::fluent_builders::DeleteIpamPool) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteIpamPool::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteIpamPool::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::DeleteIpamPool::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::DeleteIpamPool::set_ipam_pool_id): <p>The ID of the pool to delete.</p>
    /// - On success, responds with [`DeleteIpamPoolOutput`](crate::output::DeleteIpamPoolOutput) with field(s):
    ///   - [`ipam_pool(Option<IpamPool>)`](crate::output::DeleteIpamPoolOutput::ipam_pool): <p>Information about the results of the deletion.</p>
    /// - On failure, responds with [`SdkError<DeleteIpamPoolError>`](crate::error::DeleteIpamPoolError)
    pub fn delete_ipam_pool(&self) -> fluent_builders::DeleteIpamPool {
        fluent_builders::DeleteIpamPool::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteIpamScope`](crate::client::fluent_builders::DeleteIpamScope) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteIpamScope::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteIpamScope::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_scope_id(impl Into<String>)`](crate::client::fluent_builders::DeleteIpamScope::ipam_scope_id) / [`set_ipam_scope_id(Option<String>)`](crate::client::fluent_builders::DeleteIpamScope::set_ipam_scope_id): <p>The ID of the scope to delete.</p>
    /// - On success, responds with [`DeleteIpamScopeOutput`](crate::output::DeleteIpamScopeOutput) with field(s):
    ///   - [`ipam_scope(Option<IpamScope>)`](crate::output::DeleteIpamScopeOutput::ipam_scope): <p>Information about the results of the deletion.</p>
    /// - On failure, responds with [`SdkError<DeleteIpamScopeError>`](crate::error::DeleteIpamScopeError)
    pub fn delete_ipam_scope(&self) -> fluent_builders::DeleteIpamScope {
        fluent_builders::DeleteIpamScope::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteKeyPair`](crate::client::fluent_builders::DeleteKeyPair) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`key_name(impl Into<String>)`](crate::client::fluent_builders::DeleteKeyPair::key_name) / [`set_key_name(Option<String>)`](crate::client::fluent_builders::DeleteKeyPair::set_key_name): <p>The name of the key pair.</p>
    ///   - [`key_pair_id(impl Into<String>)`](crate::client::fluent_builders::DeleteKeyPair::key_pair_id) / [`set_key_pair_id(Option<String>)`](crate::client::fluent_builders::DeleteKeyPair::set_key_pair_id): <p>The ID of the key pair.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteKeyPair::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteKeyPair::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteKeyPairOutput`](crate::output::DeleteKeyPairOutput)

    /// - On failure, responds with [`SdkError<DeleteKeyPairError>`](crate::error::DeleteKeyPairError)
    pub fn delete_key_pair(&self) -> fluent_builders::DeleteKeyPair {
        fluent_builders::DeleteKeyPair::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteLaunchTemplate`](crate::client::fluent_builders::DeleteLaunchTemplate) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteLaunchTemplate::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteLaunchTemplate::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`launch_template_id(impl Into<String>)`](crate::client::fluent_builders::DeleteLaunchTemplate::launch_template_id) / [`set_launch_template_id(Option<String>)`](crate::client::fluent_builders::DeleteLaunchTemplate::set_launch_template_id): <p>The ID of the launch template.</p>  <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
    ///   - [`launch_template_name(impl Into<String>)`](crate::client::fluent_builders::DeleteLaunchTemplate::launch_template_name) / [`set_launch_template_name(Option<String>)`](crate::client::fluent_builders::DeleteLaunchTemplate::set_launch_template_name): <p>The name of the launch template.</p>  <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
    /// - On success, responds with [`DeleteLaunchTemplateOutput`](crate::output::DeleteLaunchTemplateOutput) with field(s):
    ///   - [`launch_template(Option<LaunchTemplate>)`](crate::output::DeleteLaunchTemplateOutput::launch_template): <p>Information about the launch template.</p>
    /// - On failure, responds with [`SdkError<DeleteLaunchTemplateError>`](crate::error::DeleteLaunchTemplateError)
    pub fn delete_launch_template(&self) -> fluent_builders::DeleteLaunchTemplate {
        fluent_builders::DeleteLaunchTemplate::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteLaunchTemplateVersions`](crate::client::fluent_builders::DeleteLaunchTemplateVersions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteLaunchTemplateVersions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteLaunchTemplateVersions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`launch_template_id(impl Into<String>)`](crate::client::fluent_builders::DeleteLaunchTemplateVersions::launch_template_id) / [`set_launch_template_id(Option<String>)`](crate::client::fluent_builders::DeleteLaunchTemplateVersions::set_launch_template_id): <p>The ID of the launch template.</p>  <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
    ///   - [`launch_template_name(impl Into<String>)`](crate::client::fluent_builders::DeleteLaunchTemplateVersions::launch_template_name) / [`set_launch_template_name(Option<String>)`](crate::client::fluent_builders::DeleteLaunchTemplateVersions::set_launch_template_name): <p>The name of the launch template.</p>  <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
    ///   - [`versions(Vec<String>)`](crate::client::fluent_builders::DeleteLaunchTemplateVersions::versions) / [`set_versions(Option<Vec<String>>)`](crate::client::fluent_builders::DeleteLaunchTemplateVersions::set_versions): <p>The version numbers of one or more launch template versions to delete.</p>
    /// - On success, responds with [`DeleteLaunchTemplateVersionsOutput`](crate::output::DeleteLaunchTemplateVersionsOutput) with field(s):
    ///   - [`successfully_deleted_launch_template_versions(Option<Vec<DeleteLaunchTemplateVersionsResponseSuccessItem>>)`](crate::output::DeleteLaunchTemplateVersionsOutput::successfully_deleted_launch_template_versions): <p>Information about the launch template versions that were successfully deleted.</p>
    ///   - [`unsuccessfully_deleted_launch_template_versions(Option<Vec<DeleteLaunchTemplateVersionsResponseErrorItem>>)`](crate::output::DeleteLaunchTemplateVersionsOutput::unsuccessfully_deleted_launch_template_versions): <p>Information about the launch template versions that could not be deleted.</p>
    /// - On failure, responds with [`SdkError<DeleteLaunchTemplateVersionsError>`](crate::error::DeleteLaunchTemplateVersionsError)
    pub fn delete_launch_template_versions(&self) -> fluent_builders::DeleteLaunchTemplateVersions {
        fluent_builders::DeleteLaunchTemplateVersions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteLocalGatewayRoute`](crate::client::fluent_builders::DeleteLocalGatewayRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRoute::set_destination_cidr_block): <p>The CIDR range for the route. This must match the CIDR for the route exactly.</p>
    ///   - [`local_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRoute::local_gateway_route_table_id) / [`set_local_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRoute::set_local_gateway_route_table_id): <p>The ID of the local gateway route table.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteLocalGatewayRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteLocalGatewayRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteLocalGatewayRouteOutput`](crate::output::DeleteLocalGatewayRouteOutput) with field(s):
    ///   - [`route(Option<LocalGatewayRoute>)`](crate::output::DeleteLocalGatewayRouteOutput::route): <p>Information about the route.</p>
    /// - On failure, responds with [`SdkError<DeleteLocalGatewayRouteError>`](crate::error::DeleteLocalGatewayRouteError)
    pub fn delete_local_gateway_route(&self) -> fluent_builders::DeleteLocalGatewayRoute {
        fluent_builders::DeleteLocalGatewayRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteLocalGatewayRouteTable`](crate::client::fluent_builders::DeleteLocalGatewayRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTable::local_gateway_route_table_id) / [`set_local_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTable::set_local_gateway_route_table_id): <p> The ID of the local gateway route table. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteLocalGatewayRouteTableOutput`](crate::output::DeleteLocalGatewayRouteTableOutput) with field(s):
    ///   - [`local_gateway_route_table(Option<LocalGatewayRouteTable>)`](crate::output::DeleteLocalGatewayRouteTableOutput::local_gateway_route_table): <p>Information about the local gateway route table.</p>
    /// - On failure, responds with [`SdkError<DeleteLocalGatewayRouteTableError>`](crate::error::DeleteLocalGatewayRouteTableError)
    pub fn delete_local_gateway_route_table(
        &self,
    ) -> fluent_builders::DeleteLocalGatewayRouteTable {
        fluent_builders::DeleteLocalGatewayRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_virtual_interface_group_association_id(impl Into<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation::local_gateway_route_table_virtual_interface_group_association_id) / [`set_local_gateway_route_table_virtual_interface_group_association_id(Option<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation::set_local_gateway_route_table_virtual_interface_group_association_id): <p> The ID of the local gateway route table virtual interface group association. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationOutput`](crate::output::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationOutput) with field(s):
    ///   - [`local_gateway_route_table_virtual_interface_group_association(Option<LocalGatewayRouteTableVirtualInterfaceGroupAssociation>)`](crate::output::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationOutput::local_gateway_route_table_virtual_interface_group_association): <p>Information about the association.</p>
    /// - On failure, responds with [`SdkError<DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationError>`](crate::error::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationError)
    pub fn delete_local_gateway_route_table_virtual_interface_group_association(
        &self,
    ) -> fluent_builders::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation {
        fluent_builders::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation::new(
            self.handle.clone(),
        )
    }
    /// Constructs a fluent builder for the [`DeleteLocalGatewayRouteTableVpcAssociation`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVpcAssociation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_vpc_association_id(impl Into<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVpcAssociation::local_gateway_route_table_vpc_association_id) / [`set_local_gateway_route_table_vpc_association_id(Option<String>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVpcAssociation::set_local_gateway_route_table_vpc_association_id): <p>The ID of the association.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVpcAssociation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteLocalGatewayRouteTableVpcAssociation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteLocalGatewayRouteTableVpcAssociationOutput`](crate::output::DeleteLocalGatewayRouteTableVpcAssociationOutput) with field(s):
    ///   - [`local_gateway_route_table_vpc_association(Option<LocalGatewayRouteTableVpcAssociation>)`](crate::output::DeleteLocalGatewayRouteTableVpcAssociationOutput::local_gateway_route_table_vpc_association): <p>Information about the association.</p>
    /// - On failure, responds with [`SdkError<DeleteLocalGatewayRouteTableVpcAssociationError>`](crate::error::DeleteLocalGatewayRouteTableVpcAssociationError)
    pub fn delete_local_gateway_route_table_vpc_association(
        &self,
    ) -> fluent_builders::DeleteLocalGatewayRouteTableVpcAssociation {
        fluent_builders::DeleteLocalGatewayRouteTableVpcAssociation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteManagedPrefixList`](crate::client::fluent_builders::DeleteManagedPrefixList) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteManagedPrefixList::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteManagedPrefixList::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::DeleteManagedPrefixList::prefix_list_id) / [`set_prefix_list_id(Option<String>)`](crate::client::fluent_builders::DeleteManagedPrefixList::set_prefix_list_id): <p>The ID of the prefix list.</p>
    /// - On success, responds with [`DeleteManagedPrefixListOutput`](crate::output::DeleteManagedPrefixListOutput) with field(s):
    ///   - [`prefix_list(Option<ManagedPrefixList>)`](crate::output::DeleteManagedPrefixListOutput::prefix_list): <p>Information about the prefix list.</p>
    /// - On failure, responds with [`SdkError<DeleteManagedPrefixListError>`](crate::error::DeleteManagedPrefixListError)
    pub fn delete_managed_prefix_list(&self) -> fluent_builders::DeleteManagedPrefixList {
        fluent_builders::DeleteManagedPrefixList::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNatGateway`](crate::client::fluent_builders::DeleteNatGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNatGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNatGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`nat_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNatGateway::nat_gateway_id) / [`set_nat_gateway_id(Option<String>)`](crate::client::fluent_builders::DeleteNatGateway::set_nat_gateway_id): <p>The ID of the NAT gateway.</p>
    /// - On success, responds with [`DeleteNatGatewayOutput`](crate::output::DeleteNatGatewayOutput) with field(s):
    ///   - [`nat_gateway_id(Option<String>)`](crate::output::DeleteNatGatewayOutput::nat_gateway_id): <p>The ID of the NAT gateway.</p>
    /// - On failure, responds with [`SdkError<DeleteNatGatewayError>`](crate::error::DeleteNatGatewayError)
    pub fn delete_nat_gateway(&self) -> fluent_builders::DeleteNatGateway {
        fluent_builders::DeleteNatGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNetworkAcl`](crate::client::fluent_builders::DeleteNetworkAcl) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNetworkAcl::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkAcl::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_acl_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNetworkAcl::network_acl_id) / [`set_network_acl_id(Option<String>)`](crate::client::fluent_builders::DeleteNetworkAcl::set_network_acl_id): <p>The ID of the network ACL.</p>
    /// - On success, responds with [`DeleteNetworkAclOutput`](crate::output::DeleteNetworkAclOutput)

    /// - On failure, responds with [`SdkError<DeleteNetworkAclError>`](crate::error::DeleteNetworkAclError)
    pub fn delete_network_acl(&self) -> fluent_builders::DeleteNetworkAcl {
        fluent_builders::DeleteNetworkAcl::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNetworkAclEntry`](crate::client::fluent_builders::DeleteNetworkAclEntry) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNetworkAclEntry::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkAclEntry::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`egress(bool)`](crate::client::fluent_builders::DeleteNetworkAclEntry::egress) / [`set_egress(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkAclEntry::set_egress): <p>Indicates whether the rule is an egress rule.</p>
    ///   - [`network_acl_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNetworkAclEntry::network_acl_id) / [`set_network_acl_id(Option<String>)`](crate::client::fluent_builders::DeleteNetworkAclEntry::set_network_acl_id): <p>The ID of the network ACL.</p>
    ///   - [`rule_number(i32)`](crate::client::fluent_builders::DeleteNetworkAclEntry::rule_number) / [`set_rule_number(Option<i32>)`](crate::client::fluent_builders::DeleteNetworkAclEntry::set_rule_number): <p>The rule number of the entry to delete.</p>
    /// - On success, responds with [`DeleteNetworkAclEntryOutput`](crate::output::DeleteNetworkAclEntryOutput)

    /// - On failure, responds with [`SdkError<DeleteNetworkAclEntryError>`](crate::error::DeleteNetworkAclEntryError)
    pub fn delete_network_acl_entry(&self) -> fluent_builders::DeleteNetworkAclEntry {
        fluent_builders::DeleteNetworkAclEntry::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNetworkInsightsAccessScope`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScope) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScope::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScope::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_insights_access_scope_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScope::network_insights_access_scope_id) / [`set_network_insights_access_scope_id(Option<String>)`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScope::set_network_insights_access_scope_id): <p>The ID of the Network Access Scope.</p>
    /// - On success, responds with [`DeleteNetworkInsightsAccessScopeOutput`](crate::output::DeleteNetworkInsightsAccessScopeOutput) with field(s):
    ///   - [`network_insights_access_scope_id(Option<String>)`](crate::output::DeleteNetworkInsightsAccessScopeOutput::network_insights_access_scope_id): <p>The ID of the Network Access Scope.</p>
    /// - On failure, responds with [`SdkError<DeleteNetworkInsightsAccessScopeError>`](crate::error::DeleteNetworkInsightsAccessScopeError)
    pub fn delete_network_insights_access_scope(
        &self,
    ) -> fluent_builders::DeleteNetworkInsightsAccessScope {
        fluent_builders::DeleteNetworkInsightsAccessScope::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNetworkInsightsAccessScopeAnalysis`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScopeAnalysis) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_access_scope_analysis_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScopeAnalysis::network_insights_access_scope_analysis_id) / [`set_network_insights_access_scope_analysis_id(Option<String>)`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScopeAnalysis::set_network_insights_access_scope_analysis_id): <p>The ID of the Network Access Scope analysis.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScopeAnalysis::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkInsightsAccessScopeAnalysis::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteNetworkInsightsAccessScopeAnalysisOutput`](crate::output::DeleteNetworkInsightsAccessScopeAnalysisOutput) with field(s):
    ///   - [`network_insights_access_scope_analysis_id(Option<String>)`](crate::output::DeleteNetworkInsightsAccessScopeAnalysisOutput::network_insights_access_scope_analysis_id): <p>The ID of the Network Access Scope analysis.</p>
    /// - On failure, responds with [`SdkError<DeleteNetworkInsightsAccessScopeAnalysisError>`](crate::error::DeleteNetworkInsightsAccessScopeAnalysisError)
    pub fn delete_network_insights_access_scope_analysis(
        &self,
    ) -> fluent_builders::DeleteNetworkInsightsAccessScopeAnalysis {
        fluent_builders::DeleteNetworkInsightsAccessScopeAnalysis::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNetworkInsightsAnalysis`](crate::client::fluent_builders::DeleteNetworkInsightsAnalysis) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNetworkInsightsAnalysis::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkInsightsAnalysis::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_insights_analysis_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNetworkInsightsAnalysis::network_insights_analysis_id) / [`set_network_insights_analysis_id(Option<String>)`](crate::client::fluent_builders::DeleteNetworkInsightsAnalysis::set_network_insights_analysis_id): <p>The ID of the network insights analysis.</p>
    /// - On success, responds with [`DeleteNetworkInsightsAnalysisOutput`](crate::output::DeleteNetworkInsightsAnalysisOutput) with field(s):
    ///   - [`network_insights_analysis_id(Option<String>)`](crate::output::DeleteNetworkInsightsAnalysisOutput::network_insights_analysis_id): <p>The ID of the network insights analysis.</p>
    /// - On failure, responds with [`SdkError<DeleteNetworkInsightsAnalysisError>`](crate::error::DeleteNetworkInsightsAnalysisError)
    pub fn delete_network_insights_analysis(
        &self,
    ) -> fluent_builders::DeleteNetworkInsightsAnalysis {
        fluent_builders::DeleteNetworkInsightsAnalysis::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNetworkInsightsPath`](crate::client::fluent_builders::DeleteNetworkInsightsPath) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNetworkInsightsPath::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkInsightsPath::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_insights_path_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNetworkInsightsPath::network_insights_path_id) / [`set_network_insights_path_id(Option<String>)`](crate::client::fluent_builders::DeleteNetworkInsightsPath::set_network_insights_path_id): <p>The ID of the path.</p>
    /// - On success, responds with [`DeleteNetworkInsightsPathOutput`](crate::output::DeleteNetworkInsightsPathOutput) with field(s):
    ///   - [`network_insights_path_id(Option<String>)`](crate::output::DeleteNetworkInsightsPathOutput::network_insights_path_id): <p>The ID of the path.</p>
    /// - On failure, responds with [`SdkError<DeleteNetworkInsightsPathError>`](crate::error::DeleteNetworkInsightsPathError)
    pub fn delete_network_insights_path(&self) -> fluent_builders::DeleteNetworkInsightsPath {
        fluent_builders::DeleteNetworkInsightsPath::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNetworkInterface`](crate::client::fluent_builders::DeleteNetworkInterface) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNetworkInterface::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkInterface::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNetworkInterface::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::DeleteNetworkInterface::set_network_interface_id): <p>The ID of the network interface.</p>
    /// - On success, responds with [`DeleteNetworkInterfaceOutput`](crate::output::DeleteNetworkInterfaceOutput)

    /// - On failure, responds with [`SdkError<DeleteNetworkInterfaceError>`](crate::error::DeleteNetworkInterfaceError)
    pub fn delete_network_interface(&self) -> fluent_builders::DeleteNetworkInterface {
        fluent_builders::DeleteNetworkInterface::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteNetworkInterfacePermission`](crate::client::fluent_builders::DeleteNetworkInterfacePermission) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_interface_permission_id(impl Into<String>)`](crate::client::fluent_builders::DeleteNetworkInterfacePermission::network_interface_permission_id) / [`set_network_interface_permission_id(Option<String>)`](crate::client::fluent_builders::DeleteNetworkInterfacePermission::set_network_interface_permission_id): <p>The ID of the network interface permission.</p>
    ///   - [`force(bool)`](crate::client::fluent_builders::DeleteNetworkInterfacePermission::force) / [`set_force(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkInterfacePermission::set_force): <p>Specify <code>true</code> to remove the permission even if the network interface is attached to an instance.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteNetworkInterfacePermission::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteNetworkInterfacePermission::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteNetworkInterfacePermissionOutput`](crate::output::DeleteNetworkInterfacePermissionOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DeleteNetworkInterfacePermissionOutput::return): <p>Returns <code>true</code> if the request succeeds, otherwise returns an error.</p>
    /// - On failure, responds with [`SdkError<DeleteNetworkInterfacePermissionError>`](crate::error::DeleteNetworkInterfacePermissionError)
    pub fn delete_network_interface_permission(
        &self,
    ) -> fluent_builders::DeleteNetworkInterfacePermission {
        fluent_builders::DeleteNetworkInterfacePermission::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeletePlacementGroup`](crate::client::fluent_builders::DeletePlacementGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeletePlacementGroup::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeletePlacementGroup::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::DeletePlacementGroup::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::DeletePlacementGroup::set_group_name): <p>The name of the placement group.</p>
    /// - On success, responds with [`DeletePlacementGroupOutput`](crate::output::DeletePlacementGroupOutput)

    /// - On failure, responds with [`SdkError<DeletePlacementGroupError>`](crate::error::DeletePlacementGroupError)
    pub fn delete_placement_group(&self) -> fluent_builders::DeletePlacementGroup {
        fluent_builders::DeletePlacementGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeletePublicIpv4Pool`](crate::client::fluent_builders::DeletePublicIpv4Pool) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeletePublicIpv4Pool::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeletePublicIpv4Pool::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`pool_id(impl Into<String>)`](crate::client::fluent_builders::DeletePublicIpv4Pool::pool_id) / [`set_pool_id(Option<String>)`](crate::client::fluent_builders::DeletePublicIpv4Pool::set_pool_id): <p>The ID of the public IPv4 pool you want to delete.</p>
    /// - On success, responds with [`DeletePublicIpv4PoolOutput`](crate::output::DeletePublicIpv4PoolOutput) with field(s):
    ///   - [`return_value(Option<bool>)`](crate::output::DeletePublicIpv4PoolOutput::return_value): <p>Information about the result of deleting the public IPv4 pool.</p>
    /// - On failure, responds with [`SdkError<DeletePublicIpv4PoolError>`](crate::error::DeletePublicIpv4PoolError)
    pub fn delete_public_ipv4_pool(&self) -> fluent_builders::DeletePublicIpv4Pool {
        fluent_builders::DeletePublicIpv4Pool::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteQueuedReservedInstances`](crate::client::fluent_builders::DeleteQueuedReservedInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteQueuedReservedInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteQueuedReservedInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`reserved_instances_ids(Vec<String>)`](crate::client::fluent_builders::DeleteQueuedReservedInstances::reserved_instances_ids) / [`set_reserved_instances_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DeleteQueuedReservedInstances::set_reserved_instances_ids): <p>The IDs of the Reserved Instances.</p>
    /// - On success, responds with [`DeleteQueuedReservedInstancesOutput`](crate::output::DeleteQueuedReservedInstancesOutput) with field(s):
    ///   - [`successful_queued_purchase_deletions(Option<Vec<SuccessfulQueuedPurchaseDeletion>>)`](crate::output::DeleteQueuedReservedInstancesOutput::successful_queued_purchase_deletions): <p>Information about the queued purchases that were successfully deleted.</p>
    ///   - [`failed_queued_purchase_deletions(Option<Vec<FailedQueuedPurchaseDeletion>>)`](crate::output::DeleteQueuedReservedInstancesOutput::failed_queued_purchase_deletions): <p>Information about the queued purchases that could not be deleted.</p>
    /// - On failure, responds with [`SdkError<DeleteQueuedReservedInstancesError>`](crate::error::DeleteQueuedReservedInstancesError)
    pub fn delete_queued_reserved_instances(
        &self,
    ) -> fluent_builders::DeleteQueuedReservedInstances {
        fluent_builders::DeleteQueuedReservedInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteRoute`](crate::client::fluent_builders::DeleteRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::DeleteRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::DeleteRoute::set_destination_cidr_block): <p>The IPv4 CIDR range for the route. The value you specify must match the CIDR for the route exactly.</p>
    ///   - [`destination_ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::DeleteRoute::destination_ipv6_cidr_block) / [`set_destination_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::DeleteRoute::set_destination_ipv6_cidr_block): <p>The IPv6 CIDR range for the route. The value you specify must match the CIDR for the route exactly.</p>
    ///   - [`destination_prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::DeleteRoute::destination_prefix_list_id) / [`set_destination_prefix_list_id(Option<String>)`](crate::client::fluent_builders::DeleteRoute::set_destination_prefix_list_id): <p>The ID of the prefix list for the route.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`route_table_id(impl Into<String>)`](crate::client::fluent_builders::DeleteRoute::route_table_id) / [`set_route_table_id(Option<String>)`](crate::client::fluent_builders::DeleteRoute::set_route_table_id): <p>The ID of the route table.</p>
    /// - On success, responds with [`DeleteRouteOutput`](crate::output::DeleteRouteOutput)

    /// - On failure, responds with [`SdkError<DeleteRouteError>`](crate::error::DeleteRouteError)
    pub fn delete_route(&self) -> fluent_builders::DeleteRoute {
        fluent_builders::DeleteRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteRouteTable`](crate::client::fluent_builders::DeleteRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`route_table_id(impl Into<String>)`](crate::client::fluent_builders::DeleteRouteTable::route_table_id) / [`set_route_table_id(Option<String>)`](crate::client::fluent_builders::DeleteRouteTable::set_route_table_id): <p>The ID of the route table.</p>
    /// - On success, responds with [`DeleteRouteTableOutput`](crate::output::DeleteRouteTableOutput)

    /// - On failure, responds with [`SdkError<DeleteRouteTableError>`](crate::error::DeleteRouteTableError)
    pub fn delete_route_table(&self) -> fluent_builders::DeleteRouteTable {
        fluent_builders::DeleteRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteSecurityGroup`](crate::client::fluent_builders::DeleteSecurityGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::DeleteSecurityGroup::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::DeleteSecurityGroup::set_group_id): <p>The ID of the security group. Required for a nondefault VPC.</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::DeleteSecurityGroup::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::DeleteSecurityGroup::set_group_name): <p>[EC2-Classic, default VPC] The name of the security group. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, you must specify the security group ID.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteSecurityGroup::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteSecurityGroup::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteSecurityGroupOutput`](crate::output::DeleteSecurityGroupOutput)

    /// - On failure, responds with [`SdkError<DeleteSecurityGroupError>`](crate::error::DeleteSecurityGroupError)
    pub fn delete_security_group(&self) -> fluent_builders::DeleteSecurityGroup {
        fluent_builders::DeleteSecurityGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteSnapshot`](crate::client::fluent_builders::DeleteSnapshot) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::DeleteSnapshot::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::DeleteSnapshot::set_snapshot_id): <p>The ID of the EBS snapshot.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteSnapshot::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteSnapshot::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteSnapshotOutput`](crate::output::DeleteSnapshotOutput)

    /// - On failure, responds with [`SdkError<DeleteSnapshotError>`](crate::error::DeleteSnapshotError)
    pub fn delete_snapshot(&self) -> fluent_builders::DeleteSnapshot {
        fluent_builders::DeleteSnapshot::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteSpotDatafeedSubscription`](crate::client::fluent_builders::DeleteSpotDatafeedSubscription) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteSpotDatafeedSubscription::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteSpotDatafeedSubscription::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteSpotDatafeedSubscriptionOutput`](crate::output::DeleteSpotDatafeedSubscriptionOutput)

    /// - On failure, responds with [`SdkError<DeleteSpotDatafeedSubscriptionError>`](crate::error::DeleteSpotDatafeedSubscriptionError)
    pub fn delete_spot_datafeed_subscription(
        &self,
    ) -> fluent_builders::DeleteSpotDatafeedSubscription {
        fluent_builders::DeleteSpotDatafeedSubscription::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteSubnet`](crate::client::fluent_builders::DeleteSubnet) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::DeleteSubnet::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::DeleteSubnet::set_subnet_id): <p>The ID of the subnet.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteSubnet::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteSubnet::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteSubnetOutput`](crate::output::DeleteSubnetOutput)

    /// - On failure, responds with [`SdkError<DeleteSubnetError>`](crate::error::DeleteSubnetError)
    pub fn delete_subnet(&self) -> fluent_builders::DeleteSubnet {
        fluent_builders::DeleteSubnet::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteSubnetCidrReservation`](crate::client::fluent_builders::DeleteSubnetCidrReservation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`subnet_cidr_reservation_id(impl Into<String>)`](crate::client::fluent_builders::DeleteSubnetCidrReservation::subnet_cidr_reservation_id) / [`set_subnet_cidr_reservation_id(Option<String>)`](crate::client::fluent_builders::DeleteSubnetCidrReservation::set_subnet_cidr_reservation_id): <p>The ID of the subnet CIDR reservation.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteSubnetCidrReservation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteSubnetCidrReservation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteSubnetCidrReservationOutput`](crate::output::DeleteSubnetCidrReservationOutput) with field(s):
    ///   - [`deleted_subnet_cidr_reservation(Option<SubnetCidrReservation>)`](crate::output::DeleteSubnetCidrReservationOutput::deleted_subnet_cidr_reservation): <p>Information about the deleted subnet CIDR reservation.</p>
    /// - On failure, responds with [`SdkError<DeleteSubnetCidrReservationError>`](crate::error::DeleteSubnetCidrReservationError)
    pub fn delete_subnet_cidr_reservation(&self) -> fluent_builders::DeleteSubnetCidrReservation {
        fluent_builders::DeleteSubnetCidrReservation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTags`](crate::client::fluent_builders::DeleteTags) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTags::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTags::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`resources(Vec<String>)`](crate::client::fluent_builders::DeleteTags::resources) / [`set_resources(Option<Vec<String>>)`](crate::client::fluent_builders::DeleteTags::set_resources): <p>The IDs of the resources, separated by spaces.</p>  <p>Constraints: Up to 1000 resource IDs. We recommend breaking up this request into smaller batches.</p>
    ///   - [`tags(Vec<Tag>)`](crate::client::fluent_builders::DeleteTags::tags) / [`set_tags(Option<Vec<Tag>>)`](crate::client::fluent_builders::DeleteTags::set_tags): <p>The tags to delete. Specify a tag key and an optional tag value to delete specific tags. If you specify a tag key without a tag value, we delete any tag with this key regardless of its value. If you specify a tag key with an empty string as the tag value, we delete the tag only if its value is an empty string.</p>  <p>If you omit this parameter, we delete all user-defined tags for the specified resources. We do not delete Amazon Web Services-generated tags (tags that have the <code>aws:</code> prefix).</p>  <p>Constraints: Up to 1000 tags.</p>
    /// - On success, responds with [`DeleteTagsOutput`](crate::output::DeleteTagsOutput)

    /// - On failure, responds with [`SdkError<DeleteTagsError>`](crate::error::DeleteTagsError)
    pub fn delete_tags(&self) -> fluent_builders::DeleteTags {
        fluent_builders::DeleteTags::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTrafficMirrorFilter`](crate::client::fluent_builders::DeleteTrafficMirrorFilter) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_filter_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTrafficMirrorFilter::traffic_mirror_filter_id) / [`set_traffic_mirror_filter_id(Option<String>)`](crate::client::fluent_builders::DeleteTrafficMirrorFilter::set_traffic_mirror_filter_id): <p>The ID of the Traffic Mirror filter.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTrafficMirrorFilter::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTrafficMirrorFilter::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTrafficMirrorFilterOutput`](crate::output::DeleteTrafficMirrorFilterOutput) with field(s):
    ///   - [`traffic_mirror_filter_id(Option<String>)`](crate::output::DeleteTrafficMirrorFilterOutput::traffic_mirror_filter_id): <p>The ID of the Traffic Mirror filter.</p>
    /// - On failure, responds with [`SdkError<DeleteTrafficMirrorFilterError>`](crate::error::DeleteTrafficMirrorFilterError)
    pub fn delete_traffic_mirror_filter(&self) -> fluent_builders::DeleteTrafficMirrorFilter {
        fluent_builders::DeleteTrafficMirrorFilter::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTrafficMirrorFilterRule`](crate::client::fluent_builders::DeleteTrafficMirrorFilterRule) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_filter_rule_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTrafficMirrorFilterRule::traffic_mirror_filter_rule_id) / [`set_traffic_mirror_filter_rule_id(Option<String>)`](crate::client::fluent_builders::DeleteTrafficMirrorFilterRule::set_traffic_mirror_filter_rule_id): <p>The ID of the Traffic Mirror rule.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTrafficMirrorFilterRule::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTrafficMirrorFilterRule::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTrafficMirrorFilterRuleOutput`](crate::output::DeleteTrafficMirrorFilterRuleOutput) with field(s):
    ///   - [`traffic_mirror_filter_rule_id(Option<String>)`](crate::output::DeleteTrafficMirrorFilterRuleOutput::traffic_mirror_filter_rule_id): <p>The ID of the deleted Traffic Mirror rule.</p>
    /// - On failure, responds with [`SdkError<DeleteTrafficMirrorFilterRuleError>`](crate::error::DeleteTrafficMirrorFilterRuleError)
    pub fn delete_traffic_mirror_filter_rule(
        &self,
    ) -> fluent_builders::DeleteTrafficMirrorFilterRule {
        fluent_builders::DeleteTrafficMirrorFilterRule::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTrafficMirrorSession`](crate::client::fluent_builders::DeleteTrafficMirrorSession) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_session_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTrafficMirrorSession::traffic_mirror_session_id) / [`set_traffic_mirror_session_id(Option<String>)`](crate::client::fluent_builders::DeleteTrafficMirrorSession::set_traffic_mirror_session_id): <p>The ID of the Traffic Mirror session.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTrafficMirrorSession::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTrafficMirrorSession::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTrafficMirrorSessionOutput`](crate::output::DeleteTrafficMirrorSessionOutput) with field(s):
    ///   - [`traffic_mirror_session_id(Option<String>)`](crate::output::DeleteTrafficMirrorSessionOutput::traffic_mirror_session_id): <p>The ID of the deleted Traffic Mirror session.</p>
    /// - On failure, responds with [`SdkError<DeleteTrafficMirrorSessionError>`](crate::error::DeleteTrafficMirrorSessionError)
    pub fn delete_traffic_mirror_session(&self) -> fluent_builders::DeleteTrafficMirrorSession {
        fluent_builders::DeleteTrafficMirrorSession::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTrafficMirrorTarget`](crate::client::fluent_builders::DeleteTrafficMirrorTarget) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_target_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTrafficMirrorTarget::traffic_mirror_target_id) / [`set_traffic_mirror_target_id(Option<String>)`](crate::client::fluent_builders::DeleteTrafficMirrorTarget::set_traffic_mirror_target_id): <p>The ID of the Traffic Mirror target.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTrafficMirrorTarget::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTrafficMirrorTarget::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTrafficMirrorTargetOutput`](crate::output::DeleteTrafficMirrorTargetOutput) with field(s):
    ///   - [`traffic_mirror_target_id(Option<String>)`](crate::output::DeleteTrafficMirrorTargetOutput::traffic_mirror_target_id): <p>The ID of the deleted Traffic Mirror target.</p>
    /// - On failure, responds with [`SdkError<DeleteTrafficMirrorTargetError>`](crate::error::DeleteTrafficMirrorTargetError)
    pub fn delete_traffic_mirror_target(&self) -> fluent_builders::DeleteTrafficMirrorTarget {
        fluent_builders::DeleteTrafficMirrorTarget::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGateway`](crate::client::fluent_builders::DeleteTransitGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGateway::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGateway::set_transit_gateway_id): <p>The ID of the transit gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayOutput`](crate::output::DeleteTransitGatewayOutput) with field(s):
    ///   - [`transit_gateway(Option<TransitGateway>)`](crate::output::DeleteTransitGatewayOutput::transit_gateway): <p>Information about the deleted transit gateway.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayError>`](crate::error::DeleteTransitGatewayError)
    pub fn delete_transit_gateway(&self) -> fluent_builders::DeleteTransitGateway {
        fluent_builders::DeleteTransitGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayConnect`](crate::client::fluent_builders::DeleteTransitGatewayConnect) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayConnect::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayConnect::set_transit_gateway_attachment_id): <p>The ID of the Connect attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayConnect::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayConnect::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayConnectOutput`](crate::output::DeleteTransitGatewayConnectOutput) with field(s):
    ///   - [`transit_gateway_connect(Option<TransitGatewayConnect>)`](crate::output::DeleteTransitGatewayConnectOutput::transit_gateway_connect): <p>Information about the deleted Connect attachment.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayConnectError>`](crate::error::DeleteTransitGatewayConnectError)
    pub fn delete_transit_gateway_connect(&self) -> fluent_builders::DeleteTransitGatewayConnect {
        fluent_builders::DeleteTransitGatewayConnect::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayConnectPeer`](crate::client::fluent_builders::DeleteTransitGatewayConnectPeer) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_connect_peer_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayConnectPeer::transit_gateway_connect_peer_id) / [`set_transit_gateway_connect_peer_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayConnectPeer::set_transit_gateway_connect_peer_id): <p>The ID of the Connect peer.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayConnectPeer::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayConnectPeer::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayConnectPeerOutput`](crate::output::DeleteTransitGatewayConnectPeerOutput) with field(s):
    ///   - [`transit_gateway_connect_peer(Option<TransitGatewayConnectPeer>)`](crate::output::DeleteTransitGatewayConnectPeerOutput::transit_gateway_connect_peer): <p>Information about the deleted Connect peer.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayConnectPeerError>`](crate::error::DeleteTransitGatewayConnectPeerError)
    pub fn delete_transit_gateway_connect_peer(
        &self,
    ) -> fluent_builders::DeleteTransitGatewayConnectPeer {
        fluent_builders::DeleteTransitGatewayConnectPeer::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayMulticastDomain`](crate::client::fluent_builders::DeleteTransitGatewayMulticastDomain) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayMulticastDomain::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayMulticastDomain::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayMulticastDomain::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayMulticastDomain::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayMulticastDomainOutput`](crate::output::DeleteTransitGatewayMulticastDomainOutput) with field(s):
    ///   - [`transit_gateway_multicast_domain(Option<TransitGatewayMulticastDomain>)`](crate::output::DeleteTransitGatewayMulticastDomainOutput::transit_gateway_multicast_domain): <p>Information about the deleted transit gateway multicast domain.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayMulticastDomainError>`](crate::error::DeleteTransitGatewayMulticastDomainError)
    pub fn delete_transit_gateway_multicast_domain(
        &self,
    ) -> fluent_builders::DeleteTransitGatewayMulticastDomain {
        fluent_builders::DeleteTransitGatewayMulticastDomain::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayPeeringAttachment`](crate::client::fluent_builders::DeleteTransitGatewayPeeringAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayPeeringAttachment::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayPeeringAttachment::set_transit_gateway_attachment_id): <p>The ID of the transit gateway peering attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayPeeringAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayPeeringAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayPeeringAttachmentOutput`](crate::output::DeleteTransitGatewayPeeringAttachmentOutput) with field(s):
    ///   - [`transit_gateway_peering_attachment(Option<TransitGatewayPeeringAttachment>)`](crate::output::DeleteTransitGatewayPeeringAttachmentOutput::transit_gateway_peering_attachment): <p>The transit gateway peering attachment.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayPeeringAttachmentError>`](crate::error::DeleteTransitGatewayPeeringAttachmentError)
    pub fn delete_transit_gateway_peering_attachment(
        &self,
    ) -> fluent_builders::DeleteTransitGatewayPeeringAttachment {
        fluent_builders::DeleteTransitGatewayPeeringAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayPolicyTable`](crate::client::fluent_builders::DeleteTransitGatewayPolicyTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_policy_table_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayPolicyTable::transit_gateway_policy_table_id) / [`set_transit_gateway_policy_table_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayPolicyTable::set_transit_gateway_policy_table_id): <p>The transit gateway policy table to delete.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayPolicyTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayPolicyTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayPolicyTableOutput`](crate::output::DeleteTransitGatewayPolicyTableOutput) with field(s):
    ///   - [`transit_gateway_policy_table(Option<TransitGatewayPolicyTable>)`](crate::output::DeleteTransitGatewayPolicyTableOutput::transit_gateway_policy_table): <p>Provides details about the deleted transit gateway policy table.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayPolicyTableError>`](crate::error::DeleteTransitGatewayPolicyTableError)
    pub fn delete_transit_gateway_policy_table(
        &self,
    ) -> fluent_builders::DeleteTransitGatewayPolicyTable {
        fluent_builders::DeleteTransitGatewayPolicyTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayPrefixListReference`](crate::client::fluent_builders::DeleteTransitGatewayPrefixListReference) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayPrefixListReference::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayPrefixListReference::set_transit_gateway_route_table_id): <p>The ID of the route table.</p>
    ///   - [`prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayPrefixListReference::prefix_list_id) / [`set_prefix_list_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayPrefixListReference::set_prefix_list_id): <p>The ID of the prefix list.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayPrefixListReference::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayPrefixListReference::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayPrefixListReferenceOutput`](crate::output::DeleteTransitGatewayPrefixListReferenceOutput) with field(s):
    ///   - [`transit_gateway_prefix_list_reference(Option<TransitGatewayPrefixListReference>)`](crate::output::DeleteTransitGatewayPrefixListReferenceOutput::transit_gateway_prefix_list_reference): <p>Information about the deleted prefix list reference.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayPrefixListReferenceError>`](crate::error::DeleteTransitGatewayPrefixListReferenceError)
    pub fn delete_transit_gateway_prefix_list_reference(
        &self,
    ) -> fluent_builders::DeleteTransitGatewayPrefixListReference {
        fluent_builders::DeleteTransitGatewayPrefixListReference::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayRoute`](crate::client::fluent_builders::DeleteTransitGatewayRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayRoute::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayRoute::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayRoute::set_destination_cidr_block): <p>The CIDR range for the route. This must match the CIDR for the route exactly.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayRouteOutput`](crate::output::DeleteTransitGatewayRouteOutput) with field(s):
    ///   - [`route(Option<TransitGatewayRoute>)`](crate::output::DeleteTransitGatewayRouteOutput::route): <p>Information about the route.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayRouteError>`](crate::error::DeleteTransitGatewayRouteError)
    pub fn delete_transit_gateway_route(&self) -> fluent_builders::DeleteTransitGatewayRoute {
        fluent_builders::DeleteTransitGatewayRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayRouteTable`](crate::client::fluent_builders::DeleteTransitGatewayRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayRouteTable::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayRouteTable::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayRouteTableOutput`](crate::output::DeleteTransitGatewayRouteTableOutput) with field(s):
    ///   - [`transit_gateway_route_table(Option<TransitGatewayRouteTable>)`](crate::output::DeleteTransitGatewayRouteTableOutput::transit_gateway_route_table): <p>Information about the deleted transit gateway route table.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayRouteTableError>`](crate::error::DeleteTransitGatewayRouteTableError)
    pub fn delete_transit_gateway_route_table(
        &self,
    ) -> fluent_builders::DeleteTransitGatewayRouteTable {
        fluent_builders::DeleteTransitGatewayRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayRouteTableAnnouncement`](crate::client::fluent_builders::DeleteTransitGatewayRouteTableAnnouncement) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_announcement_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayRouteTableAnnouncement::transit_gateway_route_table_announcement_id) / [`set_transit_gateway_route_table_announcement_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayRouteTableAnnouncement::set_transit_gateway_route_table_announcement_id): <p>The transit gateway route table ID that's being deleted. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayRouteTableAnnouncement::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayRouteTableAnnouncement::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayRouteTableAnnouncementOutput`](crate::output::DeleteTransitGatewayRouteTableAnnouncementOutput) with field(s):
    ///   - [`transit_gateway_route_table_announcement(Option<TransitGatewayRouteTableAnnouncement>)`](crate::output::DeleteTransitGatewayRouteTableAnnouncementOutput::transit_gateway_route_table_announcement): <p>Provides details about a deleted transit gateway route table.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayRouteTableAnnouncementError>`](crate::error::DeleteTransitGatewayRouteTableAnnouncementError)
    pub fn delete_transit_gateway_route_table_announcement(
        &self,
    ) -> fluent_builders::DeleteTransitGatewayRouteTableAnnouncement {
        fluent_builders::DeleteTransitGatewayRouteTableAnnouncement::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteTransitGatewayVpcAttachment`](crate::client::fluent_builders::DeleteTransitGatewayVpcAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::DeleteTransitGatewayVpcAttachment::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::DeleteTransitGatewayVpcAttachment::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteTransitGatewayVpcAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteTransitGatewayVpcAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteTransitGatewayVpcAttachmentOutput`](crate::output::DeleteTransitGatewayVpcAttachmentOutput) with field(s):
    ///   - [`transit_gateway_vpc_attachment(Option<TransitGatewayVpcAttachment>)`](crate::output::DeleteTransitGatewayVpcAttachmentOutput::transit_gateway_vpc_attachment): <p>Information about the deleted VPC attachment.</p>
    /// - On failure, responds with [`SdkError<DeleteTransitGatewayVpcAttachmentError>`](crate::error::DeleteTransitGatewayVpcAttachmentError)
    pub fn delete_transit_gateway_vpc_attachment(
        &self,
    ) -> fluent_builders::DeleteTransitGatewayVpcAttachment {
        fluent_builders::DeleteTransitGatewayVpcAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVerifiedAccessEndpoint`](crate::client::fluent_builders::DeleteVerifiedAccessEndpoint) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessEndpoint::verified_access_endpoint_id) / [`set_verified_access_endpoint_id(Option<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessEndpoint::set_verified_access_endpoint_id): <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessEndpoint::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessEndpoint::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVerifiedAccessEndpoint::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVerifiedAccessEndpoint::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteVerifiedAccessEndpointOutput`](crate::output::DeleteVerifiedAccessEndpointOutput) with field(s):
    ///   - [`verified_access_endpoint(Option<VerifiedAccessEndpoint>)`](crate::output::DeleteVerifiedAccessEndpointOutput::verified_access_endpoint): <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
    /// - On failure, responds with [`SdkError<DeleteVerifiedAccessEndpointError>`](crate::error::DeleteVerifiedAccessEndpointError)
    pub fn delete_verified_access_endpoint(&self) -> fluent_builders::DeleteVerifiedAccessEndpoint {
        fluent_builders::DeleteVerifiedAccessEndpoint::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVerifiedAccessGroup`](crate::client::fluent_builders::DeleteVerifiedAccessGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_group_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessGroup::verified_access_group_id) / [`set_verified_access_group_id(Option<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessGroup::set_verified_access_group_id): <p>The ID of the Amazon Web Services Verified Access group.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessGroup::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessGroup::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVerifiedAccessGroup::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVerifiedAccessGroup::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteVerifiedAccessGroupOutput`](crate::output::DeleteVerifiedAccessGroupOutput) with field(s):
    ///   - [`verified_access_group(Option<VerifiedAccessGroup>)`](crate::output::DeleteVerifiedAccessGroupOutput::verified_access_group): <p>The ID of the Amazon Web Services Verified Access group.</p>
    /// - On failure, responds with [`SdkError<DeleteVerifiedAccessGroupError>`](crate::error::DeleteVerifiedAccessGroupError)
    pub fn delete_verified_access_group(&self) -> fluent_builders::DeleteVerifiedAccessGroup {
        fluent_builders::DeleteVerifiedAccessGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVerifiedAccessInstance`](crate::client::fluent_builders::DeleteVerifiedAccessInstance) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessInstance::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessInstance::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVerifiedAccessInstance::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVerifiedAccessInstance::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessInstance::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessInstance::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    /// - On success, responds with [`DeleteVerifiedAccessInstanceOutput`](crate::output::DeleteVerifiedAccessInstanceOutput) with field(s):
    ///   - [`verified_access_instance(Option<VerifiedAccessInstance>)`](crate::output::DeleteVerifiedAccessInstanceOutput::verified_access_instance): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    /// - On failure, responds with [`SdkError<DeleteVerifiedAccessInstanceError>`](crate::error::DeleteVerifiedAccessInstanceError)
    pub fn delete_verified_access_instance(&self) -> fluent_builders::DeleteVerifiedAccessInstance {
        fluent_builders::DeleteVerifiedAccessInstance::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVerifiedAccessTrustProvider`](crate::client::fluent_builders::DeleteVerifiedAccessTrustProvider) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_trust_provider_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessTrustProvider::verified_access_trust_provider_id) / [`set_verified_access_trust_provider_id(Option<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessTrustProvider::set_verified_access_trust_provider_id): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVerifiedAccessTrustProvider::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVerifiedAccessTrustProvider::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessTrustProvider::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::DeleteVerifiedAccessTrustProvider::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    /// - On success, responds with [`DeleteVerifiedAccessTrustProviderOutput`](crate::output::DeleteVerifiedAccessTrustProviderOutput) with field(s):
    ///   - [`verified_access_trust_provider(Option<VerifiedAccessTrustProvider>)`](crate::output::DeleteVerifiedAccessTrustProviderOutput::verified_access_trust_provider): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    /// - On failure, responds with [`SdkError<DeleteVerifiedAccessTrustProviderError>`](crate::error::DeleteVerifiedAccessTrustProviderError)
    pub fn delete_verified_access_trust_provider(
        &self,
    ) -> fluent_builders::DeleteVerifiedAccessTrustProvider {
        fluent_builders::DeleteVerifiedAccessTrustProvider::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVolume`](crate::client::fluent_builders::DeleteVolume) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`volume_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVolume::volume_id) / [`set_volume_id(Option<String>)`](crate::client::fluent_builders::DeleteVolume::set_volume_id): <p>The ID of the volume.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVolume::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVolume::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteVolumeOutput`](crate::output::DeleteVolumeOutput)

    /// - On failure, responds with [`SdkError<DeleteVolumeError>`](crate::error::DeleteVolumeError)
    pub fn delete_volume(&self) -> fluent_builders::DeleteVolume {
        fluent_builders::DeleteVolume::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVpc`](crate::client::fluent_builders::DeleteVpc) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVpc::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::DeleteVpc::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVpc::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVpc::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteVpcOutput`](crate::output::DeleteVpcOutput)

    /// - On failure, responds with [`SdkError<DeleteVpcError>`](crate::error::DeleteVpcError)
    pub fn delete_vpc(&self) -> fluent_builders::DeleteVpc {
        fluent_builders::DeleteVpc::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVpcEndpointConnectionNotifications`](crate::client::fluent_builders::DeleteVpcEndpointConnectionNotifications) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVpcEndpointConnectionNotifications::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVpcEndpointConnectionNotifications::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`connection_notification_ids(Vec<String>)`](crate::client::fluent_builders::DeleteVpcEndpointConnectionNotifications::connection_notification_ids) / [`set_connection_notification_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DeleteVpcEndpointConnectionNotifications::set_connection_notification_ids): <p>The IDs of the notifications.</p>
    /// - On success, responds with [`DeleteVpcEndpointConnectionNotificationsOutput`](crate::output::DeleteVpcEndpointConnectionNotificationsOutput) with field(s):
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::DeleteVpcEndpointConnectionNotificationsOutput::unsuccessful): <p>Information about the notifications that could not be deleted successfully.</p>
    /// - On failure, responds with [`SdkError<DeleteVpcEndpointConnectionNotificationsError>`](crate::error::DeleteVpcEndpointConnectionNotificationsError)
    pub fn delete_vpc_endpoint_connection_notifications(
        &self,
    ) -> fluent_builders::DeleteVpcEndpointConnectionNotifications {
        fluent_builders::DeleteVpcEndpointConnectionNotifications::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVpcEndpoints`](crate::client::fluent_builders::DeleteVpcEndpoints) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVpcEndpoints::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVpcEndpoints::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_endpoint_ids(Vec<String>)`](crate::client::fluent_builders::DeleteVpcEndpoints::vpc_endpoint_ids) / [`set_vpc_endpoint_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DeleteVpcEndpoints::set_vpc_endpoint_ids): <p>The IDs of the VPC endpoints.</p>
    /// - On success, responds with [`DeleteVpcEndpointsOutput`](crate::output::DeleteVpcEndpointsOutput) with field(s):
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::DeleteVpcEndpointsOutput::unsuccessful): <p>Information about the VPC endpoints that were not successfully deleted.</p>
    /// - On failure, responds with [`SdkError<DeleteVpcEndpointsError>`](crate::error::DeleteVpcEndpointsError)
    pub fn delete_vpc_endpoints(&self) -> fluent_builders::DeleteVpcEndpoints {
        fluent_builders::DeleteVpcEndpoints::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVpcEndpointServiceConfigurations`](crate::client::fluent_builders::DeleteVpcEndpointServiceConfigurations) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVpcEndpointServiceConfigurations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVpcEndpointServiceConfigurations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_ids(Vec<String>)`](crate::client::fluent_builders::DeleteVpcEndpointServiceConfigurations::service_ids) / [`set_service_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DeleteVpcEndpointServiceConfigurations::set_service_ids): <p>The IDs of the services.</p>
    /// - On success, responds with [`DeleteVpcEndpointServiceConfigurationsOutput`](crate::output::DeleteVpcEndpointServiceConfigurationsOutput) with field(s):
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::DeleteVpcEndpointServiceConfigurationsOutput::unsuccessful): <p>Information about the service configurations that were not deleted, if applicable.</p>
    /// - On failure, responds with [`SdkError<DeleteVpcEndpointServiceConfigurationsError>`](crate::error::DeleteVpcEndpointServiceConfigurationsError)
    pub fn delete_vpc_endpoint_service_configurations(
        &self,
    ) -> fluent_builders::DeleteVpcEndpointServiceConfigurations {
        fluent_builders::DeleteVpcEndpointServiceConfigurations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVpcPeeringConnection`](crate::client::fluent_builders::DeleteVpcPeeringConnection) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVpcPeeringConnection::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVpcPeeringConnection::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_peering_connection_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVpcPeeringConnection::vpc_peering_connection_id) / [`set_vpc_peering_connection_id(Option<String>)`](crate::client::fluent_builders::DeleteVpcPeeringConnection::set_vpc_peering_connection_id): <p>The ID of the VPC peering connection.</p>
    /// - On success, responds with [`DeleteVpcPeeringConnectionOutput`](crate::output::DeleteVpcPeeringConnectionOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DeleteVpcPeeringConnectionOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<DeleteVpcPeeringConnectionError>`](crate::error::DeleteVpcPeeringConnectionError)
    pub fn delete_vpc_peering_connection(&self) -> fluent_builders::DeleteVpcPeeringConnection {
        fluent_builders::DeleteVpcPeeringConnection::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVpnConnection`](crate::client::fluent_builders::DeleteVpnConnection) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpn_connection_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVpnConnection::vpn_connection_id) / [`set_vpn_connection_id(Option<String>)`](crate::client::fluent_builders::DeleteVpnConnection::set_vpn_connection_id): <p>The ID of the VPN connection.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVpnConnection::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVpnConnection::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteVpnConnectionOutput`](crate::output::DeleteVpnConnectionOutput)

    /// - On failure, responds with [`SdkError<DeleteVpnConnectionError>`](crate::error::DeleteVpnConnectionError)
    pub fn delete_vpn_connection(&self) -> fluent_builders::DeleteVpnConnection {
        fluent_builders::DeleteVpnConnection::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVpnConnectionRoute`](crate::client::fluent_builders::DeleteVpnConnectionRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::DeleteVpnConnectionRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::DeleteVpnConnectionRoute::set_destination_cidr_block): <p>The CIDR block associated with the local subnet of the customer network.</p>
    ///   - [`vpn_connection_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVpnConnectionRoute::vpn_connection_id) / [`set_vpn_connection_id(Option<String>)`](crate::client::fluent_builders::DeleteVpnConnectionRoute::set_vpn_connection_id): <p>The ID of the VPN connection.</p>
    /// - On success, responds with [`DeleteVpnConnectionRouteOutput`](crate::output::DeleteVpnConnectionRouteOutput)

    /// - On failure, responds with [`SdkError<DeleteVpnConnectionRouteError>`](crate::error::DeleteVpnConnectionRouteError)
    pub fn delete_vpn_connection_route(&self) -> fluent_builders::DeleteVpnConnectionRoute {
        fluent_builders::DeleteVpnConnectionRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeleteVpnGateway`](crate::client::fluent_builders::DeleteVpnGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpn_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DeleteVpnGateway::vpn_gateway_id) / [`set_vpn_gateway_id(Option<String>)`](crate::client::fluent_builders::DeleteVpnGateway::set_vpn_gateway_id): <p>The ID of the virtual private gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeleteVpnGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeleteVpnGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeleteVpnGatewayOutput`](crate::output::DeleteVpnGatewayOutput)

    /// - On failure, responds with [`SdkError<DeleteVpnGatewayError>`](crate::error::DeleteVpnGatewayError)
    pub fn delete_vpn_gateway(&self) -> fluent_builders::DeleteVpnGateway {
        fluent_builders::DeleteVpnGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeprovisionByoipCidr`](crate::client::fluent_builders::DeprovisionByoipCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::DeprovisionByoipCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::DeprovisionByoipCidr::set_cidr): <p>The address range, in CIDR notation. The prefix must be the same prefix that you specified when you provisioned the address range.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeprovisionByoipCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeprovisionByoipCidr::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeprovisionByoipCidrOutput`](crate::output::DeprovisionByoipCidrOutput) with field(s):
    ///   - [`byoip_cidr(Option<ByoipCidr>)`](crate::output::DeprovisionByoipCidrOutput::byoip_cidr): <p>Information about the address range.</p>
    /// - On failure, responds with [`SdkError<DeprovisionByoipCidrError>`](crate::error::DeprovisionByoipCidrError)
    pub fn deprovision_byoip_cidr(&self) -> fluent_builders::DeprovisionByoipCidr {
        fluent_builders::DeprovisionByoipCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeprovisionIpamPoolCidr`](crate::client::fluent_builders::DeprovisionIpamPoolCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeprovisionIpamPoolCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeprovisionIpamPoolCidr::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::DeprovisionIpamPoolCidr::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::DeprovisionIpamPoolCidr::set_ipam_pool_id): <p>The ID of the pool that has the CIDR you want to deprovision.</p>
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::DeprovisionIpamPoolCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::DeprovisionIpamPoolCidr::set_cidr): <p>The CIDR which you want to deprovision from the pool.</p>
    /// - On success, responds with [`DeprovisionIpamPoolCidrOutput`](crate::output::DeprovisionIpamPoolCidrOutput) with field(s):
    ///   - [`ipam_pool_cidr(Option<IpamPoolCidr>)`](crate::output::DeprovisionIpamPoolCidrOutput::ipam_pool_cidr): <p>The deprovisioned pool CIDR.</p>
    /// - On failure, responds with [`SdkError<DeprovisionIpamPoolCidrError>`](crate::error::DeprovisionIpamPoolCidrError)
    pub fn deprovision_ipam_pool_cidr(&self) -> fluent_builders::DeprovisionIpamPoolCidr {
        fluent_builders::DeprovisionIpamPoolCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeprovisionPublicIpv4PoolCidr`](crate::client::fluent_builders::DeprovisionPublicIpv4PoolCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeprovisionPublicIpv4PoolCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeprovisionPublicIpv4PoolCidr::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`pool_id(impl Into<String>)`](crate::client::fluent_builders::DeprovisionPublicIpv4PoolCidr::pool_id) / [`set_pool_id(Option<String>)`](crate::client::fluent_builders::DeprovisionPublicIpv4PoolCidr::set_pool_id): <p>The ID of the pool that you want to deprovision the CIDR from.</p>
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::DeprovisionPublicIpv4PoolCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::DeprovisionPublicIpv4PoolCidr::set_cidr): <p>The CIDR you want to deprovision from the pool.</p>
    /// - On success, responds with [`DeprovisionPublicIpv4PoolCidrOutput`](crate::output::DeprovisionPublicIpv4PoolCidrOutput) with field(s):
    ///   - [`pool_id(Option<String>)`](crate::output::DeprovisionPublicIpv4PoolCidrOutput::pool_id): <p>The ID of the pool that you deprovisioned the CIDR from.</p>
    ///   - [`deprovisioned_addresses(Option<Vec<String>>)`](crate::output::DeprovisionPublicIpv4PoolCidrOutput::deprovisioned_addresses): <p>The deprovisioned CIDRs.</p>
    /// - On failure, responds with [`SdkError<DeprovisionPublicIpv4PoolCidrError>`](crate::error::DeprovisionPublicIpv4PoolCidrError)
    pub fn deprovision_public_ipv4_pool_cidr(
        &self,
    ) -> fluent_builders::DeprovisionPublicIpv4PoolCidr {
        fluent_builders::DeprovisionPublicIpv4PoolCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeregisterImage`](crate::client::fluent_builders::DeregisterImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::DeregisterImage::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::DeregisterImage::set_image_id): <p>The ID of the AMI.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeregisterImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeregisterImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeregisterImageOutput`](crate::output::DeregisterImageOutput)

    /// - On failure, responds with [`SdkError<DeregisterImageError>`](crate::error::DeregisterImageError)
    pub fn deregister_image(&self) -> fluent_builders::DeregisterImage {
        fluent_builders::DeregisterImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeregisterInstanceEventNotificationAttributes`](crate::client::fluent_builders::DeregisterInstanceEventNotificationAttributes) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeregisterInstanceEventNotificationAttributes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeregisterInstanceEventNotificationAttributes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_tag_attribute(DeregisterInstanceTagAttributeRequest)`](crate::client::fluent_builders::DeregisterInstanceEventNotificationAttributes::instance_tag_attribute) / [`set_instance_tag_attribute(Option<DeregisterInstanceTagAttributeRequest>)`](crate::client::fluent_builders::DeregisterInstanceEventNotificationAttributes::set_instance_tag_attribute): <p>Information about the tag keys to deregister.</p>
    /// - On success, responds with [`DeregisterInstanceEventNotificationAttributesOutput`](crate::output::DeregisterInstanceEventNotificationAttributesOutput) with field(s):
    ///   - [`instance_tag_attribute(Option<InstanceTagNotificationAttribute>)`](crate::output::DeregisterInstanceEventNotificationAttributesOutput::instance_tag_attribute): <p>The resulting set of tag keys.</p>
    /// - On failure, responds with [`SdkError<DeregisterInstanceEventNotificationAttributesError>`](crate::error::DeregisterInstanceEventNotificationAttributesError)
    pub fn deregister_instance_event_notification_attributes(
        &self,
    ) -> fluent_builders::DeregisterInstanceEventNotificationAttributes {
        fluent_builders::DeregisterInstanceEventNotificationAttributes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeregisterTransitGatewayMulticastGroupMembers`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`group_ip_address(impl Into<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::group_ip_address) / [`set_group_ip_address(Option<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::set_group_ip_address): <p>The IP address assigned to the transit gateway multicast group.</p>
    ///   - [`network_interface_ids(Vec<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::network_interface_ids) / [`set_network_interface_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::set_network_interface_ids): <p>The IDs of the group members' network interfaces.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeregisterTransitGatewayMulticastGroupMembersOutput`](crate::output::DeregisterTransitGatewayMulticastGroupMembersOutput) with field(s):
    ///   - [`deregistered_multicast_group_members(Option<TransitGatewayMulticastDeregisteredGroupMembers>)`](crate::output::DeregisterTransitGatewayMulticastGroupMembersOutput::deregistered_multicast_group_members): <p>Information about the deregistered members.</p>
    /// - On failure, responds with [`SdkError<DeregisterTransitGatewayMulticastGroupMembersError>`](crate::error::DeregisterTransitGatewayMulticastGroupMembersError)
    pub fn deregister_transit_gateway_multicast_group_members(
        &self,
    ) -> fluent_builders::DeregisterTransitGatewayMulticastGroupMembers {
        fluent_builders::DeregisterTransitGatewayMulticastGroupMembers::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DeregisterTransitGatewayMulticastGroupSources`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`group_ip_address(impl Into<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources::group_ip_address) / [`set_group_ip_address(Option<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources::set_group_ip_address): <p>The IP address assigned to the transit gateway multicast group.</p>
    ///   - [`network_interface_ids(Vec<String>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources::network_interface_ids) / [`set_network_interface_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources::set_network_interface_ids): <p>The IDs of the group sources' network interfaces.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DeregisterTransitGatewayMulticastGroupSources::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DeregisterTransitGatewayMulticastGroupSourcesOutput`](crate::output::DeregisterTransitGatewayMulticastGroupSourcesOutput) with field(s):
    ///   - [`deregistered_multicast_group_sources(Option<TransitGatewayMulticastDeregisteredGroupSources>)`](crate::output::DeregisterTransitGatewayMulticastGroupSourcesOutput::deregistered_multicast_group_sources): <p>Information about the deregistered group sources.</p>
    /// - On failure, responds with [`SdkError<DeregisterTransitGatewayMulticastGroupSourcesError>`](crate::error::DeregisterTransitGatewayMulticastGroupSourcesError)
    pub fn deregister_transit_gateway_multicast_group_sources(
        &self,
    ) -> fluent_builders::DeregisterTransitGatewayMulticastGroupSources {
        fluent_builders::DeregisterTransitGatewayMulticastGroupSources::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeAccountAttributes`](crate::client::fluent_builders::DescribeAccountAttributes) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute_names(Vec<AccountAttributeName>)`](crate::client::fluent_builders::DescribeAccountAttributes::attribute_names) / [`set_attribute_names(Option<Vec<AccountAttributeName>>)`](crate::client::fluent_builders::DescribeAccountAttributes::set_attribute_names): <p>The account attribute names.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeAccountAttributes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeAccountAttributes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeAccountAttributesOutput`](crate::output::DescribeAccountAttributesOutput) with field(s):
    ///   - [`account_attributes(Option<Vec<AccountAttribute>>)`](crate::output::DescribeAccountAttributesOutput::account_attributes): <p>Information about the account attributes.</p>
    /// - On failure, responds with [`SdkError<DescribeAccountAttributesError>`](crate::error::DescribeAccountAttributesError)
    pub fn describe_account_attributes(&self) -> fluent_builders::DescribeAccountAttributes {
        fluent_builders::DescribeAccountAttributes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeAddresses`](crate::client::fluent_builders::DescribeAddresses) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeAddresses::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeAddresses::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>  <ul>   <li> <p> <code>allocation-id</code> - [EC2-VPC] The allocation ID for the address.</p> </li>   <li> <p> <code>association-id</code> - [EC2-VPC] The association ID for the address.</p> </li>   <li> <p> <code>domain</code> - Indicates whether the address is for use in EC2-Classic (<code>standard</code>) or in a VPC (<code>vpc</code>).</p> </li>   <li> <p> <code>instance-id</code> - The ID of the instance the address is associated with, if any.</p> </li>   <li> <p> <code>network-border-group</code> - A unique set of Availability Zones, Local Zones, or Wavelength Zones from where Amazon Web Services advertises IP addresses. </p> </li>   <li> <p> <code>network-interface-id</code> - [EC2-VPC] The ID of the network interface that the address is associated with, if any.</p> </li>   <li> <p> <code>network-interface-owner-id</code> - The Amazon Web Services account ID of the owner.</p> </li>   <li> <p> <code>private-ip-address</code> - [EC2-VPC] The private IP address associated with the Elastic IP address.</p> </li>   <li> <p> <code>public-ip</code> - The Elastic IP address, or the carrier IP address.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`public_ips(Vec<String>)`](crate::client::fluent_builders::DescribeAddresses::public_ips) / [`set_public_ips(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeAddresses::set_public_ips): <p>One or more Elastic IP addresses.</p>  <p>Default: Describes all your Elastic IP addresses.</p>
    ///   - [`allocation_ids(Vec<String>)`](crate::client::fluent_builders::DescribeAddresses::allocation_ids) / [`set_allocation_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeAddresses::set_allocation_ids): <p>[EC2-VPC] Information about the allocation IDs.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeAddresses::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeAddresses::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeAddressesOutput`](crate::output::DescribeAddressesOutput) with field(s):
    ///   - [`addresses(Option<Vec<Address>>)`](crate::output::DescribeAddressesOutput::addresses): <p>Information about the Elastic IP addresses.</p>
    /// - On failure, responds with [`SdkError<DescribeAddressesError>`](crate::error::DescribeAddressesError)
    pub fn describe_addresses(&self) -> fluent_builders::DescribeAddresses {
        fluent_builders::DescribeAddresses::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeAddressesAttribute`](crate::client::fluent_builders::DescribeAddressesAttribute) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeAddressesAttribute::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_ids(Vec<String>)`](crate::client::fluent_builders::DescribeAddressesAttribute::allocation_ids) / [`set_allocation_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeAddressesAttribute::set_allocation_ids): <p>[EC2-VPC] The allocation IDs.</p>
    ///   - [`attribute(AddressAttributeName)`](crate::client::fluent_builders::DescribeAddressesAttribute::attribute) / [`set_attribute(Option<AddressAttributeName>)`](crate::client::fluent_builders::DescribeAddressesAttribute::set_attribute): <p>The attribute of the IP address.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeAddressesAttribute::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeAddressesAttribute::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeAddressesAttribute::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeAddressesAttribute::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeAddressesAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeAddressesAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeAddressesAttributeOutput`](crate::output::DescribeAddressesAttributeOutput) with field(s):
    ///   - [`addresses(Option<Vec<AddressAttribute>>)`](crate::output::DescribeAddressesAttributeOutput::addresses): <p>Information about the IP addresses.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeAddressesAttributeOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeAddressesAttributeError>`](crate::error::DescribeAddressesAttributeError)
    pub fn describe_addresses_attribute(&self) -> fluent_builders::DescribeAddressesAttribute {
        fluent_builders::DescribeAddressesAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeAddressTransfers`](crate::client::fluent_builders::DescribeAddressTransfers) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeAddressTransfers::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_ids(Vec<String>)`](crate::client::fluent_builders::DescribeAddressTransfers::allocation_ids) / [`set_allocation_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeAddressTransfers::set_allocation_ids): <p>The allocation IDs of Elastic IP addresses.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeAddressTransfers::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeAddressTransfers::set_next_token): <p>Specify the pagination token from a previous request to retrieve the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeAddressTransfers::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeAddressTransfers::set_max_results): <p>The maximum number of address transfers to return in one page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeAddressTransfers::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeAddressTransfers::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeAddressTransfersOutput`](crate::output::DescribeAddressTransfersOutput) with field(s):
    ///   - [`address_transfers(Option<Vec<AddressTransfer>>)`](crate::output::DescribeAddressTransfersOutput::address_transfers): <p>The Elastic IP address transfer.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeAddressTransfersOutput::next_token): <p>Specify the pagination token from a previous request to retrieve the next page of results.</p>
    /// - On failure, responds with [`SdkError<DescribeAddressTransfersError>`](crate::error::DescribeAddressTransfersError)
    pub fn describe_address_transfers(&self) -> fluent_builders::DescribeAddressTransfers {
        fluent_builders::DescribeAddressTransfers::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeAggregateIdFormat`](crate::client::fluent_builders::DescribeAggregateIdFormat) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeAggregateIdFormat::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeAggregateIdFormat::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeAggregateIdFormatOutput`](crate::output::DescribeAggregateIdFormatOutput) with field(s):
    ///   - [`use_long_ids_aggregated(Option<bool>)`](crate::output::DescribeAggregateIdFormatOutput::use_long_ids_aggregated): <p>Indicates whether all resource types in the Region are configured to use longer IDs. This value is only <code>true</code> if all users are configured to use longer IDs for all resources types in the Region.</p>
    ///   - [`statuses(Option<Vec<IdFormat>>)`](crate::output::DescribeAggregateIdFormatOutput::statuses): <p>Information about each resource's ID format.</p>
    /// - On failure, responds with [`SdkError<DescribeAggregateIdFormatError>`](crate::error::DescribeAggregateIdFormatError)
    pub fn describe_aggregate_id_format(&self) -> fluent_builders::DescribeAggregateIdFormat {
        fluent_builders::DescribeAggregateIdFormat::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeAvailabilityZones`](crate::client::fluent_builders::DescribeAvailabilityZones) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeAvailabilityZones::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeAvailabilityZones::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>group-name</code> - For Availability Zones, use the Region name. For Local Zones, use the name of the group associated with the Local Zone (for example, <code>us-west-2-lax-1</code>) For Wavelength Zones, use the name of the group associated with the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>   <li> <p> <code>message</code> - The Zone message.</p> </li>   <li> <p> <code>opt-in-status</code> - The opt-in status (<code>opted-in</code>, and <code>not-opted-in</code> | <code>opt-in-not-required</code>).</p> </li>   <li> <p> <code>parent-zoneID</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li>   <li> <p> <code>parent-zoneName</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li>   <li> <p> <code>region-name</code> - The name of the Region for the Zone (for example, <code>us-east-1</code>).</p> </li>   <li> <p> <code>state</code> - The state of the Availability Zone, the Local Zone, or the Wavelength Zone (<code>available</code>).</p> </li>   <li> <p> <code>zone-id</code> - The ID of the Availability Zone (for example, <code>use1-az1</code>), the Local Zone (for example, <code>usw2-lax1-az1</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>   <li> <p> <code>zone-type</code> - The type of zone, for example, <code>local-zone</code>.</p> </li>   <li> <p> <code>zone-name</code> - The name of the Availability Zone (for example, <code>us-east-1a</code>), the Local Zone (for example, <code>us-west-2-lax-1a</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>   <li> <p> <code>zone-type</code> - The type of zone, for example, <code>local-zone</code>.</p> </li>  </ul>
    ///   - [`zone_names(Vec<String>)`](crate::client::fluent_builders::DescribeAvailabilityZones::zone_names) / [`set_zone_names(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeAvailabilityZones::set_zone_names): <p>The names of the Availability Zones, Local Zones, and Wavelength Zones.</p>
    ///   - [`zone_ids(Vec<String>)`](crate::client::fluent_builders::DescribeAvailabilityZones::zone_ids) / [`set_zone_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeAvailabilityZones::set_zone_ids): <p>The IDs of the Availability Zones, Local Zones, and Wavelength Zones.</p>
    ///   - [`all_availability_zones(bool)`](crate::client::fluent_builders::DescribeAvailabilityZones::all_availability_zones) / [`set_all_availability_zones(Option<bool>)`](crate::client::fluent_builders::DescribeAvailabilityZones::set_all_availability_zones): <p>Include all Availability Zones, Local Zones, and Wavelength Zones regardless of your opt-in status.</p>  <p>If you do not use this parameter, the results include only the zones for the Regions where you have chosen the option to opt in.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeAvailabilityZones::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeAvailabilityZones::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeAvailabilityZonesOutput`](crate::output::DescribeAvailabilityZonesOutput) with field(s):
    ///   - [`availability_zones(Option<Vec<AvailabilityZone>>)`](crate::output::DescribeAvailabilityZonesOutput::availability_zones): <p>Information about the Availability Zones, Local Zones, and Wavelength Zones.</p>
    /// - On failure, responds with [`SdkError<DescribeAvailabilityZonesError>`](crate::error::DescribeAvailabilityZonesError)
    pub fn describe_availability_zones(&self) -> fluent_builders::DescribeAvailabilityZones {
        fluent_builders::DescribeAvailabilityZones::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeAwsNetworkPerformanceMetricSubscriptions`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::set_filters): <p>One or more filters.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeAwsNetworkPerformanceMetricSubscriptionsOutput`](crate::output::DescribeAwsNetworkPerformanceMetricSubscriptionsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeAwsNetworkPerformanceMetricSubscriptionsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`subscriptions(Option<Vec<Subscription>>)`](crate::output::DescribeAwsNetworkPerformanceMetricSubscriptionsOutput::subscriptions): <p>Describes the current Infrastructure Performance subscriptions.</p>
    /// - On failure, responds with [`SdkError<DescribeAwsNetworkPerformanceMetricSubscriptionsError>`](crate::error::DescribeAwsNetworkPerformanceMetricSubscriptionsError)
    pub fn describe_aws_network_performance_metric_subscriptions(
        &self,
    ) -> fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions {
        fluent_builders::DescribeAwsNetworkPerformanceMetricSubscriptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeBundleTasks`](crate::client::fluent_builders::DescribeBundleTasks) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`bundle_ids(Vec<String>)`](crate::client::fluent_builders::DescribeBundleTasks::bundle_ids) / [`set_bundle_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeBundleTasks::set_bundle_ids): <p>The bundle task IDs.</p>  <p>Default: Describes all your bundle tasks.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeBundleTasks::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeBundleTasks::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>bundle-id</code> - The ID of the bundle task.</p> </li>   <li> <p> <code>error-code</code> - If the task failed, the error code returned.</p> </li>   <li> <p> <code>error-message</code> - If the task failed, the error message returned.</p> </li>   <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>   <li> <p> <code>progress</code> - The level of task completion, as a percentage (for example, 20%).</p> </li>   <li> <p> <code>s3-bucket</code> - The Amazon S3 bucket to store the AMI.</p> </li>   <li> <p> <code>s3-prefix</code> - The beginning of the AMI name.</p> </li>   <li> <p> <code>start-time</code> - The time the task started (for example, 2013-09-15T17:15:20.000Z).</p> </li>   <li> <p> <code>state</code> - The state of the task (<code>pending</code> | <code>waiting-for-shutdown</code> | <code>bundling</code> | <code>storing</code> | <code>cancelling</code> | <code>complete</code> | <code>failed</code>).</p> </li>   <li> <p> <code>update-time</code> - The time of the most recent update for the task.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeBundleTasks::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeBundleTasks::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeBundleTasksOutput`](crate::output::DescribeBundleTasksOutput) with field(s):
    ///   - [`bundle_tasks(Option<Vec<BundleTask>>)`](crate::output::DescribeBundleTasksOutput::bundle_tasks): <p>Information about the bundle tasks.</p>
    /// - On failure, responds with [`SdkError<DescribeBundleTasksError>`](crate::error::DescribeBundleTasksError)
    pub fn describe_bundle_tasks(&self) -> fluent_builders::DescribeBundleTasks {
        fluent_builders::DescribeBundleTasks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeByoipCidrs`](crate::client::fluent_builders::DescribeByoipCidrs) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeByoipCidrs::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeByoipCidrs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeByoipCidrs::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeByoipCidrs::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeByoipCidrs::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeByoipCidrs::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeByoipCidrs::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeByoipCidrsOutput`](crate::output::DescribeByoipCidrsOutput) with field(s):
    ///   - [`byoip_cidrs(Option<Vec<ByoipCidr>>)`](crate::output::DescribeByoipCidrsOutput::byoip_cidrs): <p>Information about your address ranges.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeByoipCidrsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeByoipCidrsError>`](crate::error::DescribeByoipCidrsError)
    pub fn describe_byoip_cidrs(&self) -> fluent_builders::DescribeByoipCidrs {
        fluent_builders::DescribeByoipCidrs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeCapacityReservationFleets`](crate::client::fluent_builders::DescribeCapacityReservationFleets) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeCapacityReservationFleets::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`capacity_reservation_fleet_ids(Vec<String>)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::capacity_reservation_fleet_ids) / [`set_capacity_reservation_fleet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::set_capacity_reservation_fleet_ids): <p>The IDs of the Capacity Reservation Fleets to describe.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::set_next_token): <p>The token to use to retrieve the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>state</code> - The state of the Fleet (<code>submitted</code> | <code>modifying</code> | <code>active</code> | <code>partially_fulfilled</code> | <code>expiring</code> | <code>expired</code> | <code>cancelling</code> | <code>cancelled</code> | <code>failed</code>).</p> </li>   <li> <p> <code>instance-match-criteria</code> - The instance matching criteria for the Fleet. Only <code>open</code> is supported.</p> </li>   <li> <p> <code>tenancy</code> - The tenancy of the Fleet (<code>default</code> | <code>dedicated</code>).</p> </li>   <li> <p> <code>allocation-strategy</code> - The allocation strategy used by the Fleet. Only <code>prioritized</code> is supported.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeCapacityReservationFleets::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeCapacityReservationFleetsOutput`](crate::output::DescribeCapacityReservationFleetsOutput) with field(s):
    ///   - [`capacity_reservation_fleets(Option<Vec<CapacityReservationFleet>>)`](crate::output::DescribeCapacityReservationFleetsOutput::capacity_reservation_fleets): <p>Information about the Capacity Reservation Fleets.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeCapacityReservationFleetsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeCapacityReservationFleetsError>`](crate::error::DescribeCapacityReservationFleetsError)
    pub fn describe_capacity_reservation_fleets(
        &self,
    ) -> fluent_builders::DescribeCapacityReservationFleets {
        fluent_builders::DescribeCapacityReservationFleets::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeCapacityReservations`](crate::client::fluent_builders::DescribeCapacityReservations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeCapacityReservations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`capacity_reservation_ids(Vec<String>)`](crate::client::fluent_builders::DescribeCapacityReservations::capacity_reservation_ids) / [`set_capacity_reservation_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeCapacityReservations::set_capacity_reservation_ids): <p>The ID of the Capacity Reservation.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeCapacityReservations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeCapacityReservations::set_next_token): <p>The token to use to retrieve the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeCapacityReservations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeCapacityReservations::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeCapacityReservations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeCapacityReservations::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>instance-type</code> - The type of instance for which the Capacity Reservation reserves capacity.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the Capacity Reservation.</p> </li>   <li> <p> <code>instance-platform</code> - The type of operating system for which the Capacity Reservation reserves capacity.</p> </li>   <li> <p> <code>availability-zone</code> - The Availability Zone of the Capacity Reservation.</p> </li>   <li> <p> <code>tenancy</code> - Indicates the tenancy of the Capacity Reservation. A Capacity Reservation can have one of the following tenancy settings:</p>    <ul>     <li> <p> <code>default</code> - The Capacity Reservation is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>     <li> <p> <code>dedicated</code> - The Capacity Reservation is created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>    </ul> </li>   <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost on which the Capacity Reservation was created.</p> </li>   <li> <p> <code>state</code> - The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p>    <ul>     <li> <p> <code>active</code>- The Capacity Reservation is active and the capacity is available for your use.</p> </li>     <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your request. The reserved capacity is no longer available for your use.</p> </li>     <li> <p> <code>cancelled</code> - The Capacity Reservation was cancelled. The reserved capacity is no longer available for your use.</p> </li>     <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li>     <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request might fail due to invalid request parameters, capacity constraints, or instance limit constraints. Failed requests are retained for 60 minutes.</p> </li>    </ul> </li>   <li> <p> <code>start-date</code> - The date and time at which the Capacity Reservation was started.</p> </li>   <li> <p> <code>end-date</code> - The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to expired when it reaches its end date and time.</p> </li>   <li> <p> <code>end-date-type</code> - Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>    <ul>     <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it.</p> </li>     <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time.</p> </li>    </ul> </li>   <li> <p> <code>instance-match-criteria</code> - Indicates the type of instance launches that the Capacity Reservation accepts. The options include:</p>    <ul>     <li> <p> <code>open</code> - The Capacity Reservation accepts all instances that have matching attributes (instance type, platform, and Availability Zone). Instances that have matching attributes launch into the Capacity Reservation automatically without specifying any additional parameters.</p> </li>     <li> <p> <code>targeted</code> - The Capacity Reservation only accepts instances that have matching attributes (instance type, platform, and Availability Zone), and explicitly target the Capacity Reservation. This ensures that only permitted instances can use the reserved capacity.</p> </li>    </ul> </li>   <li> <p> <code>placement-group-arn</code> - The ARN of the cluster placement group in which the Capacity Reservation was created.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeCapacityReservations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeCapacityReservations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeCapacityReservationsOutput`](crate::output::DescribeCapacityReservationsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeCapacityReservationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`capacity_reservations(Option<Vec<CapacityReservation>>)`](crate::output::DescribeCapacityReservationsOutput::capacity_reservations): <p>Information about the Capacity Reservations.</p>
    /// - On failure, responds with [`SdkError<DescribeCapacityReservationsError>`](crate::error::DescribeCapacityReservationsError)
    pub fn describe_capacity_reservations(&self) -> fluent_builders::DescribeCapacityReservations {
        fluent_builders::DescribeCapacityReservations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeCarrierGateways`](crate::client::fluent_builders::DescribeCarrierGateways) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeCarrierGateways::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`carrier_gateway_ids(Vec<String>)`](crate::client::fluent_builders::DescribeCarrierGateways::carrier_gateway_ids) / [`set_carrier_gateway_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeCarrierGateways::set_carrier_gateway_ids): <p>One or more carrier gateway IDs.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeCarrierGateways::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeCarrierGateways::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>carrier-gateway-id</code> - The ID of the carrier gateway.</p> </li>   <li> <p> <code>state</code> - The state of the carrier gateway (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>   <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner of the carrier gateway.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC associated with the carrier gateway.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeCarrierGateways::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeCarrierGateways::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeCarrierGateways::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeCarrierGateways::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeCarrierGateways::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeCarrierGateways::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeCarrierGatewaysOutput`](crate::output::DescribeCarrierGatewaysOutput) with field(s):
    ///   - [`carrier_gateways(Option<Vec<CarrierGateway>>)`](crate::output::DescribeCarrierGatewaysOutput::carrier_gateways): <p>Information about the carrier gateway.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeCarrierGatewaysOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeCarrierGatewaysError>`](crate::error::DescribeCarrierGatewaysError)
    pub fn describe_carrier_gateways(&self) -> fluent_builders::DescribeCarrierGateways {
        fluent_builders::DescribeCarrierGateways::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeClassicLinkInstances`](crate::client::fluent_builders::DescribeClassicLinkInstances) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeClassicLinkInstances::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeClassicLinkInstances::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeClassicLinkInstances::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>group-id</code> - The ID of a VPC security group that's associated with the instance.</p> </li>   <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC to which the instance is linked.</p> <p> <code>vpc-id</code> - The ID of the VPC that the instance is linked to.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeClassicLinkInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeClassicLinkInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::DescribeClassicLinkInstances::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeClassicLinkInstances::set_instance_ids): <p>One or more instance IDs. Must be instances linked to a VPC through ClassicLink.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeClassicLinkInstances::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeClassicLinkInstances::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>  <p>Constraint: If the value is greater than 1000, we return only 1000 items.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeClassicLinkInstances::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeClassicLinkInstances::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeClassicLinkInstancesOutput`](crate::output::DescribeClassicLinkInstancesOutput) with field(s):
    ///   - [`instances(Option<Vec<ClassicLinkInstance>>)`](crate::output::DescribeClassicLinkInstancesOutput::instances): <p>Information about one or more linked EC2-Classic instances.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeClassicLinkInstancesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeClassicLinkInstancesError>`](crate::error::DescribeClassicLinkInstancesError)
    pub fn describe_classic_link_instances(&self) -> fluent_builders::DescribeClassicLinkInstances {
        fluent_builders::DescribeClassicLinkInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeClientVpnAuthorizationRules`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>  <ul>   <li> <p> <code>description</code> - The description of the authorization rule.</p> </li>   <li> <p> <code>destination-cidr</code> - The CIDR of the network to which the authorization rule applies.</p> </li>   <li> <p> <code>group-id</code> - The ID of the Active Directory group to which the authorization rule grants access.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeClientVpnAuthorizationRules::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</p>
    /// - On success, responds with [`DescribeClientVpnAuthorizationRulesOutput`](crate::output::DescribeClientVpnAuthorizationRulesOutput) with field(s):
    ///   - [`authorization_rules(Option<Vec<AuthorizationRule>>)`](crate::output::DescribeClientVpnAuthorizationRulesOutput::authorization_rules): <p>Information about the authorization rules.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeClientVpnAuthorizationRulesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeClientVpnAuthorizationRulesError>`](crate::error::DescribeClientVpnAuthorizationRulesError)
    pub fn describe_client_vpn_authorization_rules(
        &self,
    ) -> fluent_builders::DescribeClientVpnAuthorizationRules {
        fluent_builders::DescribeClientVpnAuthorizationRules::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeClientVpnConnections`](crate::client::fluent_builders::DescribeClientVpnConnections) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeClientVpnConnections::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnConnections::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnConnections::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeClientVpnConnections::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeClientVpnConnections::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>  <ul>   <li> <p> <code>connection-id</code> - The ID of the connection.</p> </li>   <li> <p> <code>username</code> - For Active Directory client authentication, the user name of the client who established the client connection.</p> </li>  </ul>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnConnections::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnConnections::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeClientVpnConnections::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeClientVpnConnections::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeClientVpnConnections::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeClientVpnConnections::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeClientVpnConnectionsOutput`](crate::output::DescribeClientVpnConnectionsOutput) with field(s):
    ///   - [`connections(Option<Vec<ClientVpnConnection>>)`](crate::output::DescribeClientVpnConnectionsOutput::connections): <p>Information about the active and terminated client connections.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeClientVpnConnectionsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeClientVpnConnectionsError>`](crate::error::DescribeClientVpnConnectionsError)
    pub fn describe_client_vpn_connections(&self) -> fluent_builders::DescribeClientVpnConnections {
        fluent_builders::DescribeClientVpnConnections::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeClientVpnEndpoints`](crate::client::fluent_builders::DescribeClientVpnEndpoints) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeClientVpnEndpoints::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_ids(Vec<String>)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::client_vpn_endpoint_ids) / [`set_client_vpn_endpoint_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::set_client_vpn_endpoint_ids): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>  <ul>   <li> <p> <code>endpoint-id</code> - The ID of the Client VPN endpoint.</p> </li>   <li> <p> <code>transport-protocol</code> - The transport protocol (<code>tcp</code> | <code>udp</code>).</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeClientVpnEndpoints::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeClientVpnEndpointsOutput`](crate::output::DescribeClientVpnEndpointsOutput) with field(s):
    ///   - [`client_vpn_endpoints(Option<Vec<ClientVpnEndpoint>>)`](crate::output::DescribeClientVpnEndpointsOutput::client_vpn_endpoints): <p>Information about the Client VPN endpoints.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeClientVpnEndpointsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeClientVpnEndpointsError>`](crate::error::DescribeClientVpnEndpointsError)
    pub fn describe_client_vpn_endpoints(&self) -> fluent_builders::DescribeClientVpnEndpoints {
        fluent_builders::DescribeClientVpnEndpoints::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeClientVpnRoutes`](crate::client::fluent_builders::DescribeClientVpnRoutes) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeClientVpnRoutes::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnRoutes::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnRoutes::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeClientVpnRoutes::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeClientVpnRoutes::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>  <ul>   <li> <p> <code>destination-cidr</code> - The CIDR of the route destination.</p> </li>   <li> <p> <code>origin</code> - How the route was associated with the Client VPN endpoint (<code>associate</code> | <code>add-route</code>).</p> </li>   <li> <p> <code>target-subnet</code> - The ID of the subnet through which traffic is routed.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeClientVpnRoutes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeClientVpnRoutes::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnRoutes::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnRoutes::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeClientVpnRoutes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeClientVpnRoutes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeClientVpnRoutesOutput`](crate::output::DescribeClientVpnRoutesOutput) with field(s):
    ///   - [`routes(Option<Vec<ClientVpnRoute>>)`](crate::output::DescribeClientVpnRoutesOutput::routes): <p>Information about the Client VPN endpoint routes.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeClientVpnRoutesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeClientVpnRoutesError>`](crate::error::DescribeClientVpnRoutesError)
    pub fn describe_client_vpn_routes(&self) -> fluent_builders::DescribeClientVpnRoutes {
        fluent_builders::DescribeClientVpnRoutes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeClientVpnTargetNetworks`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`association_ids(Vec<String>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::association_ids) / [`set_association_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::set_association_ids): <p>The IDs of the target network associations.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>  <ul>   <li> <p> <code>association-id</code> - The ID of the association.</p> </li>   <li> <p> <code>target-network-id</code> - The ID of the subnet specified as the target network.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC in which the target network is located.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeClientVpnTargetNetworks::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeClientVpnTargetNetworksOutput`](crate::output::DescribeClientVpnTargetNetworksOutput) with field(s):
    ///   - [`client_vpn_target_networks(Option<Vec<TargetNetwork>>)`](crate::output::DescribeClientVpnTargetNetworksOutput::client_vpn_target_networks): <p>Information about the associated target networks.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeClientVpnTargetNetworksOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeClientVpnTargetNetworksError>`](crate::error::DescribeClientVpnTargetNetworksError)
    pub fn describe_client_vpn_target_networks(
        &self,
    ) -> fluent_builders::DescribeClientVpnTargetNetworks {
        fluent_builders::DescribeClientVpnTargetNetworks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeCoipPools`](crate::client::fluent_builders::DescribeCoipPools) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeCoipPools::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`pool_ids(Vec<String>)`](crate::client::fluent_builders::DescribeCoipPools::pool_ids) / [`set_pool_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeCoipPools::set_pool_ids): <p>The IDs of the address pools.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeCoipPools::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeCoipPools::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>coip-pool.local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>   <li> <p> <code>coip-pool.pool-id</code> - The ID of the address pool.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeCoipPools::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeCoipPools::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeCoipPools::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeCoipPools::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeCoipPools::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeCoipPools::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeCoipPoolsOutput`](crate::output::DescribeCoipPoolsOutput) with field(s):
    ///   - [`coip_pools(Option<Vec<CoipPool>>)`](crate::output::DescribeCoipPoolsOutput::coip_pools): <p>Information about the address pools.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeCoipPoolsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeCoipPoolsError>`](crate::error::DescribeCoipPoolsError)
    pub fn describe_coip_pools(&self) -> fluent_builders::DescribeCoipPools {
        fluent_builders::DescribeCoipPools::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeConversionTasks`](crate::client::fluent_builders::DescribeConversionTasks) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`conversion_task_ids(Vec<String>)`](crate::client::fluent_builders::DescribeConversionTasks::conversion_task_ids) / [`set_conversion_task_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeConversionTasks::set_conversion_task_ids): <p>The conversion task IDs.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeConversionTasks::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeConversionTasks::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeConversionTasksOutput`](crate::output::DescribeConversionTasksOutput) with field(s):
    ///   - [`conversion_tasks(Option<Vec<ConversionTask>>)`](crate::output::DescribeConversionTasksOutput::conversion_tasks): <p>Information about the conversion tasks.</p>
    /// - On failure, responds with [`SdkError<DescribeConversionTasksError>`](crate::error::DescribeConversionTasksError)
    pub fn describe_conversion_tasks(&self) -> fluent_builders::DescribeConversionTasks {
        fluent_builders::DescribeConversionTasks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeCustomerGateways`](crate::client::fluent_builders::DescribeCustomerGateways) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`customer_gateway_ids(Vec<String>)`](crate::client::fluent_builders::DescribeCustomerGateways::customer_gateway_ids) / [`set_customer_gateway_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeCustomerGateways::set_customer_gateway_ids): <p>One or more customer gateway IDs.</p>  <p>Default: Describes all your customer gateways.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeCustomerGateways::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeCustomerGateways::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>bgp-asn</code> - The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).</p> </li>   <li> <p> <code>customer-gateway-id</code> - The ID of the customer gateway.</p> </li>   <li> <p> <code>ip-address</code> - The IP address of the customer gateway device's external interface.</p> </li>   <li> <p> <code>state</code> - The state of the customer gateway (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>   <li> <p> <code>type</code> - The type of customer gateway. Currently, the only supported type is <code>ipsec.1</code>.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeCustomerGateways::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeCustomerGateways::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeCustomerGatewaysOutput`](crate::output::DescribeCustomerGatewaysOutput) with field(s):
    ///   - [`customer_gateways(Option<Vec<CustomerGateway>>)`](crate::output::DescribeCustomerGatewaysOutput::customer_gateways): <p>Information about one or more customer gateways.</p>
    /// - On failure, responds with [`SdkError<DescribeCustomerGatewaysError>`](crate::error::DescribeCustomerGatewaysError)
    pub fn describe_customer_gateways(&self) -> fluent_builders::DescribeCustomerGateways {
        fluent_builders::DescribeCustomerGateways::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeDhcpOptions`](crate::client::fluent_builders::DescribeDhcpOptions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeDhcpOptions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dhcp_options_ids(Vec<String>)`](crate::client::fluent_builders::DescribeDhcpOptions::dhcp_options_ids) / [`set_dhcp_options_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeDhcpOptions::set_dhcp_options_ids): <p>The IDs of one or more DHCP options sets.</p>  <p>Default: Describes all your DHCP options sets.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeDhcpOptions::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeDhcpOptions::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>dhcp-options-id</code> - The ID of a DHCP options set.</p> </li>   <li> <p> <code>key</code> - The key for one of the options (for example, <code>domain-name</code>).</p> </li>   <li> <p> <code>value</code> - The value for one of the options.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the DHCP options set.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeDhcpOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeDhcpOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeDhcpOptions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeDhcpOptions::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeDhcpOptions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeDhcpOptions::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeDhcpOptionsOutput`](crate::output::DescribeDhcpOptionsOutput) with field(s):
    ///   - [`dhcp_options(Option<Vec<DhcpOptions>>)`](crate::output::DescribeDhcpOptionsOutput::dhcp_options): <p>Information about one or more DHCP options sets.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeDhcpOptionsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeDhcpOptionsError>`](crate::error::DescribeDhcpOptionsError)
    pub fn describe_dhcp_options(&self) -> fluent_builders::DescribeDhcpOptions {
        fluent_builders::DescribeDhcpOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeEgressOnlyInternetGateways`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`egress_only_internet_gateway_ids(Vec<String>)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::egress_only_internet_gateway_ids) / [`set_egress_only_internet_gateway_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::set_egress_only_internet_gateway_ids): <p>One or more egress-only internet gateway IDs.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeEgressOnlyInternetGateways::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    /// - On success, responds with [`DescribeEgressOnlyInternetGatewaysOutput`](crate::output::DescribeEgressOnlyInternetGatewaysOutput) with field(s):
    ///   - [`egress_only_internet_gateways(Option<Vec<EgressOnlyInternetGateway>>)`](crate::output::DescribeEgressOnlyInternetGatewaysOutput::egress_only_internet_gateways): <p>Information about the egress-only internet gateways.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeEgressOnlyInternetGatewaysOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeEgressOnlyInternetGatewaysError>`](crate::error::DescribeEgressOnlyInternetGatewaysError)
    pub fn describe_egress_only_internet_gateways(
        &self,
    ) -> fluent_builders::DescribeEgressOnlyInternetGateways {
        fluent_builders::DescribeEgressOnlyInternetGateways::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeElasticGpus`](crate::client::fluent_builders::DescribeElasticGpus) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`elastic_gpu_ids(Vec<String>)`](crate::client::fluent_builders::DescribeElasticGpus::elastic_gpu_ids) / [`set_elastic_gpu_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeElasticGpus::set_elastic_gpu_ids): <p>The Elastic Graphics accelerator IDs.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeElasticGpus::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeElasticGpus::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeElasticGpus::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeElasticGpus::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>availability-zone</code> - The Availability Zone in which the Elastic Graphics accelerator resides.</p> </li>   <li> <p> <code>elastic-gpu-health</code> - The status of the Elastic Graphics accelerator (<code>OK</code> | <code>IMPAIRED</code>).</p> </li>   <li> <p> <code>elastic-gpu-state</code> - The state of the Elastic Graphics accelerator (<code>ATTACHED</code>).</p> </li>   <li> <p> <code>elastic-gpu-type</code> - The type of Elastic Graphics accelerator; for example, <code>eg1.medium</code>.</p> </li>   <li> <p> <code>instance-id</code> - The ID of the instance to which the Elastic Graphics accelerator is associated.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeElasticGpus::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeElasticGpus::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeElasticGpus::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeElasticGpus::set_next_token): <p>The token to request the next page of results.</p>
    /// - On success, responds with [`DescribeElasticGpusOutput`](crate::output::DescribeElasticGpusOutput) with field(s):
    ///   - [`elastic_gpu_set(Option<Vec<ElasticGpus>>)`](crate::output::DescribeElasticGpusOutput::elastic_gpu_set): <p>Information about the Elastic Graphics accelerators.</p>
    ///   - [`max_results(Option<i32>)`](crate::output::DescribeElasticGpusOutput::max_results): <p>The total number of items to return. If the total number of items available is more than the value specified in max-items then a Next-Token will be provided in the output that you can use to resume pagination.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeElasticGpusOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeElasticGpusError>`](crate::error::DescribeElasticGpusError)
    pub fn describe_elastic_gpus(&self) -> fluent_builders::DescribeElasticGpus {
        fluent_builders::DescribeElasticGpus::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeExportImageTasks`](crate::client::fluent_builders::DescribeExportImageTasks) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeExportImageTasks::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeExportImageTasks::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeExportImageTasks::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeExportImageTasks::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeExportImageTasks::set_filters): <p>Filter tasks using the <code>task-state</code> filter and one of the following values: <code>active</code>, <code>completed</code>, <code>deleting</code>, or <code>deleted</code>.</p>
    ///   - [`export_image_task_ids(Vec<String>)`](crate::client::fluent_builders::DescribeExportImageTasks::export_image_task_ids) / [`set_export_image_task_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeExportImageTasks::set_export_image_task_ids): <p>The IDs of the export image tasks.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeExportImageTasks::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeExportImageTasks::set_max_results): <p>The maximum number of results to return in a single call.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeExportImageTasks::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeExportImageTasks::set_next_token): <p>A token that indicates the next page of results.</p>
    /// - On success, responds with [`DescribeExportImageTasksOutput`](crate::output::DescribeExportImageTasksOutput) with field(s):
    ///   - [`export_image_tasks(Option<Vec<ExportImageTask>>)`](crate::output::DescribeExportImageTasksOutput::export_image_tasks): <p>Information about the export image tasks.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeExportImageTasksOutput::next_token): <p>The token to use to get the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeExportImageTasksError>`](crate::error::DescribeExportImageTasksError)
    pub fn describe_export_image_tasks(&self) -> fluent_builders::DescribeExportImageTasks {
        fluent_builders::DescribeExportImageTasks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeExportTasks`](crate::client::fluent_builders::DescribeExportTasks) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`export_task_ids(Vec<String>)`](crate::client::fluent_builders::DescribeExportTasks::export_task_ids) / [`set_export_task_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeExportTasks::set_export_task_ids): <p>The export task IDs.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeExportTasks::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeExportTasks::set_filters): <p>the filters for the export tasks.</p>
    /// - On success, responds with [`DescribeExportTasksOutput`](crate::output::DescribeExportTasksOutput) with field(s):
    ///   - [`export_tasks(Option<Vec<ExportTask>>)`](crate::output::DescribeExportTasksOutput::export_tasks): <p>Information about the export tasks.</p>
    /// - On failure, responds with [`SdkError<DescribeExportTasksError>`](crate::error::DescribeExportTasksError)
    pub fn describe_export_tasks(&self) -> fluent_builders::DescribeExportTasks {
        fluent_builders::DescribeExportTasks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeFastLaunchImages`](crate::client::fluent_builders::DescribeFastLaunchImages) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeFastLaunchImages::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_ids(Vec<String>)`](crate::client::fluent_builders::DescribeFastLaunchImages::image_ids) / [`set_image_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeFastLaunchImages::set_image_ids): <p>Details for one or more Windows AMI image IDs.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeFastLaunchImages::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeFastLaunchImages::set_filters): <p>Use the following filters to streamline results.</p>  <ul>   <li> <p> <code>resource-type</code> - The resource type for pre-provisioning.</p> </li>   <li> <p> <code>launch-template</code> - The launch template that is associated with the pre-provisioned Windows AMI.</p> </li>   <li> <p> <code>owner-id</code> - The owner ID for the pre-provisioning resource.</p> </li>   <li> <p> <code>state</code> - The current state of fast launching for the Windows AMI.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeFastLaunchImages::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeFastLaunchImages::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned NextToken value. If this parameter is not specified, then all results are returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeFastLaunchImages::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeFastLaunchImages::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeFastLaunchImages::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeFastLaunchImages::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeFastLaunchImagesOutput`](crate::output::DescribeFastLaunchImagesOutput) with field(s):
    ///   - [`fast_launch_images(Option<Vec<DescribeFastLaunchImagesSuccessItem>>)`](crate::output::DescribeFastLaunchImagesOutput::fast_launch_images): <p>A collection of details about the fast-launch enabled Windows images that meet the requested criteria.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeFastLaunchImagesOutput::next_token): <p>The token to use for the next set of results. This value is null when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeFastLaunchImagesError>`](crate::error::DescribeFastLaunchImagesError)
    pub fn describe_fast_launch_images(&self) -> fluent_builders::DescribeFastLaunchImages {
        fluent_builders::DescribeFastLaunchImages::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeFastSnapshotRestores`](crate::client::fluent_builders::DescribeFastSnapshotRestores) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeFastSnapshotRestores::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeFastSnapshotRestores::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeFastSnapshotRestores::set_filters): <p>The filters. The possible values are:</p>  <ul>   <li> <p> <code>availability-zone</code>: The Availability Zone of the snapshot.</p> </li>   <li> <p> <code>owner-id</code>: The ID of the Amazon Web Services account that enabled fast snapshot restore on the snapshot.</p> </li>   <li> <p> <code>snapshot-id</code>: The ID of the snapshot.</p> </li>   <li> <p> <code>state</code>: The state of fast snapshot restores for the snapshot (<code>enabling</code> | <code>optimizing</code> | <code>enabled</code> | <code>disabling</code> | <code>disabled</code>).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeFastSnapshotRestores::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeFastSnapshotRestores::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeFastSnapshotRestores::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeFastSnapshotRestores::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeFastSnapshotRestores::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeFastSnapshotRestores::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeFastSnapshotRestoresOutput`](crate::output::DescribeFastSnapshotRestoresOutput) with field(s):
    ///   - [`fast_snapshot_restores(Option<Vec<DescribeFastSnapshotRestoreSuccessItem>>)`](crate::output::DescribeFastSnapshotRestoresOutput::fast_snapshot_restores): <p>Information about the state of fast snapshot restores.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeFastSnapshotRestoresOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeFastSnapshotRestoresError>`](crate::error::DescribeFastSnapshotRestoresError)
    pub fn describe_fast_snapshot_restores(&self) -> fluent_builders::DescribeFastSnapshotRestores {
        fluent_builders::DescribeFastSnapshotRestores::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeFleetHistory`](crate::client::fluent_builders::DescribeFleetHistory) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeFleetHistory::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeFleetHistory::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`event_type(FleetEventType)`](crate::client::fluent_builders::DescribeFleetHistory::event_type) / [`set_event_type(Option<FleetEventType>)`](crate::client::fluent_builders::DescribeFleetHistory::set_event_type): <p>The type of events to describe. By default, all events are described.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeFleetHistory::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeFleetHistory::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeFleetHistory::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeFleetHistory::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`fleet_id(impl Into<String>)`](crate::client::fluent_builders::DescribeFleetHistory::fleet_id) / [`set_fleet_id(Option<String>)`](crate::client::fluent_builders::DescribeFleetHistory::set_fleet_id): <p>The ID of the EC2 Fleet.</p>
    ///   - [`start_time(DateTime)`](crate::client::fluent_builders::DescribeFleetHistory::start_time) / [`set_start_time(Option<DateTime>)`](crate::client::fluent_builders::DescribeFleetHistory::set_start_time): <p>The start date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
    /// - On success, responds with [`DescribeFleetHistoryOutput`](crate::output::DescribeFleetHistoryOutput) with field(s):
    ///   - [`history_records(Option<Vec<HistoryRecordEntry>>)`](crate::output::DescribeFleetHistoryOutput::history_records): <p>Information about the events in the history of the EC2 Fleet.</p>
    ///   - [`last_evaluated_time(Option<DateTime>)`](crate::output::DescribeFleetHistoryOutput::last_evaluated_time): <p>The last date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). All records up to this time were retrieved.</p>  <p>If <code>nextToken</code> indicates that there are more results, this value is not present.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeFleetHistoryOutput::next_token): <p>The token for the next set of results.</p>
    ///   - [`fleet_id(Option<String>)`](crate::output::DescribeFleetHistoryOutput::fleet_id): <p>The ID of the EC Fleet.</p>
    ///   - [`start_time(Option<DateTime>)`](crate::output::DescribeFleetHistoryOutput::start_time): <p>The start date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
    /// - On failure, responds with [`SdkError<DescribeFleetHistoryError>`](crate::error::DescribeFleetHistoryError)
    pub fn describe_fleet_history(&self) -> fluent_builders::DescribeFleetHistory {
        fluent_builders::DescribeFleetHistory::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeFleetInstances`](crate::client::fluent_builders::DescribeFleetInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeFleetInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeFleetInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeFleetInstances::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeFleetInstances::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeFleetInstances::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeFleetInstances::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`fleet_id(impl Into<String>)`](crate::client::fluent_builders::DescribeFleetInstances::fleet_id) / [`set_fleet_id(Option<String>)`](crate::client::fluent_builders::DescribeFleetInstances::set_fleet_id): <p>The ID of the EC2 Fleet.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeFleetInstances::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeFleetInstances::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>instance-type</code> - The instance type.</p> </li>  </ul>
    /// - On success, responds with [`DescribeFleetInstancesOutput`](crate::output::DescribeFleetInstancesOutput) with field(s):
    ///   - [`active_instances(Option<Vec<ActiveInstance>>)`](crate::output::DescribeFleetInstancesOutput::active_instances): <p>The running instances. This list is refreshed periodically and might be out of date.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeFleetInstancesOutput::next_token): <p>The token for the next set of results.</p>
    ///   - [`fleet_id(Option<String>)`](crate::output::DescribeFleetInstancesOutput::fleet_id): <p>The ID of the EC2 Fleet.</p>
    /// - On failure, responds with [`SdkError<DescribeFleetInstancesError>`](crate::error::DescribeFleetInstancesError)
    pub fn describe_fleet_instances(&self) -> fluent_builders::DescribeFleetInstances {
        fluent_builders::DescribeFleetInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeFleets`](crate::client::fluent_builders::DescribeFleets) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeFleets::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeFleets::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeFleets::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeFleets::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeFleets::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeFleets::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeFleets::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`fleet_ids(Vec<String>)`](crate::client::fluent_builders::DescribeFleets::fleet_ids) / [`set_fleet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeFleets::set_fleet_ids): <p>The IDs of the EC2 Fleets.</p> <note>   <p>If a fleet is of type <code>instant</code>, you must specify the fleet ID, otherwise it does not appear in the response.</p>  </note>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeFleets::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeFleets::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>activity-status</code> - The progress of the EC2 Fleet ( <code>error</code> | <code>pending-fulfillment</code> | <code>pending-termination</code> | <code>fulfilled</code>).</p> </li>   <li> <p> <code>excess-capacity-termination-policy</code> - Indicates whether to terminate running instances if the target capacity is decreased below the current EC2 Fleet size (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>fleet-state</code> - The state of the EC2 Fleet (<code>submitted</code> | <code>active</code> | <code>deleted</code> | <code>failed</code> | <code>deleted-running</code> | <code>deleted-terminating</code> | <code>modifying</code>).</p> </li>   <li> <p> <code>replace-unhealthy-instances</code> - Indicates whether EC2 Fleet should replace unhealthy instances (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>type</code> - The type of request (<code>instant</code> | <code>request</code> | <code>maintain</code>).</p> </li>  </ul>
    /// - On success, responds with [`DescribeFleetsOutput`](crate::output::DescribeFleetsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeFleetsOutput::next_token): <p>The token for the next set of results.</p>
    ///   - [`fleets(Option<Vec<FleetData>>)`](crate::output::DescribeFleetsOutput::fleets): <p>Information about the EC2 Fleets.</p>
    /// - On failure, responds with [`SdkError<DescribeFleetsError>`](crate::error::DescribeFleetsError)
    pub fn describe_fleets(&self) -> fluent_builders::DescribeFleets {
        fluent_builders::DescribeFleets::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeFlowLogs`](crate::client::fluent_builders::DescribeFlowLogs) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeFlowLogs::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeFlowLogs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeFlowLogs::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filter(Vec<Filter>)`](crate::client::fluent_builders::DescribeFlowLogs::filter) / [`set_filter(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeFlowLogs::set_filter): <p>One or more filters.</p>  <ul>   <li> <p> <code>deliver-log-status</code> - The status of the logs delivery (<code>SUCCESS</code> | <code>FAILED</code>).</p> </li>   <li> <p> <code>log-destination-type</code> - The type of destination for the flow log data (<code>cloud-watch-logs</code> | <code>s3</code> | <code>kinesis-data-firehose</code>).</p> </li>   <li> <p> <code>flow-log-id</code> - The ID of the flow log.</p> </li>   <li> <p> <code>log-group-name</code> - The name of the log group.</p> </li>   <li> <p> <code>resource-id</code> - The ID of the VPC, subnet, or network interface.</p> </li>   <li> <p> <code>traffic-type</code> - The type of traffic (<code>ACCEPT</code> | <code>REJECT</code> | <code>ALL</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`flow_log_ids(Vec<String>)`](crate::client::fluent_builders::DescribeFlowLogs::flow_log_ids) / [`set_flow_log_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeFlowLogs::set_flow_log_ids): <p>One or more flow log IDs.</p>  <p>Constraint: Maximum of 1000 flow log IDs.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeFlowLogs::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeFlowLogs::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeFlowLogs::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeFlowLogs::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeFlowLogsOutput`](crate::output::DescribeFlowLogsOutput) with field(s):
    ///   - [`flow_logs(Option<Vec<FlowLog>>)`](crate::output::DescribeFlowLogsOutput::flow_logs): <p>Information about the flow logs.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeFlowLogsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeFlowLogsError>`](crate::error::DescribeFlowLogsError)
    pub fn describe_flow_logs(&self) -> fluent_builders::DescribeFlowLogs {
        fluent_builders::DescribeFlowLogs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeFpgaImageAttribute`](crate::client::fluent_builders::DescribeFpgaImageAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeFpgaImageAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeFpgaImageAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`fpga_image_id(impl Into<String>)`](crate::client::fluent_builders::DescribeFpgaImageAttribute::fpga_image_id) / [`set_fpga_image_id(Option<String>)`](crate::client::fluent_builders::DescribeFpgaImageAttribute::set_fpga_image_id): <p>The ID of the AFI.</p>
    ///   - [`attribute(FpgaImageAttributeName)`](crate::client::fluent_builders::DescribeFpgaImageAttribute::attribute) / [`set_attribute(Option<FpgaImageAttributeName>)`](crate::client::fluent_builders::DescribeFpgaImageAttribute::set_attribute): <p>The AFI attribute.</p>
    /// - On success, responds with [`DescribeFpgaImageAttributeOutput`](crate::output::DescribeFpgaImageAttributeOutput) with field(s):
    ///   - [`fpga_image_attribute(Option<FpgaImageAttribute>)`](crate::output::DescribeFpgaImageAttributeOutput::fpga_image_attribute): <p>Information about the attribute.</p>
    /// - On failure, responds with [`SdkError<DescribeFpgaImageAttributeError>`](crate::error::DescribeFpgaImageAttributeError)
    pub fn describe_fpga_image_attribute(&self) -> fluent_builders::DescribeFpgaImageAttribute {
        fluent_builders::DescribeFpgaImageAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeFpgaImages`](crate::client::fluent_builders::DescribeFpgaImages) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeFpgaImages::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeFpgaImages::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeFpgaImages::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`fpga_image_ids(Vec<String>)`](crate::client::fluent_builders::DescribeFpgaImages::fpga_image_ids) / [`set_fpga_image_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeFpgaImages::set_fpga_image_ids): <p>The AFI IDs.</p>
    ///   - [`owners(Vec<String>)`](crate::client::fluent_builders::DescribeFpgaImages::owners) / [`set_owners(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeFpgaImages::set_owners): <p>Filters the AFI by owner. Specify an Amazon Web Services account ID, <code>self</code> (owner is the sender of the request), or an Amazon Web Services owner alias (valid values are <code>amazon</code> | <code>aws-marketplace</code>).</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeFpgaImages::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeFpgaImages::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>create-time</code> - The creation time of the AFI.</p> </li>   <li> <p> <code>fpga-image-id</code> - The FPGA image identifier (AFI ID).</p> </li>   <li> <p> <code>fpga-image-global-id</code> - The global FPGA image identifier (AGFI ID).</p> </li>   <li> <p> <code>name</code> - The name of the AFI.</p> </li>   <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the AFI owner.</p> </li>   <li> <p> <code>product-code</code> - The product code.</p> </li>   <li> <p> <code>shell-version</code> - The version of the Amazon Web Services Shell that was used to create the bitstream.</p> </li>   <li> <p> <code>state</code> - The state of the AFI (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>unavailable</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>update-time</code> - The time of the most recent update.</p> </li>  </ul>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeFpgaImages::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeFpgaImages::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeFpgaImages::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeFpgaImages::set_max_results): <p>The maximum number of results to return in a single call.</p>
    /// - On success, responds with [`DescribeFpgaImagesOutput`](crate::output::DescribeFpgaImagesOutput) with field(s):
    ///   - [`fpga_images(Option<Vec<FpgaImage>>)`](crate::output::DescribeFpgaImagesOutput::fpga_images): <p>Information about the FPGA images.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeFpgaImagesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeFpgaImagesError>`](crate::error::DescribeFpgaImagesError)
    pub fn describe_fpga_images(&self) -> fluent_builders::DescribeFpgaImages {
        fluent_builders::DescribeFpgaImages::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeHostReservationOfferings`](crate::client::fluent_builders::DescribeHostReservationOfferings) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeHostReservationOfferings::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filter(Vec<Filter>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::filter) / [`set_filter(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::set_filter): <p>The filters.</p>  <ul>   <li> <p> <code>instance-family</code> - The instance family of the offering (for example, <code>m4</code>).</p> </li>   <li> <p> <code>payment-option</code> - The payment option (<code>NoUpfront</code> | <code>PartialUpfront</code> | <code>AllUpfront</code>).</p> </li>  </ul>
    ///   - [`max_duration(i32)`](crate::client::fluent_builders::DescribeHostReservationOfferings::max_duration) / [`set_max_duration(Option<i32>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::set_max_duration): <p>This is the maximum duration of the reservation to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 94608000 for three years.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeHostReservationOfferings::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
    ///   - [`min_duration(i32)`](crate::client::fluent_builders::DescribeHostReservationOfferings::min_duration) / [`set_min_duration(Option<i32>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::set_min_duration): <p>This is the minimum duration of the reservation you'd like to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 31536000 for one year.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::set_next_token): <p>The token to use to retrieve the next page of results.</p>
    ///   - [`offering_id(impl Into<String>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::offering_id) / [`set_offering_id(Option<String>)`](crate::client::fluent_builders::DescribeHostReservationOfferings::set_offering_id): <p>The ID of the reservation offering.</p>
    /// - On success, responds with [`DescribeHostReservationOfferingsOutput`](crate::output::DescribeHostReservationOfferingsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeHostReservationOfferingsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`offering_set(Option<Vec<HostOffering>>)`](crate::output::DescribeHostReservationOfferingsOutput::offering_set): <p>Information about the offerings.</p>
    /// - On failure, responds with [`SdkError<DescribeHostReservationOfferingsError>`](crate::error::DescribeHostReservationOfferingsError)
    pub fn describe_host_reservation_offerings(
        &self,
    ) -> fluent_builders::DescribeHostReservationOfferings {
        fluent_builders::DescribeHostReservationOfferings::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeHostReservations`](crate::client::fluent_builders::DescribeHostReservations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeHostReservations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filter(Vec<Filter>)`](crate::client::fluent_builders::DescribeHostReservations::filter) / [`set_filter(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeHostReservations::set_filter): <p>The filters.</p>  <ul>   <li> <p> <code>instance-family</code> - The instance family (for example, <code>m4</code>).</p> </li>   <li> <p> <code>payment-option</code> - The payment option (<code>NoUpfront</code> | <code>PartialUpfront</code> | <code>AllUpfront</code>).</p> </li>   <li> <p> <code>state</code> - The state of the reservation (<code>payment-pending</code> | <code>payment-failed</code> | <code>active</code> | <code>retired</code>).</p> </li>   <li> <p> <code>tag:     <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`host_reservation_id_set(Vec<String>)`](crate::client::fluent_builders::DescribeHostReservations::host_reservation_id_set) / [`set_host_reservation_id_set(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeHostReservations::set_host_reservation_id_set): <p>The host reservation IDs.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeHostReservations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeHostReservations::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeHostReservations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeHostReservations::set_next_token): <p>The token to use to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeHostReservationsOutput`](crate::output::DescribeHostReservationsOutput) with field(s):
    ///   - [`host_reservation_set(Option<Vec<HostReservation>>)`](crate::output::DescribeHostReservationsOutput::host_reservation_set): <p>Details about the reservation's configuration.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeHostReservationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeHostReservationsError>`](crate::error::DescribeHostReservationsError)
    pub fn describe_host_reservations(&self) -> fluent_builders::DescribeHostReservations {
        fluent_builders::DescribeHostReservations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeHosts`](crate::client::fluent_builders::DescribeHosts) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeHosts::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filter(Vec<Filter>)`](crate::client::fluent_builders::DescribeHosts::filter) / [`set_filter(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeHosts::set_filter): <p>The filters.</p>  <ul>   <li> <p> <code>auto-placement</code> - Whether auto-placement is enabled or disabled (<code>on</code> | <code>off</code>).</p> </li>   <li> <p> <code>availability-zone</code> - The Availability Zone of the host.</p> </li>   <li> <p> <code>client-token</code> - The idempotency token that you provided when you allocated the host.</p> </li>   <li> <p> <code>host-reservation-id</code> - The ID of the reservation assigned to this host.</p> </li>   <li> <p> <code>instance-type</code> - The instance type size that the Dedicated Host is configured to support.</p> </li>   <li> <p> <code>state</code> - The allocation state of the Dedicated Host (<code>available</code> | <code>under-assessment</code> | <code>permanent-failure</code> | <code>released</code> | <code>released-permanent-failure</code>).</p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`host_ids(Vec<String>)`](crate::client::fluent_builders::DescribeHosts::host_ids) / [`set_host_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeHosts::set_host_ids): <p>The IDs of the Dedicated Hosts. The IDs are used for targeted instance launches.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeHosts::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeHosts::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>  <p>You cannot specify this parameter and the host IDs parameter in the same request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeHosts::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeHosts::set_next_token): <p>The token to use to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeHostsOutput`](crate::output::DescribeHostsOutput) with field(s):
    ///   - [`hosts(Option<Vec<Host>>)`](crate::output::DescribeHostsOutput::hosts): <p>Information about the Dedicated Hosts.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeHostsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeHostsError>`](crate::error::DescribeHostsError)
    pub fn describe_hosts(&self) -> fluent_builders::DescribeHosts {
        fluent_builders::DescribeHosts::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeIamInstanceProfileAssociations`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_ids(Vec<String>)`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::association_ids) / [`set_association_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::set_association_ids): <p>The IAM instance profile associations.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>   <li> <p> <code>state</code> - The state of the association (<code>associating</code> | <code>associated</code> | <code>disassociating</code>).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeIamInstanceProfileAssociations::set_next_token): <p>The token to request the next page of results.</p>
    /// - On success, responds with [`DescribeIamInstanceProfileAssociationsOutput`](crate::output::DescribeIamInstanceProfileAssociationsOutput) with field(s):
    ///   - [`iam_instance_profile_associations(Option<Vec<IamInstanceProfileAssociation>>)`](crate::output::DescribeIamInstanceProfileAssociationsOutput::iam_instance_profile_associations): <p>Information about the IAM instance profile associations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeIamInstanceProfileAssociationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeIamInstanceProfileAssociationsError>`](crate::error::DescribeIamInstanceProfileAssociationsError)
    pub fn describe_iam_instance_profile_associations(
        &self,
    ) -> fluent_builders::DescribeIamInstanceProfileAssociations {
        fluent_builders::DescribeIamInstanceProfileAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeIdentityIdFormat`](crate::client::fluent_builders::DescribeIdentityIdFormat) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`principal_arn(impl Into<String>)`](crate::client::fluent_builders::DescribeIdentityIdFormat::principal_arn) / [`set_principal_arn(Option<String>)`](crate::client::fluent_builders::DescribeIdentityIdFormat::set_principal_arn): <p>The ARN of the principal, which can be an IAM role, IAM user, or the root user.</p>
    ///   - [`resource(impl Into<String>)`](crate::client::fluent_builders::DescribeIdentityIdFormat::resource) / [`set_resource(Option<String>)`](crate::client::fluent_builders::DescribeIdentityIdFormat::set_resource): <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
    /// - On success, responds with [`DescribeIdentityIdFormatOutput`](crate::output::DescribeIdentityIdFormatOutput) with field(s):
    ///   - [`statuses(Option<Vec<IdFormat>>)`](crate::output::DescribeIdentityIdFormatOutput::statuses): <p>Information about the ID format for the resources.</p>
    /// - On failure, responds with [`SdkError<DescribeIdentityIdFormatError>`](crate::error::DescribeIdentityIdFormatError)
    pub fn describe_identity_id_format(&self) -> fluent_builders::DescribeIdentityIdFormat {
        fluent_builders::DescribeIdentityIdFormat::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeIdFormat`](crate::client::fluent_builders::DescribeIdFormat) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`resource(impl Into<String>)`](crate::client::fluent_builders::DescribeIdFormat::resource) / [`set_resource(Option<String>)`](crate::client::fluent_builders::DescribeIdFormat::set_resource): <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
    /// - On success, responds with [`DescribeIdFormatOutput`](crate::output::DescribeIdFormatOutput) with field(s):
    ///   - [`statuses(Option<Vec<IdFormat>>)`](crate::output::DescribeIdFormatOutput::statuses): <p>Information about the ID format for the resource.</p>
    /// - On failure, responds with [`SdkError<DescribeIdFormatError>`](crate::error::DescribeIdFormatError)
    pub fn describe_id_format(&self) -> fluent_builders::DescribeIdFormat {
        fluent_builders::DescribeIdFormat::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeImageAttribute`](crate::client::fluent_builders::DescribeImageAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(ImageAttributeName)`](crate::client::fluent_builders::DescribeImageAttribute::attribute) / [`set_attribute(Option<ImageAttributeName>)`](crate::client::fluent_builders::DescribeImageAttribute::set_attribute): <p>The AMI attribute.</p>  <p> <b>Note</b>: The <code>blockDeviceMapping</code> attribute is deprecated. Using this attribute returns the <code>Client.AuthFailure</code> error. To get information about the block device mappings for an AMI, use the <code>DescribeImages</code> action.</p>
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::DescribeImageAttribute::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::DescribeImageAttribute::set_image_id): <p>The ID of the AMI.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeImageAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeImageAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeImageAttributeOutput`](crate::output::DescribeImageAttributeOutput) with field(s):
    ///   - [`block_device_mappings(Option<Vec<BlockDeviceMapping>>)`](crate::output::DescribeImageAttributeOutput::block_device_mappings): <p>The block device mapping entries.</p>
    ///   - [`image_id(Option<String>)`](crate::output::DescribeImageAttributeOutput::image_id): <p>The ID of the AMI.</p>
    ///   - [`launch_permissions(Option<Vec<LaunchPermission>>)`](crate::output::DescribeImageAttributeOutput::launch_permissions): <p>The launch permissions.</p>
    ///   - [`product_codes(Option<Vec<ProductCode>>)`](crate::output::DescribeImageAttributeOutput::product_codes): <p>The product codes.</p>
    ///   - [`description(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::description): <p>A description for the AMI.</p>
    ///   - [`kernel_id(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::kernel_id): <p>The kernel ID.</p>
    ///   - [`ramdisk_id(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::ramdisk_id): <p>The RAM disk ID.</p>
    ///   - [`sriov_net_support(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::sriov_net_support): <p>Indicates whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.</p>
    ///   - [`boot_mode(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::boot_mode): <p>The boot mode.</p>
    ///   - [`tpm_support(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::tpm_support): <p>If the image is configured for NitroTPM support, the value is <code>v2.0</code>.</p>
    ///   - [`uefi_data(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::uefi_data): <p>Base64 representation of the non-volatile UEFI variable store. To retrieve the UEFI data, use the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData">GetInstanceUefiData</a> command. You can inspect and modify the UEFI data by using the <a href="https://github.com/awslabs/python-uefivars">python-uefivars tool</a> on GitHub. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html">UEFI Secure Boot</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`last_launched_time(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::last_launched_time): <p>The date and time, in <a href="http://www.iso.org/iso/iso8601">ISO 8601 date-time format</a>, when the AMI was last used to launch an EC2 instance. When the AMI is used to launch an instance, there is a 24-hour delay before that usage is reported.</p> <note>   <p> <code>lastLaunchedTime</code> data is available starting April 2017.</p>  </note>
    ///   - [`imds_support(Option<AttributeValue>)`](crate::output::DescribeImageAttributeOutput::imds_support): <p>If <code>v2.0</code>, it indicates that IMDSv2 is specified in the AMI. Instances launched from this AMI will have <code>HttpTokens</code> automatically set to <code>required</code> so that, by default, the instance requires that IMDSv2 is used when requesting instance metadata. In addition, <code>HttpPutResponseHopLimit</code> is set to <code>2</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration">Configure the AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// - On failure, responds with [`SdkError<DescribeImageAttributeError>`](crate::error::DescribeImageAttributeError)
    pub fn describe_image_attribute(&self) -> fluent_builders::DescribeImageAttribute {
        fluent_builders::DescribeImageAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeImages`](crate::client::fluent_builders::DescribeImages) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeImages::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`executable_users(Vec<String>)`](crate::client::fluent_builders::DescribeImages::executable_users) / [`set_executable_users(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeImages::set_executable_users): <p>Scopes the images by users with explicit launch permissions. Specify an Amazon Web Services account ID, <code>self</code> (the sender of the request), or <code>all</code> (public AMIs).</p>  <ul>   <li> <p>If you specify an Amazon Web Services account ID that is not your own, only AMIs shared with that specific Amazon Web Services account ID are returned. However, AMIs that are shared with the account’s organization or organizational unit (OU) are not returned.</p> </li>   <li> <p>If you specify <code>self</code> or your own Amazon Web Services account ID, AMIs shared with your account are returned. In addition, AMIs that are shared with the organization or OU of which you are member are also returned. </p> </li>   <li> <p>If you specify <code>all</code>, all public AMIs are returned.</p> </li>  </ul>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeImages::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeImages::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>architecture</code> - The image architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li>   <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean value that indicates whether the Amazon EBS volume is deleted on instance termination.</p> </li>   <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>   <li> <p> <code>block-device-mapping.snapshot-id</code> - The ID of the snapshot used for the Amazon EBS volume.</p> </li>   <li> <p> <code>block-device-mapping.volume-size</code> - The volume size of the Amazon EBS volume, in GiB.</p> </li>   <li> <p> <code>block-device-mapping.volume-type</code> - The volume type of the Amazon EBS volume (<code>io1</code> | <code>io2</code> | <code>gp2</code> | <code>gp3</code> | <code>sc1 </code>| <code>st1</code> | <code>standard</code>).</p> </li>   <li> <p> <code>block-device-mapping.encrypted</code> - A Boolean that indicates whether the Amazon EBS volume is encrypted.</p> </li>   <li> <p> <code>creation-date</code> - The time when the image was created, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li>   <li> <p> <code>description</code> - The description of the image (provided during image creation).</p> </li>   <li> <p> <code>ena-support</code> - A Boolean that indicates whether enhanced networking with ENA is enabled.</p> </li>   <li> <p> <code>hypervisor</code> - The hypervisor type (<code>ovm</code> | <code>xen</code>).</p> </li>   <li> <p> <code>image-id</code> - The ID of the image.</p> </li>   <li> <p> <code>image-type</code> - The image type (<code>machine</code> | <code>kernel</code> | <code>ramdisk</code>).</p> </li>   <li> <p> <code>is-public</code> - A Boolean that indicates whether the image is public.</p> </li>   <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>   <li> <p> <code>manifest-location</code> - The location of the image manifest.</p> </li>   <li> <p> <code>name</code> - The name of the AMI (provided during image creation).</p> </li>   <li> <p> <code>owner-alias</code> - The owner alias (<code>amazon</code> | <code>aws-marketplace</code>). The valid aliases are defined in an Amazon-maintained list. This is not the Amazon Web Services account alias that can be set using the IAM console. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li>   <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li>   <li> <p> <code>platform</code> - The platform. The only supported value is <code>windows</code>.</p> </li>   <li> <p> <code>product-code</code> - The product code.</p> </li>   <li> <p> <code>product-code.type</code> - The type of the product code (<code>marketplace</code>).</p> </li>   <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li>   <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li>   <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li>   <li> <p> <code>state</code> - The state of the image (<code>available</code> | <code>pending</code> | <code>failed</code>).</p> </li>   <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li>   <li> <p> <code>state-reason-message</code> - The message for the state change.</p> </li>   <li> <p> <code>sriov-net-support</code> - A value of <code>simple</code> indicates that enhanced networking with the Intel 82599 VF interface is enabled.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>virtualization-type</code> - The virtualization type (<code>paravirtual</code> | <code>hvm</code>).</p> </li>  </ul>
    ///   - [`image_ids(Vec<String>)`](crate::client::fluent_builders::DescribeImages::image_ids) / [`set_image_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeImages::set_image_ids): <p>The image IDs.</p>  <p>Default: Describes all images available to you.</p>
    ///   - [`owners(Vec<String>)`](crate::client::fluent_builders::DescribeImages::owners) / [`set_owners(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeImages::set_owners): <p>Scopes the results to images with the specified owners. You can specify a combination of Amazon Web Services account IDs, <code>self</code>, <code>amazon</code>, and <code>aws-marketplace</code>. If you omit this parameter, the results include all images for which you have launch permissions, regardless of ownership.</p>
    ///   - [`include_deprecated(bool)`](crate::client::fluent_builders::DescribeImages::include_deprecated) / [`set_include_deprecated(Option<bool>)`](crate::client::fluent_builders::DescribeImages::set_include_deprecated): <p>Specifies whether to include deprecated AMIs.</p>  <p>Default: No deprecated AMIs are included in the response.</p> <note>   <p>If you are the AMI owner, all deprecated AMIs appear in the response regardless of what you specify for this parameter.</p>  </note>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeImages::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeImages::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeImages::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeImages::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeImages::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeImages::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeImagesOutput`](crate::output::DescribeImagesOutput) with field(s):
    ///   - [`images(Option<Vec<Image>>)`](crate::output::DescribeImagesOutput::images): <p>Information about the images.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeImagesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeImagesError>`](crate::error::DescribeImagesError)
    pub fn describe_images(&self) -> fluent_builders::DescribeImages {
        fluent_builders::DescribeImages::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeImportImageTasks`](crate::client::fluent_builders::DescribeImportImageTasks) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeImportImageTasks::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeImportImageTasks::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeImportImageTasks::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeImportImageTasks::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeImportImageTasks::set_filters): <p>Filter tasks using the <code>task-state</code> filter and one of the following values: <code>active</code>, <code>completed</code>, <code>deleting</code>, or <code>deleted</code>.</p>
    ///   - [`import_task_ids(Vec<String>)`](crate::client::fluent_builders::DescribeImportImageTasks::import_task_ids) / [`set_import_task_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeImportImageTasks::set_import_task_ids): <p>The IDs of the import image tasks.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeImportImageTasks::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeImportImageTasks::set_max_results): <p>The maximum number of results to return in a single call.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeImportImageTasks::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeImportImageTasks::set_next_token): <p>A token that indicates the next page of results.</p>
    /// - On success, responds with [`DescribeImportImageTasksOutput`](crate::output::DescribeImportImageTasksOutput) with field(s):
    ///   - [`import_image_tasks(Option<Vec<ImportImageTask>>)`](crate::output::DescribeImportImageTasksOutput::import_image_tasks): <p>A list of zero or more import image tasks that are currently active or were completed or canceled in the previous 7 days.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeImportImageTasksOutput::next_token): <p>The token to use to get the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeImportImageTasksError>`](crate::error::DescribeImportImageTasksError)
    pub fn describe_import_image_tasks(&self) -> fluent_builders::DescribeImportImageTasks {
        fluent_builders::DescribeImportImageTasks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeImportSnapshotTasks`](crate::client::fluent_builders::DescribeImportSnapshotTasks) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeImportSnapshotTasks::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::set_filters): <p>The filters.</p>
    ///   - [`import_task_ids(Vec<String>)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::import_task_ids) / [`set_import_task_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::set_import_task_ids): <p>A list of import snapshot task IDs.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeImportSnapshotTasks::set_next_token): <p>A token that indicates the next page of results.</p>
    /// - On success, responds with [`DescribeImportSnapshotTasksOutput`](crate::output::DescribeImportSnapshotTasksOutput) with field(s):
    ///   - [`import_snapshot_tasks(Option<Vec<ImportSnapshotTask>>)`](crate::output::DescribeImportSnapshotTasksOutput::import_snapshot_tasks): <p>A list of zero or more import snapshot tasks that are currently active or were completed or canceled in the previous 7 days.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeImportSnapshotTasksOutput::next_token): <p>The token to use to get the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeImportSnapshotTasksError>`](crate::error::DescribeImportSnapshotTasksError)
    pub fn describe_import_snapshot_tasks(&self) -> fluent_builders::DescribeImportSnapshotTasks {
        fluent_builders::DescribeImportSnapshotTasks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInstanceAttribute`](crate::client::fluent_builders::DescribeInstanceAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(InstanceAttributeName)`](crate::client::fluent_builders::DescribeInstanceAttribute::attribute) / [`set_attribute(Option<InstanceAttributeName>)`](crate::client::fluent_builders::DescribeInstanceAttribute::set_attribute): <p>The instance attribute.</p>  <p>Note: The <code>enaSupport</code> attribute is not supported at this time.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInstanceAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInstanceAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::DescribeInstanceAttribute::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::DescribeInstanceAttribute::set_instance_id): <p>The ID of the instance.</p>
    /// - On success, responds with [`DescribeInstanceAttributeOutput`](crate::output::DescribeInstanceAttributeOutput) with field(s):
    ///   - [`groups(Option<Vec<GroupIdentifier>>)`](crate::output::DescribeInstanceAttributeOutput::groups): <p>The security groups associated with the instance.</p>
    ///   - [`block_device_mappings(Option<Vec<InstanceBlockDeviceMapping>>)`](crate::output::DescribeInstanceAttributeOutput::block_device_mappings): <p>The block device mapping of the instance.</p>
    ///   - [`disable_api_termination(Option<AttributeBooleanValue>)`](crate::output::DescribeInstanceAttributeOutput::disable_api_termination): <p>If the value is <code>true</code>, you can't terminate the instance through the Amazon EC2 console, CLI, or API; otherwise, you can.</p>
    ///   - [`ena_support(Option<AttributeBooleanValue>)`](crate::output::DescribeInstanceAttributeOutput::ena_support): <p>Indicates whether enhanced networking with ENA is enabled.</p>
    ///   - [`enclave_options(Option<EnclaveOptions>)`](crate::output::DescribeInstanceAttributeOutput::enclave_options): <p>To enable the instance for Amazon Web Services Nitro Enclaves, set this parameter to <code>true</code>; otherwise, set it to <code>false</code>.</p>
    ///   - [`ebs_optimized(Option<AttributeBooleanValue>)`](crate::output::DescribeInstanceAttributeOutput::ebs_optimized): <p>Indicates whether the instance is optimized for Amazon EBS I/O.</p>
    ///   - [`instance_id(Option<String>)`](crate::output::DescribeInstanceAttributeOutput::instance_id): <p>The ID of the instance.</p>
    ///   - [`instance_initiated_shutdown_behavior(Option<AttributeValue>)`](crate::output::DescribeInstanceAttributeOutput::instance_initiated_shutdown_behavior): <p>Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).</p>
    ///   - [`instance_type(Option<AttributeValue>)`](crate::output::DescribeInstanceAttributeOutput::instance_type): <p>The instance type.</p>
    ///   - [`kernel_id(Option<AttributeValue>)`](crate::output::DescribeInstanceAttributeOutput::kernel_id): <p>The kernel ID.</p>
    ///   - [`product_codes(Option<Vec<ProductCode>>)`](crate::output::DescribeInstanceAttributeOutput::product_codes): <p>A list of product codes.</p>
    ///   - [`ramdisk_id(Option<AttributeValue>)`](crate::output::DescribeInstanceAttributeOutput::ramdisk_id): <p>The RAM disk ID.</p>
    ///   - [`root_device_name(Option<AttributeValue>)`](crate::output::DescribeInstanceAttributeOutput::root_device_name): <p>The device name of the root device volume (for example, <code>/dev/sda1</code>).</p>
    ///   - [`source_dest_check(Option<AttributeBooleanValue>)`](crate::output::DescribeInstanceAttributeOutput::source_dest_check): <p>Enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. If the value is <code>true</code>, source/destination checks are enabled; otherwise, they are disabled. The default value is <code>true</code>. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.</p>
    ///   - [`sriov_net_support(Option<AttributeValue>)`](crate::output::DescribeInstanceAttributeOutput::sriov_net_support): <p>Indicates whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.</p>
    ///   - [`user_data(Option<AttributeValue>)`](crate::output::DescribeInstanceAttributeOutput::user_data): <p>The user data.</p>
    ///   - [`disable_api_stop(Option<AttributeBooleanValue>)`](crate::output::DescribeInstanceAttributeOutput::disable_api_stop): <p>To enable the instance for Amazon Web Services Stop Protection, set this parameter to <code>true</code>; otherwise, set it to <code>false</code>.</p>
    /// - On failure, responds with [`SdkError<DescribeInstanceAttributeError>`](crate::error::DescribeInstanceAttributeError)
    pub fn describe_instance_attribute(&self) -> fluent_builders::DescribeInstanceAttribute {
        fluent_builders::DescribeInstanceAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInstanceCreditSpecifications`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>  </ul>
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::set_instance_ids): <p>The instance IDs.</p>  <p>Default: Describes all your instances.</p>  <p>Constraints: Maximum 1000 explicitly specified instance IDs.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeInstanceCreditSpecifications::set_next_token): <p>The token to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeInstanceCreditSpecificationsOutput`](crate::output::DescribeInstanceCreditSpecificationsOutput) with field(s):
    ///   - [`instance_credit_specifications(Option<Vec<InstanceCreditSpecification>>)`](crate::output::DescribeInstanceCreditSpecificationsOutput::instance_credit_specifications): <p>Information about the credit option for CPU usage of an instance.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeInstanceCreditSpecificationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeInstanceCreditSpecificationsError>`](crate::error::DescribeInstanceCreditSpecificationsError)
    pub fn describe_instance_credit_specifications(
        &self,
    ) -> fluent_builders::DescribeInstanceCreditSpecifications {
        fluent_builders::DescribeInstanceCreditSpecifications::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInstanceEventNotificationAttributes`](crate::client::fluent_builders::DescribeInstanceEventNotificationAttributes) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInstanceEventNotificationAttributes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInstanceEventNotificationAttributes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeInstanceEventNotificationAttributesOutput`](crate::output::DescribeInstanceEventNotificationAttributesOutput) with field(s):
    ///   - [`instance_tag_attribute(Option<InstanceTagNotificationAttribute>)`](crate::output::DescribeInstanceEventNotificationAttributesOutput::instance_tag_attribute): <p>Information about the registered tag keys.</p>
    /// - On failure, responds with [`SdkError<DescribeInstanceEventNotificationAttributesError>`](crate::error::DescribeInstanceEventNotificationAttributesError)
    pub fn describe_instance_event_notification_attributes(
        &self,
    ) -> fluent_builders::DescribeInstanceEventNotificationAttributes {
        fluent_builders::DescribeInstanceEventNotificationAttributes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInstanceEventWindows`](crate::client::fluent_builders::DescribeInstanceEventWindows) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeInstanceEventWindows::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInstanceEventWindows::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInstanceEventWindows::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_event_window_ids(Vec<String>)`](crate::client::fluent_builders::DescribeInstanceEventWindows::instance_event_window_ids) / [`set_instance_event_window_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeInstanceEventWindows::set_instance_event_window_ids): <p>The IDs of the event windows.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeInstanceEventWindows::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeInstanceEventWindows::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>dedicated-host-id</code> - The event windows associated with the specified Dedicated Host ID.</p> </li>   <li> <p> <code>event-window-name</code> - The event windows associated with the specified names. </p> </li>   <li> <p> <code>instance-id</code> - The event windows associated with the specified instance ID.</p> </li>   <li> <p> <code>instance-tag</code> - The event windows associated with the specified tag and value.</p> </li>   <li> <p> <code>instance-tag-key</code> - The event windows associated with the specified tag key, regardless of the value.</p> </li>   <li> <p> <code>instance-tag-value</code> - The event windows associated with the specified tag value, regardless of the key.</p> </li>   <li> <p> <code>tag:     <key></key></code> - The key/value combination of a tag assigned to the event window. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>CMX</code>, specify <code>tag:Owner</code> for the filter name and <code>CMX</code> for the filter value. </p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the event window. Use this filter to find all event windows that have a tag with a specific key, regardless of the tag value. </p> </li>   <li> <p> <code>tag-value</code> - The value of a tag assigned to the event window. Use this filter to find all event windows that have a tag with a specific value, regardless of the tag key. </p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeInstanceEventWindows::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeInstanceEventWindows::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 20 and 500. You cannot specify this parameter and the event window IDs parameter in the same call.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeInstanceEventWindows::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeInstanceEventWindows::set_next_token): <p>The token to request the next page of results.</p>
    /// - On success, responds with [`DescribeInstanceEventWindowsOutput`](crate::output::DescribeInstanceEventWindowsOutput) with field(s):
    ///   - [`instance_event_windows(Option<Vec<InstanceEventWindow>>)`](crate::output::DescribeInstanceEventWindowsOutput::instance_event_windows): <p>Information about the event windows.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeInstanceEventWindowsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return. </p>
    /// - On failure, responds with [`SdkError<DescribeInstanceEventWindowsError>`](crate::error::DescribeInstanceEventWindowsError)
    pub fn describe_instance_event_windows(&self) -> fluent_builders::DescribeInstanceEventWindows {
        fluent_builders::DescribeInstanceEventWindows::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInstances`](crate::client::fluent_builders::DescribeInstances) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeInstances::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeInstances::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeInstances::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>affinity</code> - The affinity setting for an instance running on a Dedicated Host (<code>default</code> | <code>host</code>).</p> </li>   <li> <p> <code>architecture</code> - The instance architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li>   <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>   <li> <p> <code>block-device-mapping.attach-time</code> - The attach time for an EBS volume mapped to the instance, for example, <code>2010-09-15T17:15:20.000Z</code>.</p> </li>   <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean that indicates whether the EBS volume is deleted on instance termination.</p> </li>   <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>   <li> <p> <code>block-device-mapping.status</code> - The status for the EBS volume (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>   <li> <p> <code>block-device-mapping.volume-id</code> - The volume ID of the EBS volume.</p> </li>   <li> <p> <code>capacity-reservation-id</code> - The ID of the Capacity Reservation into which the instance was launched.</p> </li>   <li> <p> <code>client-token</code> - The idempotency token you provided when you launched the instance.</p> </li>   <li> <p> <code>dns-name</code> - The public DNS name of the instance.</p> </li>   <li> <p> <code>group-id</code> - The ID of the security group for the instance. EC2-Classic only.</p> </li>   <li> <p> <code>group-name</code> - The name of the security group for the instance. EC2-Classic only.</p> </li>   <li> <p> <code>hibernation-options.configured</code> - A Boolean that indicates whether the instance is enabled for hibernation. A value of <code>true</code> means that the instance is enabled for hibernation. </p> </li>   <li> <p> <code>host-id</code> - The ID of the Dedicated Host on which the instance is running, if applicable.</p> </li>   <li> <p> <code>hypervisor</code> - The hypervisor type of the instance (<code>ovm</code> | <code>xen</code>). The value <code>xen</code> is used for both Xen and Nitro hypervisors.</p> </li>   <li> <p> <code>iam-instance-profile.arn</code> - The instance profile associated with the instance. Specified as an ARN.</p> </li>   <li> <p> <code>image-id</code> - The ID of the image used to launch the instance.</p> </li>   <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>   <li> <p> <code>instance-lifecycle</code> - Indicates whether this is a Spot Instance or a Scheduled Instance (<code>spot</code> | <code>scheduled</code>).</p> </li>   <li> <p> <code>instance-state-code</code> - The state of the instance, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are: 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li>   <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li>   <li> <p> <code>instance-type</code> - The type of instance (for example, <code>t2.micro</code>).</p> </li>   <li> <p> <code>instance.group-id</code> - The ID of the security group for the instance. </p> </li>   <li> <p> <code>instance.group-name</code> - The name of the security group for the instance. </p> </li>   <li> <p> <code>ip-address</code> - The public IPv4 address of the instance.</p> </li>   <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>   <li> <p> <code>key-name</code> - The name of the key pair used when the instance was launched.</p> </li>   <li> <p> <code>launch-index</code> - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on). </p> </li>   <li> <p> <code>launch-time</code> - The time when the instance was launched, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li>   <li> <p> <code>metadata-options.http-tokens</code> - The metadata request authorization state (<code>optional</code> | <code>required</code>)</p> </li>   <li> <p> <code>metadata-options.http-put-response-hop-limit</code> - The HTTP metadata request put response hop limit (integer, possible values <code>1</code> to <code>64</code>)</p> </li>   <li> <p> <code>metadata-options.http-endpoint</code> - The status of access to the HTTP metadata endpoint on your instance (<code>enabled</code> | <code>disabled</code>)</p> </li>   <li> <p> <code>metadata-options.instance-metadata-tags</code> - The status of access to instance tags from the instance metadata (<code>enabled</code> | <code>disabled</code>)</p> </li>   <li> <p> <code>monitoring-state</code> - Indicates whether detailed monitoring is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li>   <li> <p> <code>network-interface.addresses.private-ip-address</code> - The private IPv4 address associated with the network interface.</p> </li>   <li> <p> <code>network-interface.addresses.primary</code> - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.</p> </li>   <li> <p> <code>network-interface.addresses.association.public-ip</code> - The ID of the association of an Elastic IP address (IPv4) with a network interface.</p> </li>   <li> <p> <code>network-interface.addresses.association.ip-owner-id</code> - The owner ID of the private IPv4 address associated with the network interface.</p> </li>   <li> <p> <code>network-interface.association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li>   <li> <p> <code>network-interface.association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li>   <li> <p> <code>network-interface.association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li>   <li> <p> <code>network-interface.association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li>   <li> <p> <code>network-interface.attachment.attachment-id</code> - The ID of the interface attachment.</p> </li>   <li> <p> <code>network-interface.attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li>   <li> <p> <code>network-interface.attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li>   <li> <p> <code>network-interface.attachment.device-index</code> - The device index to which the network interface is attached.</p> </li>   <li> <p> <code>network-interface.attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>   <li> <p> <code>network-interface.attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li>   <li> <p> <code>network-interface.attachment.delete-on-termination</code> - Specifies whether the attachment is deleted when an instance is terminated.</p> </li>   <li> <p> <code>network-interface.availability-zone</code> - The Availability Zone for the network interface.</p> </li>   <li> <p> <code>network-interface.description</code> - The description of the network interface.</p> </li>   <li> <p> <code>network-interface.group-id</code> - The ID of a security group associated with the network interface.</p> </li>   <li> <p> <code>network-interface.group-name</code> - The name of a security group associated with the network interface.</p> </li>   <li> <p> <code>network-interface.ipv6-addresses.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li>   <li> <p> <code>network-interface.mac-address</code> - The MAC address of the network interface.</p> </li>   <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li>   <li> <p> <code>network-interface.owner-id</code> - The ID of the owner of the network interface.</p> </li>   <li> <p> <code>network-interface.private-dns-name</code> - The private DNS name of the network interface.</p> </li>   <li> <p> <code>network-interface.requester-id</code> - The requester ID for the network interface.</p> </li>   <li> <p> <code>network-interface.requester-managed</code> - Indicates whether the network interface is being managed by Amazon Web Services.</p> </li>   <li> <p> <code>network-interface.status</code> - The status of the network interface (<code>available</code>) | <code>in-use</code>).</p> </li>   <li> <p> <code>network-interface.source-dest-check</code> - Whether the network interface performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC.</p> </li>   <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the network interface.</p> </li>   <li> <p> <code>network-interface.vpc-id</code> - The ID of the VPC for the network interface.</p> </li>   <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>   <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the instance owner.</p> </li>   <li> <p> <code>placement-group-name</code> - The name of the placement group for the instance.</p> </li>   <li> <p> <code>placement-partition-number</code> - The partition in which the instance is located.</p> </li>   <li> <p> <code>platform</code> - The platform. To list only Windows instances, use <code>windows</code>.</p> </li>   <li> <p> <code>private-dns-name</code> - The private IPv4 DNS name of the instance.</p> </li>   <li> <p> <code>private-ip-address</code> - The private IPv4 address of the instance.</p> </li>   <li> <p> <code>product-code</code> - The product code associated with the AMI used to launch the instance.</p> </li>   <li> <p> <code>product-code.type</code> - The type of product code (<code>devpay</code> | <code>marketplace</code>).</p> </li>   <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li>   <li> <p> <code>reason</code> - The reason for the current state of the instance (for example, shows "User Initiated [date]" when you stop or terminate the instance). Similar to the state-reason-code filter.</p> </li>   <li> <p> <code>requester-id</code> - The ID of the entity that launched the instance on your behalf (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li>   <li> <p> <code>reservation-id</code> - The ID of the instance's reservation. A reservation ID is created any time you launch an instance. A reservation ID has a one-to-one relationship with an instance launch request, but can be associated with more than one instance if you launch multiple instances using the same launch request. For example, if you launch one instance, you get one reservation ID. If you launch ten instances using the same launch request, you also get one reservation ID.</p> </li>   <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li>   <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li>   <li> <p> <code>source-dest-check</code> - Indicates whether the instance performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the instance to perform network address translation (NAT) in your VPC. </p> </li>   <li> <p> <code>spot-instance-request-id</code> - The ID of the Spot Instance request.</p> </li>   <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li>   <li> <p> <code>state-reason-message</code> - A message that describes the state change.</p> </li>   <li> <p> <code>subnet-id</code> - The ID of the subnet for the instance.</p> </li>   <li> <p> <code>tag:     <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>tenancy</code> - The tenancy of an instance (<code>dedicated</code> | <code>default</code> | <code>host</code>).</p> </li>   <li> <p> <code>virtualization-type</code> - The virtualization type of the instance (<code>paravirtual</code> | <code>hvm</code>).</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC that the instance is running in.</p> </li>  </ul>
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::DescribeInstances::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeInstances::set_instance_ids): <p>The instance IDs.</p>  <p>Default: Describes all your instances.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeInstances::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeInstances::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeInstances::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeInstances::set_next_token): <p>The token to request the next page of results.</p>
    /// - On success, responds with [`DescribeInstancesOutput`](crate::output::DescribeInstancesOutput) with field(s):
    ///   - [`reservations(Option<Vec<Reservation>>)`](crate::output::DescribeInstancesOutput::reservations): <p>Information about the reservations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeInstancesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeInstancesError>`](crate::error::DescribeInstancesError)
    pub fn describe_instances(&self) -> fluent_builders::DescribeInstances {
        fluent_builders::DescribeInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInstanceStatus`](crate::client::fluent_builders::DescribeInstanceStatus) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeInstanceStatus::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeInstanceStatus::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeInstanceStatus::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>   <li> <p> <code>event.code</code> - The code for the scheduled event (<code>instance-reboot</code> | <code>system-reboot</code> | <code>system-maintenance</code> | <code>instance-retirement</code> | <code>instance-stop</code>).</p> </li>   <li> <p> <code>event.description</code> - A description of the event.</p> </li>   <li> <p> <code>event.instance-event-id</code> - The ID of the event whose date and time you are modifying.</p> </li>   <li> <p> <code>event.not-after</code> - The latest end time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>   <li> <p> <code>event.not-before</code> - The earliest start time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>   <li> <p> <code>event.not-before-deadline</code> - The deadline for starting the event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>   <li> <p> <code>instance-state-code</code> - The code for the instance state, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li>   <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li>   <li> <p> <code>instance-status.reachability</code> - Filters on instance status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li>   <li> <p> <code>instance-status.status</code> - The status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li>   <li> <p> <code>system-status.reachability</code> - Filters on system status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li>   <li> <p> <code>system-status.status</code> - The system status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li>  </ul>
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::DescribeInstanceStatus::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeInstanceStatus::set_instance_ids): <p>The instance IDs.</p>  <p>Default: Describes all your instances.</p>  <p>Constraints: Maximum 100 explicitly specified instance IDs.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeInstanceStatus::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeInstanceStatus::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeInstanceStatus::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeInstanceStatus::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInstanceStatus::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInstanceStatus::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`include_all_instances(bool)`](crate::client::fluent_builders::DescribeInstanceStatus::include_all_instances) / [`set_include_all_instances(Option<bool>)`](crate::client::fluent_builders::DescribeInstanceStatus::set_include_all_instances): <p>When <code>true</code>, includes the health status for all instances. When <code>false</code>, includes the health status for running instances only.</p>  <p>Default: <code>false</code> </p>
    /// - On success, responds with [`DescribeInstanceStatusOutput`](crate::output::DescribeInstanceStatusOutput) with field(s):
    ///   - [`instance_statuses(Option<Vec<InstanceStatus>>)`](crate::output::DescribeInstanceStatusOutput::instance_statuses): <p>Information about the status of the instances.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeInstanceStatusOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeInstanceStatusError>`](crate::error::DescribeInstanceStatusError)
    pub fn describe_instance_status(&self) -> fluent_builders::DescribeInstanceStatus {
        fluent_builders::DescribeInstanceStatus::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInstanceTypeOfferings`](crate::client::fluent_builders::DescribeInstanceTypeOfferings) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`location_type(LocationType)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::location_type) / [`set_location_type(Option<LocationType>)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::set_location_type): <p>The location type.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>  <ul>   <li> <p> <code>location</code> - This depends on the location type. For example, if the location type is <code>region</code> (default), the location is the Region code (for example, <code>us-east-2</code>.)</p> </li>   <li> <p> <code>instance-type</code> - The instance type. For example, <code>c5.2xlarge</code>.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the next token value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeInstanceTypeOfferings::set_next_token): <p>The token to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeInstanceTypeOfferingsOutput`](crate::output::DescribeInstanceTypeOfferingsOutput) with field(s):
    ///   - [`instance_type_offerings(Option<Vec<InstanceTypeOffering>>)`](crate::output::DescribeInstanceTypeOfferingsOutput::instance_type_offerings): <p>The instance types offered.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeInstanceTypeOfferingsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeInstanceTypeOfferingsError>`](crate::error::DescribeInstanceTypeOfferingsError)
    pub fn describe_instance_type_offerings(
        &self,
    ) -> fluent_builders::DescribeInstanceTypeOfferings {
        fluent_builders::DescribeInstanceTypeOfferings::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInstanceTypes`](crate::client::fluent_builders::DescribeInstanceTypes) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeInstanceTypes::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInstanceTypes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInstanceTypes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_types(Vec<InstanceType>)`](crate::client::fluent_builders::DescribeInstanceTypes::instance_types) / [`set_instance_types(Option<Vec<InstanceType>>)`](crate::client::fluent_builders::DescribeInstanceTypes::set_instance_types): <p>The instance types. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeInstanceTypes::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeInstanceTypes::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>  <ul>   <li> <p> <code>auto-recovery-supported</code> - Indicates whether auto recovery is supported (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>bare-metal</code> - Indicates whether it is a bare metal instance type (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>burstable-performance-supported</code> - Indicates whether it is a burstable performance instance type (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>current-generation</code> - Indicates whether this instance type is the latest generation instance type of an instance family (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps</code> - The baseline bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li>   <li> <p> <code>ebs-info.ebs-optimized-info.baseline-iops</code> - The baseline input/output storage operations per second for an EBS-optimized instance type.</p> </li>   <li> <p> <code>ebs-info.ebs-optimized-info.baseline-throughput-in-mbps</code> - The baseline throughput performance for an EBS-optimized instance type, in MB/s.</p> </li>   <li> <p> <code>ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps</code> - The maximum bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li>   <li> <p> <code>ebs-info.ebs-optimized-info.maximum-iops</code> - The maximum input/output storage operations per second for an EBS-optimized instance type.</p> </li>   <li> <p> <code>ebs-info.ebs-optimized-info.maximum-throughput-in-mbps</code> - The maximum throughput performance for an EBS-optimized instance type, in MB/s.</p> </li>   <li> <p> <code>ebs-info.ebs-optimized-support</code> - Indicates whether the instance type is EBS-optimized (<code>supported</code> | <code>unsupported</code> | <code>default</code>).</p> </li>   <li> <p> <code>ebs-info.encryption-support</code> - Indicates whether EBS encryption is supported (<code>supported</code> | <code>unsupported</code>).</p> </li>   <li> <p> <code>ebs-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for EBS volumes (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>   <li> <p> <code>free-tier-eligible</code> - Indicates whether the instance type is eligible to use in the free tier (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>hibernation-supported</code> - Indicates whether On-Demand hibernation is supported (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>hypervisor</code> - The hypervisor (<code>nitro</code> | <code>xen</code>).</p> </li>   <li> <p> <code>instance-storage-info.disk.count</code> - The number of local disks.</p> </li>   <li> <p> <code>instance-storage-info.disk.size-in-gb</code> - The storage size of each instance storage disk, in GB.</p> </li>   <li> <p> <code>instance-storage-info.disk.type</code> - The storage technology for the local instance storage disks (<code>hdd</code> | <code>ssd</code>).</p> </li>   <li> <p> <code>instance-storage-info.encryption-support</code> - Indicates whether data is encrypted at rest (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>   <li> <p> <code>instance-storage-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for instance store (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>   <li> <p> <code>instance-storage-info.total-size-in-gb</code> - The total amount of storage available from all local instance storage, in GB.</p> </li>   <li> <p> <code>instance-storage-supported</code> - Indicates whether the instance type has local instance storage (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>instance-type</code> - The instance type (for example <code>c5.2xlarge</code> or c5*).</p> </li>   <li> <p> <code>memory-info.size-in-mib</code> - The memory size.</p> </li>   <li> <p> <code>network-info.efa-info.maximum-efa-interfaces</code> - The maximum number of Elastic Fabric Adapters (EFAs) per instance.</p> </li>   <li> <p> <code>network-info.efa-supported</code> - Indicates whether the instance type supports Elastic Fabric Adapter (EFA) (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>network-info.ena-support</code> - Indicates whether Elastic Network Adapter (ENA) is supported or required (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>   <li> <p> <code>network-info.encryption-in-transit-supported</code> - Indicates whether the instance type automatically encrypts in-transit traffic between instances (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>network-info.ipv4-addresses-per-interface</code> - The maximum number of private IPv4 addresses per network interface.</p> </li>   <li> <p> <code>network-info.ipv6-addresses-per-interface</code> - The maximum number of private IPv6 addresses per network interface.</p> </li>   <li> <p> <code>network-info.ipv6-supported</code> - Indicates whether the instance type supports IPv6 (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>network-info.maximum-network-cards</code> - The maximum number of network cards per instance.</p> </li>   <li> <p> <code>network-info.maximum-network-interfaces</code> - The maximum number of network interfaces per instance.</p> </li>   <li> <p> <code>network-info.network-performance</code> - The network performance (for example, "25 Gigabit").</p> </li>   <li> <p> <code>processor-info.supported-architecture</code> - The CPU architecture (<code>arm64</code> | <code>i386</code> | <code>x86_64</code>).</p> </li>   <li> <p> <code>processor-info.sustained-clock-speed-in-ghz</code> - The CPU clock speed, in GHz.</p> </li>   <li> <p> <code>supported-boot-mode</code> - The boot mode (<code>legacy-bios</code> | <code>uefi</code>).</p> </li>   <li> <p> <code>supported-root-device-type</code> - The root device type (<code>ebs</code> | <code>instance-store</code>).</p> </li>   <li> <p> <code>supported-usage-class</code> - The usage class (<code>on-demand</code> | <code>spot</code>).</p> </li>   <li> <p> <code>supported-virtualization-type</code> - The virtualization type (<code>hvm</code> | <code>paravirtual</code>).</p> </li>   <li> <p> <code>vcpu-info.default-cores</code> - The default number of cores for the instance type.</p> </li>   <li> <p> <code>vcpu-info.default-threads-per-core</code> - The default number of threads per core for the instance type.</p> </li>   <li> <p> <code>vcpu-info.default-vcpus</code> - The default number of vCPUs for the instance type.</p> </li>   <li> <p> <code>vcpu-info.valid-cores</code> - The number of cores that can be configured for the instance type.</p> </li>   <li> <p> <code>vcpu-info.valid-threads-per-core</code> - The number of threads per core that can be configured for the instance type. For example, "1" or "1,2".</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeInstanceTypes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeInstanceTypes::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the next token value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeInstanceTypes::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeInstanceTypes::set_next_token): <p>The token to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeInstanceTypesOutput`](crate::output::DescribeInstanceTypesOutput) with field(s):
    ///   - [`instance_types(Option<Vec<InstanceTypeInfo>>)`](crate::output::DescribeInstanceTypesOutput::instance_types): <p>The instance type. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeInstanceTypesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeInstanceTypesError>`](crate::error::DescribeInstanceTypesError)
    pub fn describe_instance_types(&self) -> fluent_builders::DescribeInstanceTypes {
        fluent_builders::DescribeInstanceTypes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeInternetGateways`](crate::client::fluent_builders::DescribeInternetGateways) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeInternetGateways::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeInternetGateways::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeInternetGateways::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>attachment.state</code> - The current state of the attachment between the gateway and the VPC (<code>available</code>). Present only if a VPC is attached.</p> </li>   <li> <p> <code>attachment.vpc-id</code> - The ID of an attached VPC.</p> </li>   <li> <p> <code>internet-gateway-id</code> - The ID of the Internet gateway.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the internet gateway.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeInternetGateways::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeInternetGateways::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`internet_gateway_ids(Vec<String>)`](crate::client::fluent_builders::DescribeInternetGateways::internet_gateway_ids) / [`set_internet_gateway_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeInternetGateways::set_internet_gateway_ids): <p>One or more internet gateway IDs.</p>  <p>Default: Describes all your internet gateways.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeInternetGateways::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeInternetGateways::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeInternetGateways::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeInternetGateways::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeInternetGatewaysOutput`](crate::output::DescribeInternetGatewaysOutput) with field(s):
    ///   - [`internet_gateways(Option<Vec<InternetGateway>>)`](crate::output::DescribeInternetGatewaysOutput::internet_gateways): <p>Information about one or more internet gateways.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeInternetGatewaysOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeInternetGatewaysError>`](crate::error::DescribeInternetGatewaysError)
    pub fn describe_internet_gateways(&self) -> fluent_builders::DescribeInternetGateways {
        fluent_builders::DescribeInternetGateways::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeIpamPools`](crate::client::fluent_builders::DescribeIpamPools) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeIpamPools::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeIpamPools::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeIpamPools::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeIpamPools::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeIpamPools::set_filters): <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeIpamPools::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeIpamPools::set_max_results): <p>The maximum number of results to return in the request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeIpamPools::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeIpamPools::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`ipam_pool_ids(Vec<String>)`](crate::client::fluent_builders::DescribeIpamPools::ipam_pool_ids) / [`set_ipam_pool_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeIpamPools::set_ipam_pool_ids): <p>The IDs of the IPAM pools you would like information on.</p>
    /// - On success, responds with [`DescribeIpamPoolsOutput`](crate::output::DescribeIpamPoolsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeIpamPoolsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`ipam_pools(Option<Vec<IpamPool>>)`](crate::output::DescribeIpamPoolsOutput::ipam_pools): <p>Information about the IPAM pools.</p>
    /// - On failure, responds with [`SdkError<DescribeIpamPoolsError>`](crate::error::DescribeIpamPoolsError)
    pub fn describe_ipam_pools(&self) -> fluent_builders::DescribeIpamPools {
        fluent_builders::DescribeIpamPools::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeIpams`](crate::client::fluent_builders::DescribeIpams) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeIpams::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeIpams::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeIpams::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeIpams::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeIpams::set_filters): <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeIpams::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeIpams::set_max_results): <p>The maximum number of results to return in the request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeIpams::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeIpams::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`ipam_ids(Vec<String>)`](crate::client::fluent_builders::DescribeIpams::ipam_ids) / [`set_ipam_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeIpams::set_ipam_ids): <p>The IDs of the IPAMs you want information on.</p>
    /// - On success, responds with [`DescribeIpamsOutput`](crate::output::DescribeIpamsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeIpamsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`ipams(Option<Vec<Ipam>>)`](crate::output::DescribeIpamsOutput::ipams): <p>Information about the IPAMs.</p>
    /// - On failure, responds with [`SdkError<DescribeIpamsError>`](crate::error::DescribeIpamsError)
    pub fn describe_ipams(&self) -> fluent_builders::DescribeIpams {
        fluent_builders::DescribeIpams::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeIpamScopes`](crate::client::fluent_builders::DescribeIpamScopes) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeIpamScopes::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeIpamScopes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeIpamScopes::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeIpamScopes::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeIpamScopes::set_filters): <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeIpamScopes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeIpamScopes::set_max_results): <p>The maximum number of results to return in the request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeIpamScopes::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeIpamScopes::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`ipam_scope_ids(Vec<String>)`](crate::client::fluent_builders::DescribeIpamScopes::ipam_scope_ids) / [`set_ipam_scope_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeIpamScopes::set_ipam_scope_ids): <p>The IDs of the scopes you want information on.</p>
    /// - On success, responds with [`DescribeIpamScopesOutput`](crate::output::DescribeIpamScopesOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeIpamScopesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`ipam_scopes(Option<Vec<IpamScope>>)`](crate::output::DescribeIpamScopesOutput::ipam_scopes): <p>The scopes you want information on.</p>
    /// - On failure, responds with [`SdkError<DescribeIpamScopesError>`](crate::error::DescribeIpamScopesError)
    pub fn describe_ipam_scopes(&self) -> fluent_builders::DescribeIpamScopes {
        fluent_builders::DescribeIpamScopes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeIpv6Pools`](crate::client::fluent_builders::DescribeIpv6Pools) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeIpv6Pools::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`pool_ids(Vec<String>)`](crate::client::fluent_builders::DescribeIpv6Pools::pool_ids) / [`set_pool_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeIpv6Pools::set_pool_ids): <p>The IDs of the IPv6 address pools.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeIpv6Pools::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeIpv6Pools::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeIpv6Pools::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeIpv6Pools::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeIpv6Pools::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeIpv6Pools::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeIpv6Pools::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeIpv6Pools::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    /// - On success, responds with [`DescribeIpv6PoolsOutput`](crate::output::DescribeIpv6PoolsOutput) with field(s):
    ///   - [`ipv6_pools(Option<Vec<Ipv6Pool>>)`](crate::output::DescribeIpv6PoolsOutput::ipv6_pools): <p>Information about the IPv6 address pools.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeIpv6PoolsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeIpv6PoolsError>`](crate::error::DescribeIpv6PoolsError)
    pub fn describe_ipv6_pools(&self) -> fluent_builders::DescribeIpv6Pools {
        fluent_builders::DescribeIpv6Pools::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeKeyPairs`](crate::client::fluent_builders::DescribeKeyPairs) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeKeyPairs::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeKeyPairs::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>key-pair-id</code> - The ID of the key pair.</p> </li>   <li> <p> <code>fingerprint</code> - The fingerprint of the key pair.</p> </li>   <li> <p> <code>key-name</code> - The name of the key pair.</p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>  </ul>
    ///   - [`key_names(Vec<String>)`](crate::client::fluent_builders::DescribeKeyPairs::key_names) / [`set_key_names(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeKeyPairs::set_key_names): <p>The key pair names.</p>  <p>Default: Describes all of your key pairs.</p>
    ///   - [`key_pair_ids(Vec<String>)`](crate::client::fluent_builders::DescribeKeyPairs::key_pair_ids) / [`set_key_pair_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeKeyPairs::set_key_pair_ids): <p>The IDs of the key pairs.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeKeyPairs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeKeyPairs::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`include_public_key(bool)`](crate::client::fluent_builders::DescribeKeyPairs::include_public_key) / [`set_include_public_key(Option<bool>)`](crate::client::fluent_builders::DescribeKeyPairs::set_include_public_key): <p>If <code>true</code>, the public key material is included in the response.</p>  <p>Default: <code>false</code> </p>
    /// - On success, responds with [`DescribeKeyPairsOutput`](crate::output::DescribeKeyPairsOutput) with field(s):
    ///   - [`key_pairs(Option<Vec<KeyPairInfo>>)`](crate::output::DescribeKeyPairsOutput::key_pairs): <p>Information about the key pairs.</p>
    /// - On failure, responds with [`SdkError<DescribeKeyPairsError>`](crate::error::DescribeKeyPairsError)
    pub fn describe_key_pairs(&self) -> fluent_builders::DescribeKeyPairs {
        fluent_builders::DescribeKeyPairs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeLaunchTemplates`](crate::client::fluent_builders::DescribeLaunchTemplates) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeLaunchTemplates::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeLaunchTemplates::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeLaunchTemplates::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`launch_template_ids(Vec<String>)`](crate::client::fluent_builders::DescribeLaunchTemplates::launch_template_ids) / [`set_launch_template_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLaunchTemplates::set_launch_template_ids): <p>One or more launch template IDs.</p>
    ///   - [`launch_template_names(Vec<String>)`](crate::client::fluent_builders::DescribeLaunchTemplates::launch_template_names) / [`set_launch_template_names(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLaunchTemplates::set_launch_template_names): <p>One or more launch template names.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeLaunchTemplates::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeLaunchTemplates::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>create-time</code> - The time the launch template was created.</p> </li>   <li> <p> <code>launch-template-name</code> - The name of the launch template.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeLaunchTemplates::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeLaunchTemplates::set_next_token): <p>The token to request the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeLaunchTemplates::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeLaunchTemplates::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200.</p>
    /// - On success, responds with [`DescribeLaunchTemplatesOutput`](crate::output::DescribeLaunchTemplatesOutput) with field(s):
    ///   - [`launch_templates(Option<Vec<LaunchTemplate>>)`](crate::output::DescribeLaunchTemplatesOutput::launch_templates): <p>Information about the launch templates.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeLaunchTemplatesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeLaunchTemplatesError>`](crate::error::DescribeLaunchTemplatesError)
    pub fn describe_launch_templates(&self) -> fluent_builders::DescribeLaunchTemplates {
        fluent_builders::DescribeLaunchTemplates::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeLaunchTemplateVersions`](crate::client::fluent_builders::DescribeLaunchTemplateVersions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`launch_template_id(impl Into<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::launch_template_id) / [`set_launch_template_id(Option<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_launch_template_id): <p>The ID of the launch template.</p>  <p>To describe one or more versions of a specified launch template, you must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>  <p>To describe all the latest or default launch template versions in your account, you must omit this parameter.</p>
    ///   - [`launch_template_name(impl Into<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::launch_template_name) / [`set_launch_template_name(Option<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_launch_template_name): <p>The name of the launch template.</p>  <p>To describe one or more versions of a specified launch template, you must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>  <p>To describe all the latest or default launch template versions in your account, you must omit this parameter.</p>
    ///   - [`versions(Vec<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::versions) / [`set_versions(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_versions): <p>One or more versions of the launch template. Valid values depend on whether you are describing a specified launch template (by ID or name) or all launch templates in your account.</p>  <p>To describe one or more versions of a specified launch template, valid values are <code>$Latest</code>, <code>$Default</code>, and numbers.</p>  <p>To describe all launch templates in your account that are defined as the latest version, the valid value is <code>$Latest</code>. To describe all launch templates in your account that are defined as the default version, the valid value is <code>$Default</code>. You can specify <code>$Latest</code> and <code>$Default</code> in the same request. You cannot specify numbers.</p>
    ///   - [`min_version(impl Into<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::min_version) / [`set_min_version(Option<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_min_version): <p>The version number after which to describe launch template versions.</p>
    ///   - [`max_version(impl Into<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::max_version) / [`set_max_version(Option<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_max_version): <p>The version number up to which to describe launch template versions.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_next_token): <p>The token to request the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>create-time</code> - The time the launch template version was created.</p> </li>   <li> <p> <code>ebs-optimized</code> - A boolean that indicates whether the instance is optimized for Amazon EBS I/O.</p> </li>   <li> <p> <code>http-endpoint</code> - Indicates whether the HTTP metadata endpoint on your instances is enabled (<code>enabled</code> | <code>disabled</code>).</p> </li>   <li> <p> <code>http-protocol-ipv4</code> - Indicates whether the IPv4 endpoint for the instance metadata service is enabled (<code>enabled</code> | <code>disabled</code>).</p> </li>   <li> <p> <code>host-resource-group-arn</code> - The ARN of the host resource group in which to launch the instances.</p> </li>   <li> <p> <code>http-tokens</code> - The state of token usage for your instance metadata requests (<code>optional</code> | <code>required</code>).</p> </li>   <li> <p> <code>iam-instance-profile</code> - The ARN of the IAM instance profile.</p> </li>   <li> <p> <code>image-id</code> - The ID of the AMI.</p> </li>   <li> <p> <code>instance-type</code> - The instance type.</p> </li>   <li> <p> <code>is-default-version</code> - A boolean that indicates whether the launch template version is the default version.</p> </li>   <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>   <li> <p> <code>license-configuration-arn</code> - The ARN of the license configuration.</p> </li>   <li> <p> <code>network-card-index</code> - The index of the network card.</p> </li>   <li> <p> <code>ram-disk-id</code> - The RAM disk ID.</p> </li>  </ul>
    ///   - [`resolve_alias(bool)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::resolve_alias) / [`set_resolve_alias(Option<bool>)`](crate::client::fluent_builders::DescribeLaunchTemplateVersions::set_resolve_alias): <p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageId</code>.</p>  <p>If <code>false</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the parameter is displayed in the response for <code>imageId</code>.</p>  <p> For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>  <p>Default: <code>false</code> </p>
    /// - On success, responds with [`DescribeLaunchTemplateVersionsOutput`](crate::output::DescribeLaunchTemplateVersionsOutput) with field(s):
    ///   - [`launch_template_versions(Option<Vec<LaunchTemplateVersion>>)`](crate::output::DescribeLaunchTemplateVersionsOutput::launch_template_versions): <p>Information about the launch template versions.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeLaunchTemplateVersionsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeLaunchTemplateVersionsError>`](crate::error::DescribeLaunchTemplateVersionsError)
    pub fn describe_launch_template_versions(
        &self,
    ) -> fluent_builders::DescribeLaunchTemplateVersions {
        fluent_builders::DescribeLaunchTemplateVersions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeLocalGatewayRouteTables`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_ids(Vec<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::local_gateway_route_table_ids) / [`set_local_gateway_route_table_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::set_local_gateway_route_table_ids): <p>The IDs of the local gateway route tables.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>   <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table.</p> </li>   <li> <p> <code>local-gateway-route-table-id</code> - The ID of a local gateway route table.</p> </li>   <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway route table.</p> </li>   <li> <p> <code>state</code> - The state of the local gateway route table.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTables::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeLocalGatewayRouteTablesOutput`](crate::output::DescribeLocalGatewayRouteTablesOutput) with field(s):
    ///   - [`local_gateway_route_tables(Option<Vec<LocalGatewayRouteTable>>)`](crate::output::DescribeLocalGatewayRouteTablesOutput::local_gateway_route_tables): <p>Information about the local gateway route tables.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeLocalGatewayRouteTablesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeLocalGatewayRouteTablesError>`](crate::error::DescribeLocalGatewayRouteTablesError)
    pub fn describe_local_gateway_route_tables(
        &self,
    ) -> fluent_builders::DescribeLocalGatewayRouteTables {
        fluent_builders::DescribeLocalGatewayRouteTables::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_virtual_interface_group_association_ids(Vec<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::local_gateway_route_table_virtual_interface_group_association_ids) / [`set_local_gateway_route_table_virtual_interface_group_association_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::set_local_gateway_route_table_virtual_interface_group_association_ids): <p>The IDs of the associations.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>   <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table for the virtual interface group.</p> </li>   <li> <p> <code>local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>   <li> <p> <code>local-gateway-route-table-virtual-interface-group-association-id</code> - The ID of the association.</p> </li>   <li> <p> <code>local-gateway-route-table-virtual-interface-group-id</code> - The ID of the virtual interface group.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface group association.</p> </li>   <li> <p> <code>state</code> - The state of the association.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsOutput`](crate::output::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsOutput) with field(s):
    ///   - [`local_gateway_route_table_virtual_interface_group_associations(Option<Vec<LocalGatewayRouteTableVirtualInterfaceGroupAssociation>>)`](crate::output::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsOutput::local_gateway_route_table_virtual_interface_group_associations): <p>Information about the associations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsError>`](crate::error::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsError)
    pub fn describe_local_gateway_route_table_virtual_interface_group_associations(
        &self,
    ) -> fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations {
        fluent_builders::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations::new(
            self.handle.clone(),
        )
    }
    /// Constructs a fluent builder for the [`DescribeLocalGatewayRouteTableVpcAssociations`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_vpc_association_ids(Vec<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::local_gateway_route_table_vpc_association_ids) / [`set_local_gateway_route_table_vpc_association_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::set_local_gateway_route_table_vpc_association_ids): <p>The IDs of the associations.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>   <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table for the association.</p> </li>   <li> <p> <code>local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>   <li> <p> <code>local-gateway-route-table-vpc-association-id</code> - The ID of the association.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway route table for the association.</p> </li>   <li> <p> <code>state</code> - The state of the association.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeLocalGatewayRouteTableVpcAssociationsOutput`](crate::output::DescribeLocalGatewayRouteTableVpcAssociationsOutput) with field(s):
    ///   - [`local_gateway_route_table_vpc_associations(Option<Vec<LocalGatewayRouteTableVpcAssociation>>)`](crate::output::DescribeLocalGatewayRouteTableVpcAssociationsOutput::local_gateway_route_table_vpc_associations): <p>Information about the associations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeLocalGatewayRouteTableVpcAssociationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeLocalGatewayRouteTableVpcAssociationsError>`](crate::error::DescribeLocalGatewayRouteTableVpcAssociationsError)
    pub fn describe_local_gateway_route_table_vpc_associations(
        &self,
    ) -> fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations {
        fluent_builders::DescribeLocalGatewayRouteTableVpcAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeLocalGateways`](crate::client::fluent_builders::DescribeLocalGateways) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeLocalGateways::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_ids(Vec<String>)`](crate::client::fluent_builders::DescribeLocalGateways::local_gateway_ids) / [`set_local_gateway_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLocalGateways::set_local_gateway_ids): <p>The IDs of the local gateways.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeLocalGateways::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeLocalGateways::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>   <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway.</p> </li>   <li> <p> <code>state</code> - The state of the association.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeLocalGateways::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeLocalGateways::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeLocalGateways::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeLocalGateways::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeLocalGateways::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeLocalGateways::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeLocalGatewaysOutput`](crate::output::DescribeLocalGatewaysOutput) with field(s):
    ///   - [`local_gateways(Option<Vec<LocalGateway>>)`](crate::output::DescribeLocalGatewaysOutput::local_gateways): <p>Information about the local gateways.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeLocalGatewaysOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeLocalGatewaysError>`](crate::error::DescribeLocalGatewaysError)
    pub fn describe_local_gateways(&self) -> fluent_builders::DescribeLocalGateways {
        fluent_builders::DescribeLocalGateways::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeLocalGatewayVirtualInterfaceGroups`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_virtual_interface_group_ids(Vec<String>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::local_gateway_virtual_interface_group_ids) / [`set_local_gateway_virtual_interface_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::set_local_gateway_virtual_interface_group_ids): <p>The IDs of the virtual interface groups.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>   <li> <p> <code>local-gateway-virtual-interface-group-id</code> - The ID of the virtual interface group.</p> </li>   <li> <p> <code>local-gateway-virtual-interface-id</code> - The ID of the virtual interface.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface group.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeLocalGatewayVirtualInterfaceGroupsOutput`](crate::output::DescribeLocalGatewayVirtualInterfaceGroupsOutput) with field(s):
    ///   - [`local_gateway_virtual_interface_groups(Option<Vec<LocalGatewayVirtualInterfaceGroup>>)`](crate::output::DescribeLocalGatewayVirtualInterfaceGroupsOutput::local_gateway_virtual_interface_groups): <p>The virtual interface groups.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeLocalGatewayVirtualInterfaceGroupsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeLocalGatewayVirtualInterfaceGroupsError>`](crate::error::DescribeLocalGatewayVirtualInterfaceGroupsError)
    pub fn describe_local_gateway_virtual_interface_groups(
        &self,
    ) -> fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups {
        fluent_builders::DescribeLocalGatewayVirtualInterfaceGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeLocalGatewayVirtualInterfaces`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_virtual_interface_ids(Vec<String>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::local_gateway_virtual_interface_ids) / [`set_local_gateway_virtual_interface_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::set_local_gateway_virtual_interface_ids): <p>The IDs of the virtual interfaces.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>local-address</code> - The local address.</p> </li>   <li> <p> <code>local-bgp-asn</code> - The Border Gateway Protocol (BGP) Autonomous System Number (ASN) of the local gateway.</p> </li>   <li> <p> <code>local-gateway-id</code> - The ID of the local gateway.</p> </li>   <li> <p> <code>local-gateway-virtual-interface-id</code> - The ID of the virtual interface.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface.</p> </li>   <li> <p> <code>peer-address</code> - The peer address.</p> </li>   <li> <p> <code>peer-bgp-asn</code> - The peer BGP ASN.</p> </li>   <li> <p> <code>vlan</code> - The ID of the VLAN.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeLocalGatewayVirtualInterfaces::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeLocalGatewayVirtualInterfacesOutput`](crate::output::DescribeLocalGatewayVirtualInterfacesOutput) with field(s):
    ///   - [`local_gateway_virtual_interfaces(Option<Vec<LocalGatewayVirtualInterface>>)`](crate::output::DescribeLocalGatewayVirtualInterfacesOutput::local_gateway_virtual_interfaces): <p>Information about the virtual interfaces.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeLocalGatewayVirtualInterfacesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeLocalGatewayVirtualInterfacesError>`](crate::error::DescribeLocalGatewayVirtualInterfacesError)
    pub fn describe_local_gateway_virtual_interfaces(
        &self,
    ) -> fluent_builders::DescribeLocalGatewayVirtualInterfaces {
        fluent_builders::DescribeLocalGatewayVirtualInterfaces::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeManagedPrefixLists`](crate::client::fluent_builders::DescribeManagedPrefixLists) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeManagedPrefixLists::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeManagedPrefixLists::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeManagedPrefixLists::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeManagedPrefixLists::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeManagedPrefixLists::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>owner-id</code> - The ID of the prefix list owner.</p> </li>   <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>   <li> <p> <code>prefix-list-name</code> - The name of the prefix list.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeManagedPrefixLists::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeManagedPrefixLists::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeManagedPrefixLists::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeManagedPrefixLists::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`prefix_list_ids(Vec<String>)`](crate::client::fluent_builders::DescribeManagedPrefixLists::prefix_list_ids) / [`set_prefix_list_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeManagedPrefixLists::set_prefix_list_ids): <p>One or more prefix list IDs.</p>
    /// - On success, responds with [`DescribeManagedPrefixListsOutput`](crate::output::DescribeManagedPrefixListsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeManagedPrefixListsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`prefix_lists(Option<Vec<ManagedPrefixList>>)`](crate::output::DescribeManagedPrefixListsOutput::prefix_lists): <p>Information about the prefix lists.</p>
    /// - On failure, responds with [`SdkError<DescribeManagedPrefixListsError>`](crate::error::DescribeManagedPrefixListsError)
    pub fn describe_managed_prefix_lists(&self) -> fluent_builders::DescribeManagedPrefixLists {
        fluent_builders::DescribeManagedPrefixLists::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeMovingAddresses`](crate::client::fluent_builders::DescribeMovingAddresses) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeMovingAddresses::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeMovingAddresses::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeMovingAddresses::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>moving-status</code> - The status of the Elastic IP address (<code>MovingToVpc</code> | <code>RestoringToClassic</code>).</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeMovingAddresses::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeMovingAddresses::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeMovingAddresses::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeMovingAddresses::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000; if <code>MaxResults</code> is given a value outside of this range, an error is returned.</p>  <p>Default: If no value is provided, the default is 1000.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeMovingAddresses::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeMovingAddresses::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`public_ips(Vec<String>)`](crate::client::fluent_builders::DescribeMovingAddresses::public_ips) / [`set_public_ips(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeMovingAddresses::set_public_ips): <p>One or more Elastic IP addresses.</p>
    /// - On success, responds with [`DescribeMovingAddressesOutput`](crate::output::DescribeMovingAddressesOutput) with field(s):
    ///   - [`moving_address_statuses(Option<Vec<MovingAddressStatus>>)`](crate::output::DescribeMovingAddressesOutput::moving_address_statuses): <p>The status for each Elastic IP address.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeMovingAddressesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeMovingAddressesError>`](crate::error::DescribeMovingAddressesError)
    pub fn describe_moving_addresses(&self) -> fluent_builders::DescribeMovingAddresses {
        fluent_builders::DescribeMovingAddresses::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNatGateways`](crate::client::fluent_builders::DescribeNatGateways) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeNatGateways::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeNatGateways::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeNatGateways::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filter(Vec<Filter>)`](crate::client::fluent_builders::DescribeNatGateways::filter) / [`set_filter(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeNatGateways::set_filter): <p>One or more filters.</p>  <ul>   <li> <p> <code>nat-gateway-id</code> - The ID of the NAT gateway.</p> </li>   <li> <p> <code>state</code> - The state of the NAT gateway (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>   <li> <p> <code>subnet-id</code> - The ID of the subnet in which the NAT gateway resides.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC in which the NAT gateway resides.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeNatGateways::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeNatGateways::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`nat_gateway_ids(Vec<String>)`](crate::client::fluent_builders::DescribeNatGateways::nat_gateway_ids) / [`set_nat_gateway_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeNatGateways::set_nat_gateway_ids): <p>One or more NAT gateway IDs.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeNatGateways::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeNatGateways::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeNatGatewaysOutput`](crate::output::DescribeNatGatewaysOutput) with field(s):
    ///   - [`nat_gateways(Option<Vec<NatGateway>>)`](crate::output::DescribeNatGatewaysOutput::nat_gateways): <p>Information about the NAT gateways.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeNatGatewaysOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeNatGatewaysError>`](crate::error::DescribeNatGatewaysError)
    pub fn describe_nat_gateways(&self) -> fluent_builders::DescribeNatGateways {
        fluent_builders::DescribeNatGateways::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNetworkAcls`](crate::client::fluent_builders::DescribeNetworkAcls) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeNetworkAcls::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeNetworkAcls::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeNetworkAcls::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>association.association-id</code> - The ID of an association ID for the ACL.</p> </li>   <li> <p> <code>association.network-acl-id</code> - The ID of the network ACL involved in the association.</p> </li>   <li> <p> <code>association.subnet-id</code> - The ID of the subnet involved in the association.</p> </li>   <li> <p> <code>default</code> - Indicates whether the ACL is the default network ACL for the VPC.</p> </li>   <li> <p> <code>entry.cidr</code> - The IPv4 CIDR range specified in the entry.</p> </li>   <li> <p> <code>entry.icmp.code</code> - The ICMP code specified in the entry, if any.</p> </li>   <li> <p> <code>entry.icmp.type</code> - The ICMP type specified in the entry, if any.</p> </li>   <li> <p> <code>entry.ipv6-cidr</code> - The IPv6 CIDR range specified in the entry.</p> </li>   <li> <p> <code>entry.port-range.from</code> - The start of the port range specified in the entry. </p> </li>   <li> <p> <code>entry.port-range.to</code> - The end of the port range specified in the entry. </p> </li>   <li> <p> <code>entry.protocol</code> - The protocol specified in the entry (<code>tcp</code> | <code>udp</code> | <code>icmp</code> or a protocol number).</p> </li>   <li> <p> <code>entry.rule-action</code> - Allows or denies the matching traffic (<code>allow</code> | <code>deny</code>).</p> </li>   <li> <p> <code>entry.egress</code> - A Boolean that indicates the type of rule. Specify <code>true</code> for egress rules, or <code>false</code> for ingress rules.</p> </li>   <li> <p> <code>entry.rule-number</code> - The number of an entry (in other words, rule) in the set of ACL entries.</p> </li>   <li> <p> <code>network-acl-id</code> - The ID of the network ACL.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the network ACL.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC for the network ACL.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeNetworkAcls::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeNetworkAcls::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_acl_ids(Vec<String>)`](crate::client::fluent_builders::DescribeNetworkAcls::network_acl_ids) / [`set_network_acl_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeNetworkAcls::set_network_acl_ids): <p>One or more network ACL IDs.</p>  <p>Default: Describes all your network ACLs.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkAcls::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeNetworkAcls::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeNetworkAcls::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeNetworkAcls::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeNetworkAclsOutput`](crate::output::DescribeNetworkAclsOutput) with field(s):
    ///   - [`network_acls(Option<Vec<NetworkAcl>>)`](crate::output::DescribeNetworkAclsOutput::network_acls): <p>Information about one or more network ACLs.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeNetworkAclsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeNetworkAclsError>`](crate::error::DescribeNetworkAclsError)
    pub fn describe_network_acls(&self) -> fluent_builders::DescribeNetworkAcls {
        fluent_builders::DescribeNetworkAcls::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNetworkInsightsAccessScopeAnalyses`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_access_scope_analysis_ids(Vec<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::network_insights_access_scope_analysis_ids) / [`set_network_insights_access_scope_analysis_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::set_network_insights_access_scope_analysis_ids): <p>The IDs of the Network Access Scope analyses.</p>
    ///   - [`network_insights_access_scope_id(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::network_insights_access_scope_id) / [`set_network_insights_access_scope_id(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::set_network_insights_access_scope_id): <p>The ID of the Network Access Scope.</p>
    ///   - [`analysis_start_time_begin(DateTime)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::analysis_start_time_begin) / [`set_analysis_start_time_begin(Option<DateTime>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::set_analysis_start_time_begin): <p>Filters the results based on the start time. The analysis must have started on or after this time.</p>
    ///   - [`analysis_start_time_end(DateTime)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::analysis_start_time_end) / [`set_analysis_start_time_end(Option<DateTime>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::set_analysis_start_time_end): <p>Filters the results based on the start time. The analysis must have started on or before this time.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::set_filters): <p>There are no supported filters.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeNetworkInsightsAccessScopeAnalysesOutput`](crate::output::DescribeNetworkInsightsAccessScopeAnalysesOutput) with field(s):
    ///   - [`network_insights_access_scope_analyses(Option<Vec<NetworkInsightsAccessScopeAnalysis>>)`](crate::output::DescribeNetworkInsightsAccessScopeAnalysesOutput::network_insights_access_scope_analyses): <p>The Network Access Scope analyses.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeNetworkInsightsAccessScopeAnalysesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeNetworkInsightsAccessScopeAnalysesError>`](crate::error::DescribeNetworkInsightsAccessScopeAnalysesError)
    pub fn describe_network_insights_access_scope_analyses(
        &self,
    ) -> fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses {
        fluent_builders::DescribeNetworkInsightsAccessScopeAnalyses::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNetworkInsightsAccessScopes`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_access_scope_ids(Vec<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::network_insights_access_scope_ids) / [`set_network_insights_access_scope_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::set_network_insights_access_scope_ids): <p>The IDs of the Network Access Scopes.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::set_filters): <p>There are no supported filters.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAccessScopes::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeNetworkInsightsAccessScopesOutput`](crate::output::DescribeNetworkInsightsAccessScopesOutput) with field(s):
    ///   - [`network_insights_access_scopes(Option<Vec<NetworkInsightsAccessScope>>)`](crate::output::DescribeNetworkInsightsAccessScopesOutput::network_insights_access_scopes): <p>The Network Access Scopes.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeNetworkInsightsAccessScopesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeNetworkInsightsAccessScopesError>`](crate::error::DescribeNetworkInsightsAccessScopesError)
    pub fn describe_network_insights_access_scopes(
        &self,
    ) -> fluent_builders::DescribeNetworkInsightsAccessScopes {
        fluent_builders::DescribeNetworkInsightsAccessScopes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNetworkInsightsAnalyses`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_analysis_ids(Vec<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::network_insights_analysis_ids) / [`set_network_insights_analysis_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::set_network_insights_analysis_ids): <p>The ID of the network insights analyses. You must specify either analysis IDs or a path ID.</p>
    ///   - [`network_insights_path_id(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::network_insights_path_id) / [`set_network_insights_path_id(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::set_network_insights_path_id): <p>The ID of the path. You must specify either a path ID or analysis IDs.</p>
    ///   - [`analysis_start_time(DateTime)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::analysis_start_time) / [`set_analysis_start_time(Option<DateTime>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::set_analysis_start_time): <p>The time when the network insights analyses started.</p>
    ///   - [`analysis_end_time(DateTime)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::analysis_end_time) / [`set_analysis_end_time(Option<DateTime>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::set_analysis_end_time): <p>The time when the network insights analyses ended.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::set_filters): <p>The filters. The following are the possible values:</p>  <ul>   <li> <p>path-found - A Boolean value that indicates whether a feasible path is found.</p> </li>   <li> <p>status - The status of the analysis (running | succeeded | failed).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsAnalyses::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeNetworkInsightsAnalysesOutput`](crate::output::DescribeNetworkInsightsAnalysesOutput) with field(s):
    ///   - [`network_insights_analyses(Option<Vec<NetworkInsightsAnalysis>>)`](crate::output::DescribeNetworkInsightsAnalysesOutput::network_insights_analyses): <p>Information about the network insights analyses.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeNetworkInsightsAnalysesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeNetworkInsightsAnalysesError>`](crate::error::DescribeNetworkInsightsAnalysesError)
    pub fn describe_network_insights_analyses(
        &self,
    ) -> fluent_builders::DescribeNetworkInsightsAnalyses {
        fluent_builders::DescribeNetworkInsightsAnalyses::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNetworkInsightsPaths`](crate::client::fluent_builders::DescribeNetworkInsightsPaths) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_path_ids(Vec<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::network_insights_path_ids) / [`set_network_insights_path_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::set_network_insights_path_ids): <p>The IDs of the paths.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::set_filters): <p>The filters. The following are the possible values:</p>  <ul>   <li> <p>destination - The ID of the resource.</p> </li>   <li> <p>destination-port - The destination port.</p> </li>   <li> <p>protocol - The protocol.</p> </li>   <li> <p>source - The ID of the resource.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInsightsPaths::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeNetworkInsightsPathsOutput`](crate::output::DescribeNetworkInsightsPathsOutput) with field(s):
    ///   - [`network_insights_paths(Option<Vec<NetworkInsightsPath>>)`](crate::output::DescribeNetworkInsightsPathsOutput::network_insights_paths): <p>Information about the paths.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeNetworkInsightsPathsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeNetworkInsightsPathsError>`](crate::error::DescribeNetworkInsightsPathsError)
    pub fn describe_network_insights_paths(&self) -> fluent_builders::DescribeNetworkInsightsPaths {
        fluent_builders::DescribeNetworkInsightsPaths::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNetworkInterfaceAttribute`](crate::client::fluent_builders::DescribeNetworkInterfaceAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(NetworkInterfaceAttribute)`](crate::client::fluent_builders::DescribeNetworkInterfaceAttribute::attribute) / [`set_attribute(Option<NetworkInterfaceAttribute>)`](crate::client::fluent_builders::DescribeNetworkInterfaceAttribute::set_attribute): <p>The attribute of the network interface. This parameter is required.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeNetworkInterfaceAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeNetworkInterfaceAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInterfaceAttribute::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInterfaceAttribute::set_network_interface_id): <p>The ID of the network interface.</p>
    /// - On success, responds with [`DescribeNetworkInterfaceAttributeOutput`](crate::output::DescribeNetworkInterfaceAttributeOutput) with field(s):
    ///   - [`attachment(Option<NetworkInterfaceAttachment>)`](crate::output::DescribeNetworkInterfaceAttributeOutput::attachment): <p>The attachment (if any) of the network interface.</p>
    ///   - [`description(Option<AttributeValue>)`](crate::output::DescribeNetworkInterfaceAttributeOutput::description): <p>The description of the network interface.</p>
    ///   - [`groups(Option<Vec<GroupIdentifier>>)`](crate::output::DescribeNetworkInterfaceAttributeOutput::groups): <p>The security groups associated with the network interface.</p>
    ///   - [`network_interface_id(Option<String>)`](crate::output::DescribeNetworkInterfaceAttributeOutput::network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`source_dest_check(Option<AttributeBooleanValue>)`](crate::output::DescribeNetworkInterfaceAttributeOutput::source_dest_check): <p>Indicates whether source/destination checking is enabled.</p>
    /// - On failure, responds with [`SdkError<DescribeNetworkInterfaceAttributeError>`](crate::error::DescribeNetworkInterfaceAttributeError)
    pub fn describe_network_interface_attribute(
        &self,
    ) -> fluent_builders::DescribeNetworkInterfaceAttribute {
        fluent_builders::DescribeNetworkInterfaceAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNetworkInterfacePermissions`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_interface_permission_ids(Vec<String>)`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::network_interface_permission_ids) / [`set_network_interface_permission_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::set_network_interface_permission_ids): <p>The network interface permission IDs.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>network-interface-permission.network-interface-permission-id</code> - The ID of the permission.</p> </li>   <li> <p> <code>network-interface-permission.network-interface-id</code> - The ID of the network interface.</p> </li>   <li> <p> <code>network-interface-permission.aws-account-id</code> - The Amazon Web Services account ID.</p> </li>   <li> <p> <code>network-interface-permission.aws-service</code> - The Amazon Web Service.</p> </li>   <li> <p> <code>network-interface-permission.permission</code> - The type of permission (<code>INSTANCE-ATTACH</code> | <code>EIP-ASSOCIATE</code>).</p> </li>  </ul>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::set_next_token): <p>The token to request the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeNetworkInterfacePermissions::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. If this parameter is not specified, up to 50 results are returned by default.</p>
    /// - On success, responds with [`DescribeNetworkInterfacePermissionsOutput`](crate::output::DescribeNetworkInterfacePermissionsOutput) with field(s):
    ///   - [`network_interface_permissions(Option<Vec<NetworkInterfacePermission>>)`](crate::output::DescribeNetworkInterfacePermissionsOutput::network_interface_permissions): <p>The network interface permissions.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeNetworkInterfacePermissionsOutput::next_token): <p>The token to use to retrieve the next page of results.</p>
    /// - On failure, responds with [`SdkError<DescribeNetworkInterfacePermissionsError>`](crate::error::DescribeNetworkInterfacePermissionsError)
    pub fn describe_network_interface_permissions(
        &self,
    ) -> fluent_builders::DescribeNetworkInterfacePermissions {
        fluent_builders::DescribeNetworkInterfacePermissions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeNetworkInterfaces`](crate::client::fluent_builders::DescribeNetworkInterfaces) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeNetworkInterfaces::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeNetworkInterfaces::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeNetworkInterfaces::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>addresses.private-ip-address</code> - The private IPv4 addresses associated with the network interface.</p> </li>   <li> <p> <code>addresses.primary</code> - Whether the private IPv4 address is the primary IP address associated with the network interface. </p> </li>   <li> <p> <code>addresses.association.public-ip</code> - The association ID returned when the network interface was associated with the Elastic IP address (IPv4).</p> </li>   <li> <p> <code>addresses.association.owner-id</code> - The owner ID of the addresses associated with the network interface.</p> </li>   <li> <p> <code>association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li>   <li> <p> <code>association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li>   <li> <p> <code>association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li>   <li> <p> <code>association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li>   <li> <p> <code>association.public-dns-name</code> - The public DNS name for the network interface (IPv4).</p> </li>   <li> <p> <code>attachment.attachment-id</code> - The ID of the interface attachment.</p> </li>   <li> <p> <code>attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li>   <li> <p> <code>attachment.delete-on-termination</code> - Indicates whether the attachment is deleted when an instance is terminated.</p> </li>   <li> <p> <code>attachment.device-index</code> - The device index to which the network interface is attached.</p> </li>   <li> <p> <code>attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li>   <li> <p> <code>attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li>   <li> <p> <code>attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>   <li> <p> <code>availability-zone</code> - The Availability Zone of the network interface.</p> </li>   <li> <p> <code>description</code> - The description of the network interface.</p> </li>   <li> <p> <code>group-id</code> - The ID of a security group associated with the network interface.</p> </li>   <li> <p> <code>group-name</code> - The name of a security group associated with the network interface.</p> </li>   <li> <p> <code>ipv6-addresses.ipv6-address</code> - An IPv6 address associated with the network interface.</p> </li>   <li> <p> <code>interface-type</code> - The type of network interface (<code>api_gateway_managed</code> | <code>aws_codestar_connections_managed</code> | <code>branch</code> | <code>efa</code> | <code>gateway_load_balancer</code> | <code>gateway_load_balancer_endpoint</code> | <code>global_accelerator_managed</code> | <code>interface</code> | <code>iot_rules_managed</code> | <code>lambda</code> | <code>load_balancer</code> | <code>nat_gateway</code> | <code>network_load_balancer</code> | <code>quicksight</code> | <code>transit_gateway</code> | <code>trunk</code> | <code>vpc_endpoint</code>).</p> </li>   <li> <p> <code>mac-address</code> - The MAC address of the network interface.</p> </li>   <li> <p> <code>network-interface-id</code> - The ID of the network interface.</p> </li>   <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the network interface owner.</p> </li>   <li> <p> <code>private-ip-address</code> - The private IPv4 address or addresses of the network interface.</p> </li>   <li> <p> <code>private-dns-name</code> - The private DNS name of the network interface (IPv4).</p> </li>   <li> <p> <code>requester-id</code> - The alias or Amazon Web Services account ID of the principal or service that created the network interface.</p> </li>   <li> <p> <code>requester-managed</code> - Indicates whether the network interface is being managed by an Amazon Web Service (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li>   <li> <p> <code>source-dest-check</code> - Indicates whether the network interface performs source/destination checking. A value of <code>true</code> means checking is enabled, and <code>false</code> means checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC. </p> </li>   <li> <p> <code>status</code> - The status of the network interface. If the network interface is not attached to an instance, the status is <code>available</code>; if a network interface is attached to an instance the status is <code>in-use</code>.</p> </li>   <li> <p> <code>subnet-id</code> - The ID of the subnet for the network interface.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC for the network interface.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeNetworkInterfaces::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeNetworkInterfaces::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_interface_ids(Vec<String>)`](crate::client::fluent_builders::DescribeNetworkInterfaces::network_interface_ids) / [`set_network_interface_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeNetworkInterfaces::set_network_interface_ids): <p>The network interface IDs.</p>  <p>Default: Describes all your network interfaces.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeNetworkInterfaces::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeNetworkInterfaces::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeNetworkInterfaces::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeNetworkInterfaces::set_max_results): <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. You cannot specify this parameter and the network interface IDs parameter in the same request.</p>
    /// - On success, responds with [`DescribeNetworkInterfacesOutput`](crate::output::DescribeNetworkInterfacesOutput) with field(s):
    ///   - [`network_interfaces(Option<Vec<NetworkInterface>>)`](crate::output::DescribeNetworkInterfacesOutput::network_interfaces): <p>Information about one or more network interfaces.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeNetworkInterfacesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeNetworkInterfacesError>`](crate::error::DescribeNetworkInterfacesError)
    pub fn describe_network_interfaces(&self) -> fluent_builders::DescribeNetworkInterfaces {
        fluent_builders::DescribeNetworkInterfaces::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribePlacementGroups`](crate::client::fluent_builders::DescribePlacementGroups) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribePlacementGroups::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribePlacementGroups::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>group-name</code> - The name of the placement group.</p> </li>   <li> <p> <code>group-arn</code> - The Amazon Resource Name (ARN) of the placement group.</p> </li>   <li> <p> <code>spread-level</code> - The spread level for the placement group (<code>host</code> | <code>rack</code>). </p> </li>   <li> <p> <code>state</code> - The state of the placement group (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>   <li> <p> <code>strategy</code> - The strategy of the placement group (<code>cluster</code> | <code>spread</code> | <code>partition</code>).</p> </li>   <li> <p> <code>tag:     <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribePlacementGroups::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribePlacementGroups::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`group_names(Vec<String>)`](crate::client::fluent_builders::DescribePlacementGroups::group_names) / [`set_group_names(Option<Vec<String>>)`](crate::client::fluent_builders::DescribePlacementGroups::set_group_names): <p>The names of the placement groups.</p>  <p>Default: Describes all your placement groups, or only those otherwise specified.</p>
    ///   - [`group_ids(Vec<String>)`](crate::client::fluent_builders::DescribePlacementGroups::group_ids) / [`set_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribePlacementGroups::set_group_ids): <p>The IDs of the placement groups.</p>
    /// - On success, responds with [`DescribePlacementGroupsOutput`](crate::output::DescribePlacementGroupsOutput) with field(s):
    ///   - [`placement_groups(Option<Vec<PlacementGroup>>)`](crate::output::DescribePlacementGroupsOutput::placement_groups): <p>Information about the placement groups.</p>
    /// - On failure, responds with [`SdkError<DescribePlacementGroupsError>`](crate::error::DescribePlacementGroupsError)
    pub fn describe_placement_groups(&self) -> fluent_builders::DescribePlacementGroups {
        fluent_builders::DescribePlacementGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribePrefixLists`](crate::client::fluent_builders::DescribePrefixLists) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribePrefixLists::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribePrefixLists::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribePrefixLists::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribePrefixLists::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribePrefixLists::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>prefix-list-id</code>: The ID of a prefix list.</p> </li>   <li> <p> <code>prefix-list-name</code>: The name of a prefix list.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribePrefixLists::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribePrefixLists::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribePrefixLists::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribePrefixLists::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`prefix_list_ids(Vec<String>)`](crate::client::fluent_builders::DescribePrefixLists::prefix_list_ids) / [`set_prefix_list_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribePrefixLists::set_prefix_list_ids): <p>One or more prefix list IDs.</p>
    /// - On success, responds with [`DescribePrefixListsOutput`](crate::output::DescribePrefixListsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribePrefixListsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`prefix_lists(Option<Vec<PrefixList>>)`](crate::output::DescribePrefixListsOutput::prefix_lists): <p>All available prefix lists.</p>
    /// - On failure, responds with [`SdkError<DescribePrefixListsError>`](crate::error::DescribePrefixListsError)
    pub fn describe_prefix_lists(&self) -> fluent_builders::DescribePrefixLists {
        fluent_builders::DescribePrefixLists::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribePrincipalIdFormat`](crate::client::fluent_builders::DescribePrincipalIdFormat) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribePrincipalIdFormat::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribePrincipalIdFormat::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribePrincipalIdFormat::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`resources(Vec<String>)`](crate::client::fluent_builders::DescribePrincipalIdFormat::resources) / [`set_resources(Option<Vec<String>>)`](crate::client::fluent_builders::DescribePrincipalIdFormat::set_resources): <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribePrincipalIdFormat::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribePrincipalIdFormat::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned NextToken value. </p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribePrincipalIdFormat::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribePrincipalIdFormat::set_next_token): <p>The token to request the next page of results.</p>
    /// - On success, responds with [`DescribePrincipalIdFormatOutput`](crate::output::DescribePrincipalIdFormatOutput) with field(s):
    ///   - [`principals(Option<Vec<PrincipalIdFormat>>)`](crate::output::DescribePrincipalIdFormatOutput::principals): <p>Information about the ID format settings for the ARN.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribePrincipalIdFormatOutput::next_token): <p>The token to use to retrieve the next page of results. This value is null when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribePrincipalIdFormatError>`](crate::error::DescribePrincipalIdFormatError)
    pub fn describe_principal_id_format(&self) -> fluent_builders::DescribePrincipalIdFormat {
        fluent_builders::DescribePrincipalIdFormat::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribePublicIpv4Pools`](crate::client::fluent_builders::DescribePublicIpv4Pools) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribePublicIpv4Pools::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`pool_ids(Vec<String>)`](crate::client::fluent_builders::DescribePublicIpv4Pools::pool_ids) / [`set_pool_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribePublicIpv4Pools::set_pool_ids): <p>The IDs of the address pools.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribePublicIpv4Pools::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribePublicIpv4Pools::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribePublicIpv4Pools::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribePublicIpv4Pools::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribePublicIpv4Pools::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribePublicIpv4Pools::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    /// - On success, responds with [`DescribePublicIpv4PoolsOutput`](crate::output::DescribePublicIpv4PoolsOutput) with field(s):
    ///   - [`public_ipv4_pools(Option<Vec<PublicIpv4Pool>>)`](crate::output::DescribePublicIpv4PoolsOutput::public_ipv4_pools): <p>Information about the address pools.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribePublicIpv4PoolsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribePublicIpv4PoolsError>`](crate::error::DescribePublicIpv4PoolsError)
    pub fn describe_public_ipv4_pools(&self) -> fluent_builders::DescribePublicIpv4Pools {
        fluent_builders::DescribePublicIpv4Pools::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeRegions`](crate::client::fluent_builders::DescribeRegions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeRegions::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeRegions::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>endpoint</code> - The endpoint of the Region (for example, <code>ec2.us-east-1.amazonaws.com</code>).</p> </li>   <li> <p> <code>opt-in-status</code> - The opt-in status of the Region (<code>opt-in-not-required</code> | <code>opted-in</code> | <code>not-opted-in</code>).</p> </li>   <li> <p> <code>region-name</code> - The name of the Region (for example, <code>us-east-1</code>).</p> </li>  </ul>
    ///   - [`region_names(Vec<String>)`](crate::client::fluent_builders::DescribeRegions::region_names) / [`set_region_names(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeRegions::set_region_names): <p>The names of the Regions. You can specify any Regions, whether they are enabled and disabled for your account.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeRegions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeRegions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`all_regions(bool)`](crate::client::fluent_builders::DescribeRegions::all_regions) / [`set_all_regions(Option<bool>)`](crate::client::fluent_builders::DescribeRegions::set_all_regions): <p>Indicates whether to display all Regions, including Regions that are disabled for your account.</p>
    /// - On success, responds with [`DescribeRegionsOutput`](crate::output::DescribeRegionsOutput) with field(s):
    ///   - [`regions(Option<Vec<Region>>)`](crate::output::DescribeRegionsOutput::regions): <p>Information about the Regions.</p>
    /// - On failure, responds with [`SdkError<DescribeRegionsError>`](crate::error::DescribeRegionsError)
    pub fn describe_regions(&self) -> fluent_builders::DescribeRegions {
        fluent_builders::DescribeRegions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeReplaceRootVolumeTasks`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`replace_root_volume_task_ids(Vec<String>)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::replace_root_volume_task_ids) / [`set_replace_root_volume_task_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::set_replace_root_volume_task_ids): <p>The ID of the root volume replacement task to view.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::set_filters): <p>Filter to use:</p>  <ul>   <li> <p> <code>instance-id</code> - The ID of the instance for which the root volume replacement task was created.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeReplaceRootVolumeTasks::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeReplaceRootVolumeTasksOutput`](crate::output::DescribeReplaceRootVolumeTasksOutput) with field(s):
    ///   - [`replace_root_volume_tasks(Option<Vec<ReplaceRootVolumeTask>>)`](crate::output::DescribeReplaceRootVolumeTasksOutput::replace_root_volume_tasks): <p>Information about the root volume replacement task.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeReplaceRootVolumeTasksOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeReplaceRootVolumeTasksError>`](crate::error::DescribeReplaceRootVolumeTasksError)
    pub fn describe_replace_root_volume_tasks(
        &self,
    ) -> fluent_builders::DescribeReplaceRootVolumeTasks {
        fluent_builders::DescribeReplaceRootVolumeTasks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeReservedInstances`](crate::client::fluent_builders::DescribeReservedInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeReservedInstances::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeReservedInstances::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li>   <li> <p> <code>duration</code> - The duration of the Reserved Instance (one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li>   <li> <p> <code>end</code> - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z).</p> </li>   <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li>   <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li>   <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Region</code> or <code>Availability Zone</code>).</p> </li>   <li> <p> <code>product-description</code> - The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC (<code>Linux/UNIX</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>SUSE Linux</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux with HA (Amazon VPC)</code> | <code>Windows</code> | <code>Windows (Amazon VPC)</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Standard (Amazon VPC)</code> | <code>Windows with SQL Server Web</code> | <code>Windows with SQL Server Web (Amazon VPC)</code> | <code>Windows with SQL Server Enterprise</code> | <code>Windows with SQL Server Enterprise (Amazon VPC)</code>).</p> </li>   <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instance.</p> </li>   <li> <p> <code>start</code> - The time at which the Reserved Instance purchase request was placed (for example, 2014-08-07T11:54:42.000Z).</p> </li>   <li> <p> <code>state</code> - The state of the Reserved Instance (<code>payment-pending</code> | <code>active</code> | <code>payment-failed</code> | <code>retired</code>).</p> </li>   <li> <p> <code>tag:     <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li>  </ul>
    ///   - [`offering_class(OfferingClassType)`](crate::client::fluent_builders::DescribeReservedInstances::offering_class) / [`set_offering_class(Option<OfferingClassType>)`](crate::client::fluent_builders::DescribeReservedInstances::set_offering_class): <p>Describes whether the Reserved Instance is Standard or Convertible.</p>
    ///   - [`reserved_instances_ids(Vec<String>)`](crate::client::fluent_builders::DescribeReservedInstances::reserved_instances_ids) / [`set_reserved_instances_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeReservedInstances::set_reserved_instances_ids): <p>One or more Reserved Instance IDs.</p>  <p>Default: Describes all your Reserved Instances, or only those otherwise specified.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeReservedInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeReservedInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`offering_type(OfferingTypeValues)`](crate::client::fluent_builders::DescribeReservedInstances::offering_type) / [`set_offering_type(Option<OfferingTypeValues>)`](crate::client::fluent_builders::DescribeReservedInstances::set_offering_type): <p>The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the <code>Medium Utilization</code> Reserved Instance offering type.</p>
    /// - On success, responds with [`DescribeReservedInstancesOutput`](crate::output::DescribeReservedInstancesOutput) with field(s):
    ///   - [`reserved_instances(Option<Vec<ReservedInstances>>)`](crate::output::DescribeReservedInstancesOutput::reserved_instances): <p>A list of Reserved Instances.</p>
    /// - On failure, responds with [`SdkError<DescribeReservedInstancesError>`](crate::error::DescribeReservedInstancesError)
    pub fn describe_reserved_instances(&self) -> fluent_builders::DescribeReservedInstances {
        fluent_builders::DescribeReservedInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeReservedInstancesListings`](crate::client::fluent_builders::DescribeReservedInstancesListings) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeReservedInstancesListings::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeReservedInstancesListings::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instances.</p> </li>   <li> <p> <code>reserved-instances-listing-id</code> - The ID of the Reserved Instances listing.</p> </li>   <li> <p> <code>status</code> - The status of the Reserved Instance listing (<code>pending</code> | <code>active</code> | <code>cancelled</code> | <code>closed</code>).</p> </li>   <li> <p> <code>status-message</code> - The reason for the status.</p> </li>  </ul>
    ///   - [`reserved_instances_id(impl Into<String>)`](crate::client::fluent_builders::DescribeReservedInstancesListings::reserved_instances_id) / [`set_reserved_instances_id(Option<String>)`](crate::client::fluent_builders::DescribeReservedInstancesListings::set_reserved_instances_id): <p>One or more Reserved Instance IDs.</p>
    ///   - [`reserved_instances_listing_id(impl Into<String>)`](crate::client::fluent_builders::DescribeReservedInstancesListings::reserved_instances_listing_id) / [`set_reserved_instances_listing_id(Option<String>)`](crate::client::fluent_builders::DescribeReservedInstancesListings::set_reserved_instances_listing_id): <p>One or more Reserved Instance listing IDs.</p>
    /// - On success, responds with [`DescribeReservedInstancesListingsOutput`](crate::output::DescribeReservedInstancesListingsOutput) with field(s):
    ///   - [`reserved_instances_listings(Option<Vec<ReservedInstancesListing>>)`](crate::output::DescribeReservedInstancesListingsOutput::reserved_instances_listings): <p>Information about the Reserved Instance listing.</p>
    /// - On failure, responds with [`SdkError<DescribeReservedInstancesListingsError>`](crate::error::DescribeReservedInstancesListingsError)
    pub fn describe_reserved_instances_listings(
        &self,
    ) -> fluent_builders::DescribeReservedInstancesListings {
        fluent_builders::DescribeReservedInstancesListings::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeReservedInstancesModifications`](crate::client::fluent_builders::DescribeReservedInstancesModifications) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeReservedInstancesModifications::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeReservedInstancesModifications::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeReservedInstancesModifications::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>client-token</code> - The idempotency token for the modification request.</p> </li>   <li> <p> <code>create-date</code> - The time when the modification request was created.</p> </li>   <li> <p> <code>effective-date</code> - The time when the modification becomes effective.</p> </li>   <li> <p> <code>modification-result.reserved-instances-id</code> - The ID for the Reserved Instances created as part of the modification request. This ID is only available when the status of the modification is <code>fulfilled</code>.</p> </li>   <li> <p> <code>modification-result.target-configuration.availability-zone</code> - The Availability Zone for the new Reserved Instances.</p> </li>   <li> <p> <code>modification-result.target-configuration.instance-count </code> - The number of new Reserved Instances.</p> </li>   <li> <p> <code>modification-result.target-configuration.instance-type</code> - The instance type of the new Reserved Instances.</p> </li>   <li> <p> <code>modification-result.target-configuration.platform</code> - The network platform of the new Reserved Instances (<code>EC2-Classic</code> | <code>EC2-VPC</code>).</p> </li>   <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instances modified.</p> </li>   <li> <p> <code>reserved-instances-modification-id</code> - The ID of the modification request.</p> </li>   <li> <p> <code>status</code> - The status of the Reserved Instances modification request (<code>processing</code> | <code>fulfilled</code> | <code>failed</code>).</p> </li>   <li> <p> <code>status-message</code> - The reason for the status.</p> </li>   <li> <p> <code>update-date</code> - The time when the modification request was last updated.</p> </li>  </ul>
    ///   - [`reserved_instances_modification_ids(Vec<String>)`](crate::client::fluent_builders::DescribeReservedInstancesModifications::reserved_instances_modification_ids) / [`set_reserved_instances_modification_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeReservedInstancesModifications::set_reserved_instances_modification_ids): <p>IDs for the submitted modification request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeReservedInstancesModifications::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeReservedInstancesModifications::set_next_token): <p>The token to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeReservedInstancesModificationsOutput`](crate::output::DescribeReservedInstancesModificationsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeReservedInstancesModificationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`reserved_instances_modifications(Option<Vec<ReservedInstancesModification>>)`](crate::output::DescribeReservedInstancesModificationsOutput::reserved_instances_modifications): <p>The Reserved Instance modification information.</p>
    /// - On failure, responds with [`SdkError<DescribeReservedInstancesModificationsError>`](crate::error::DescribeReservedInstancesModificationsError)
    pub fn describe_reserved_instances_modifications(
        &self,
    ) -> fluent_builders::DescribeReservedInstancesModifications {
        fluent_builders::DescribeReservedInstancesModifications::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeReservedInstancesOfferings`](crate::client::fluent_builders::DescribeReservedInstancesOfferings) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_availability_zone): <p>The Availability Zone in which the Reserved Instance can be used.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li>   <li> <p> <code>duration</code> - The duration of the Reserved Instance (for example, one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li>   <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li>   <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li>   <li> <p> <code>marketplace</code> - Set to <code>true</code> to show only Reserved Instance Marketplace offerings. When this filter is not used, which is the default behavior, all offerings from both Amazon Web Services and the Reserved Instance Marketplace are listed.</p> </li>   <li> <p> <code>product-description</code> - The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC. (<code>Linux/UNIX</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>SUSE Linux</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux with HA (Amazon VPC)</code> | <code>Windows</code> | <code>Windows (Amazon VPC)</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Standard (Amazon VPC)</code> | <code>Windows with SQL Server Web</code> | <code> Windows with SQL Server Web (Amazon VPC)</code> | <code>Windows with SQL Server Enterprise</code> | <code>Windows with SQL Server Enterprise (Amazon VPC)</code>) </p> </li>   <li> <p> <code>reserved-instances-offering-id</code> - The Reserved Instances offering ID.</p> </li>   <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Availability Zone</code> or <code>Region</code>).</p> </li>   <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li>  </ul>
    ///   - [`include_marketplace(bool)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::include_marketplace) / [`set_include_marketplace(Option<bool>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_include_marketplace): <p>Include Reserved Instance Marketplace offerings in the response.</p>
    ///   - [`instance_type(InstanceType)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::instance_type) / [`set_instance_type(Option<InstanceType>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_instance_type): <p>The instance type that the reservation will cover (for example, <code>m1.small</code>). For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`max_duration(i64)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::max_duration) / [`set_max_duration(Option<i64>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_max_duration): <p>The maximum duration (in seconds) to filter when searching for offerings.</p>  <p>Default: 94608000 (3 years)</p>
    ///   - [`max_instance_count(i32)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::max_instance_count) / [`set_max_instance_count(Option<i32>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_max_instance_count): <p>The maximum number of instances to filter when searching for offerings.</p>  <p>Default: 20</p>
    ///   - [`min_duration(i64)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::min_duration) / [`set_min_duration(Option<i64>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_min_duration): <p>The minimum duration (in seconds) to filter when searching for offerings.</p>  <p>Default: 2592000 (1 month)</p>
    ///   - [`offering_class(OfferingClassType)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::offering_class) / [`set_offering_class(Option<OfferingClassType>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_offering_class): <p>The offering class of the Reserved Instance. Can be <code>standard</code> or <code>convertible</code>.</p>
    ///   - [`product_description(RiProductDescription)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::product_description) / [`set_product_description(Option<RiProductDescription>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_product_description): <p>The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the description are for use with Amazon VPC.</p>
    ///   - [`reserved_instances_offering_ids(Vec<String>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::reserved_instances_offering_ids) / [`set_reserved_instances_offering_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_reserved_instances_offering_ids): <p>One or more Reserved Instances offering IDs.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_tenancy(Tenancy)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::instance_tenancy) / [`set_instance_tenancy(Option<Tenancy>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_instance_tenancy): <p>The tenancy of the instances covered by the reservation. A Reserved Instance with a tenancy of <code>dedicated</code> is applied to instances that run in a VPC on single-tenant hardware (i.e., Dedicated Instances).</p>  <p> <b>Important:</b> The <code>host</code> value cannot be used with this parameter. Use the <code>default</code> or <code>dedicated</code> values only.</p>  <p>Default: <code>default</code> </p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. The maximum is 100.</p>  <p>Default: 100</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_next_token): <p>The token to retrieve the next page of results.</p>
    ///   - [`offering_type(OfferingTypeValues)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::offering_type) / [`set_offering_type(Option<OfferingTypeValues>)`](crate::client::fluent_builders::DescribeReservedInstancesOfferings::set_offering_type): <p>The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the <code>Medium Utilization</code> Reserved Instance offering type. </p>
    /// - On success, responds with [`DescribeReservedInstancesOfferingsOutput`](crate::output::DescribeReservedInstancesOfferingsOutput) with field(s):
    ///   - [`reserved_instances_offerings(Option<Vec<ReservedInstancesOffering>>)`](crate::output::DescribeReservedInstancesOfferingsOutput::reserved_instances_offerings): <p>A list of Reserved Instances offerings.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeReservedInstancesOfferingsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeReservedInstancesOfferingsError>`](crate::error::DescribeReservedInstancesOfferingsError)
    pub fn describe_reserved_instances_offerings(
        &self,
    ) -> fluent_builders::DescribeReservedInstancesOfferings {
        fluent_builders::DescribeReservedInstancesOfferings::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeRouteTables`](crate::client::fluent_builders::DescribeRouteTables) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeRouteTables::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeRouteTables::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeRouteTables::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>association.route-table-association-id</code> - The ID of an association ID for the route table.</p> </li>   <li> <p> <code>association.route-table-id</code> - The ID of the route table involved in the association.</p> </li>   <li> <p> <code>association.subnet-id</code> - The ID of the subnet involved in the association.</p> </li>   <li> <p> <code>association.main</code> - Indicates whether the route table is the main route table for the VPC (<code>true</code> | <code>false</code>). Route tables that do not have an association ID are not returned in the response.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the route table.</p> </li>   <li> <p> <code>route-table-id</code> - The ID of the route table.</p> </li>   <li> <p> <code>route.destination-cidr-block</code> - The IPv4 CIDR range specified in a route in the table.</p> </li>   <li> <p> <code>route.destination-ipv6-cidr-block</code> - The IPv6 CIDR range specified in a route in the route table.</p> </li>   <li> <p> <code>route.destination-prefix-list-id</code> - The ID (prefix) of the Amazon Web Service specified in a route in the table.</p> </li>   <li> <p> <code>route.egress-only-internet-gateway-id</code> - The ID of an egress-only Internet gateway specified in a route in the route table.</p> </li>   <li> <p> <code>route.gateway-id</code> - The ID of a gateway specified in a route in the table.</p> </li>   <li> <p> <code>route.instance-id</code> - The ID of an instance specified in a route in the table.</p> </li>   <li> <p> <code>route.nat-gateway-id</code> - The ID of a NAT gateway.</p> </li>   <li> <p> <code>route.transit-gateway-id</code> - The ID of a transit gateway.</p> </li>   <li> <p> <code>route.origin</code> - Describes how the route was created. <code>CreateRouteTable</code> indicates that the route was automatically created when the route table was created; <code>CreateRoute</code> indicates that the route was manually added to the route table; <code>EnableVgwRoutePropagation</code> indicates that the route was propagated by route propagation.</p> </li>   <li> <p> <code>route.state</code> - The state of a route in the route table (<code>active</code> | <code>blackhole</code>). The blackhole state indicates that the route's target isn't available (for example, the specified gateway isn't attached to the VPC, the specified NAT instance has been terminated, and so on).</p> </li>   <li> <p> <code>route.vpc-peering-connection-id</code> - The ID of a VPC peering connection specified in a route in the table.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC for the route table.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeRouteTables::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeRouteTables::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`route_table_ids(Vec<String>)`](crate::client::fluent_builders::DescribeRouteTables::route_table_ids) / [`set_route_table_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeRouteTables::set_route_table_ids): <p>One or more route table IDs.</p>  <p>Default: Describes all your route tables.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeRouteTables::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeRouteTables::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeRouteTables::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeRouteTables::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeRouteTablesOutput`](crate::output::DescribeRouteTablesOutput) with field(s):
    ///   - [`route_tables(Option<Vec<RouteTable>>)`](crate::output::DescribeRouteTablesOutput::route_tables): <p>Information about one or more route tables.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeRouteTablesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeRouteTablesError>`](crate::error::DescribeRouteTablesError)
    pub fn describe_route_tables(&self) -> fluent_builders::DescribeRouteTables {
        fluent_builders::DescribeRouteTables::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeScheduledInstanceAvailability`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>availability-zone</code> - The Availability Zone (for example, <code>us-west-2a</code>).</p> </li>   <li> <p> <code>instance-type</code> - The instance type (for example, <code>c4.large</code>).</p> </li>   <li> <p> <code>network-platform</code> - The network platform (<code>EC2-Classic</code> or <code>EC2-VPC</code>).</p> </li>   <li> <p> <code>platform</code> - The platform (<code>Linux/UNIX</code> or <code>Windows</code>).</p> </li>  </ul>
    ///   - [`first_slot_start_time_range(SlotDateTimeRangeRequest)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::first_slot_start_time_range) / [`set_first_slot_start_time_range(Option<SlotDateTimeRangeRequest>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::set_first_slot_start_time_range): <p>The time period for the first schedule to start.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::set_max_results): <p>The maximum number of results to return in a single call. This value can be between 5 and 300. The default value is 300. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`max_slot_duration_in_hours(i32)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::max_slot_duration_in_hours) / [`set_max_slot_duration_in_hours(Option<i32>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::set_max_slot_duration_in_hours): <p>The maximum available duration, in hours. This value must be greater than <code>MinSlotDurationInHours</code> and less than 1,720.</p>
    ///   - [`min_slot_duration_in_hours(i32)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::min_slot_duration_in_hours) / [`set_min_slot_duration_in_hours(Option<i32>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::set_min_slot_duration_in_hours): <p>The minimum available duration, in hours. The minimum required duration is 1,200 hours per year. For example, the minimum daily schedule is 4 hours, the minimum weekly schedule is 24 hours, and the minimum monthly schedule is 100 hours.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`recurrence(ScheduledInstanceRecurrenceRequest)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::recurrence) / [`set_recurrence(Option<ScheduledInstanceRecurrenceRequest>)`](crate::client::fluent_builders::DescribeScheduledInstanceAvailability::set_recurrence): <p>The schedule recurrence.</p>
    /// - On success, responds with [`DescribeScheduledInstanceAvailabilityOutput`](crate::output::DescribeScheduledInstanceAvailabilityOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeScheduledInstanceAvailabilityOutput::next_token): <p>The token required to retrieve the next set of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`scheduled_instance_availability_set(Option<Vec<ScheduledInstanceAvailability>>)`](crate::output::DescribeScheduledInstanceAvailabilityOutput::scheduled_instance_availability_set): <p>Information about the available Scheduled Instances.</p>
    /// - On failure, responds with [`SdkError<DescribeScheduledInstanceAvailabilityError>`](crate::error::DescribeScheduledInstanceAvailabilityError)
    pub fn describe_scheduled_instance_availability(
        &self,
    ) -> fluent_builders::DescribeScheduledInstanceAvailability {
        fluent_builders::DescribeScheduledInstanceAvailability::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeScheduledInstances`](crate::client::fluent_builders::DescribeScheduledInstances) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeScheduledInstances::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeScheduledInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeScheduledInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeScheduledInstances::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeScheduledInstances::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>availability-zone</code> - The Availability Zone (for example, <code>us-west-2a</code>).</p> </li>   <li> <p> <code>instance-type</code> - The instance type (for example, <code>c4.large</code>).</p> </li>   <li> <p> <code>network-platform</code> - The network platform (<code>EC2-Classic</code> or <code>EC2-VPC</code>).</p> </li>   <li> <p> <code>platform</code> - The platform (<code>Linux/UNIX</code> or <code>Windows</code>).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeScheduledInstances::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeScheduledInstances::set_max_results): <p>The maximum number of results to return in a single call. This value can be between 5 and 300. The default value is 100. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeScheduledInstances::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeScheduledInstances::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`scheduled_instance_ids(Vec<String>)`](crate::client::fluent_builders::DescribeScheduledInstances::scheduled_instance_ids) / [`set_scheduled_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeScheduledInstances::set_scheduled_instance_ids): <p>The Scheduled Instance IDs.</p>
    ///   - [`slot_start_time_range(SlotStartTimeRangeRequest)`](crate::client::fluent_builders::DescribeScheduledInstances::slot_start_time_range) / [`set_slot_start_time_range(Option<SlotStartTimeRangeRequest>)`](crate::client::fluent_builders::DescribeScheduledInstances::set_slot_start_time_range): <p>The time period for the first schedule to start.</p>
    /// - On success, responds with [`DescribeScheduledInstancesOutput`](crate::output::DescribeScheduledInstancesOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeScheduledInstancesOutput::next_token): <p>The token required to retrieve the next set of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`scheduled_instance_set(Option<Vec<ScheduledInstance>>)`](crate::output::DescribeScheduledInstancesOutput::scheduled_instance_set): <p>Information about the Scheduled Instances.</p>
    /// - On failure, responds with [`SdkError<DescribeScheduledInstancesError>`](crate::error::DescribeScheduledInstancesError)
    pub fn describe_scheduled_instances(&self) -> fluent_builders::DescribeScheduledInstances {
        fluent_builders::DescribeScheduledInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSecurityGroupReferences`](crate::client::fluent_builders::DescribeSecurityGroupReferences) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSecurityGroupReferences::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSecurityGroupReferences::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`group_id(Vec<String>)`](crate::client::fluent_builders::DescribeSecurityGroupReferences::group_id) / [`set_group_id(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSecurityGroupReferences::set_group_id): <p>The IDs of the security groups in your account.</p>
    /// - On success, responds with [`DescribeSecurityGroupReferencesOutput`](crate::output::DescribeSecurityGroupReferencesOutput) with field(s):
    ///   - [`security_group_reference_set(Option<Vec<SecurityGroupReference>>)`](crate::output::DescribeSecurityGroupReferencesOutput::security_group_reference_set): <p>Information about the VPCs with the referencing security groups.</p>
    /// - On failure, responds with [`SdkError<DescribeSecurityGroupReferencesError>`](crate::error::DescribeSecurityGroupReferencesError)
    pub fn describe_security_group_references(
        &self,
    ) -> fluent_builders::DescribeSecurityGroupReferences {
        fluent_builders::DescribeSecurityGroupReferences::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSecurityGroupRules`](crate::client::fluent_builders::DescribeSecurityGroupRules) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeSecurityGroupRules::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeSecurityGroupRules::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeSecurityGroupRules::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>group-id</code> - The ID of the security group.</p> </li>   <li> <p> <code>security-group-rule-id</code> - The ID of the security group rule.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>  </ul>
    ///   - [`security_group_rule_ids(Vec<String>)`](crate::client::fluent_builders::DescribeSecurityGroupRules::security_group_rule_ids) / [`set_security_group_rule_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSecurityGroupRules::set_security_group_rule_ids): <p>The IDs of the security group rules.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSecurityGroupRules::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSecurityGroupRules::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSecurityGroupRules::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSecurityGroupRules::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSecurityGroupRules::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSecurityGroupRules::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000. If this parameter is not specified, then all results are returned.</p>
    /// - On success, responds with [`DescribeSecurityGroupRulesOutput`](crate::output::DescribeSecurityGroupRulesOutput) with field(s):
    ///   - [`security_group_rules(Option<Vec<SecurityGroupRule>>)`](crate::output::DescribeSecurityGroupRulesOutput::security_group_rules): <p>Information about security group rules.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSecurityGroupRulesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return. </p>
    /// - On failure, responds with [`SdkError<DescribeSecurityGroupRulesError>`](crate::error::DescribeSecurityGroupRulesError)
    pub fn describe_security_group_rules(&self) -> fluent_builders::DescribeSecurityGroupRules {
        fluent_builders::DescribeSecurityGroupRules::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSecurityGroups`](crate::client::fluent_builders::DescribeSecurityGroups) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeSecurityGroups::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeSecurityGroups::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeSecurityGroups::set_filters): <p>The filters. If using multiple filters for rules, the results include security groups for which any combination of rules - not necessarily a single rule - match all filters.</p>  <ul>   <li> <p> <code>description</code> - The description of the security group.</p> </li>   <li> <p> <code>egress.ip-permission.cidr</code> - An IPv4 CIDR block for an outbound security group rule.</p> </li>   <li> <p> <code>egress.ip-permission.from-port</code> - For an outbound rule, the start of port range for the TCP and UDP protocols, or an ICMP type number.</p> </li>   <li> <p> <code>egress.ip-permission.group-id</code> - The ID of a security group that has been referenced in an outbound security group rule.</p> </li>   <li> <p> <code>egress.ip-permission.group-name</code> - The name of a security group that is referenced in an outbound security group rule.</p> </li>   <li> <p> <code>egress.ip-permission.ipv6-cidr</code> - An IPv6 CIDR block for an outbound security group rule.</p> </li>   <li> <p> <code>egress.ip-permission.prefix-list-id</code> - The ID of a prefix list to which a security group rule allows outbound access.</p> </li>   <li> <p> <code>egress.ip-permission.protocol</code> - The IP protocol for an outbound security group rule (<code>tcp</code> | <code>udp</code> | <code>icmp</code>, a protocol number, or -1 for all protocols).</p> </li>   <li> <p> <code>egress.ip-permission.to-port</code> - For an outbound rule, the end of port range for the TCP and UDP protocols, or an ICMP code.</p> </li>   <li> <p> <code>egress.ip-permission.user-id</code> - The ID of an Amazon Web Services account that has been referenced in an outbound security group rule.</p> </li>   <li> <p> <code>group-id</code> - The ID of the security group. </p> </li>   <li> <p> <code>group-name</code> - The name of the security group.</p> </li>   <li> <p> <code>ip-permission.cidr</code> - An IPv4 CIDR block for an inbound security group rule.</p> </li>   <li> <p> <code>ip-permission.from-port</code> - For an inbound rule, the start of port range for the TCP and UDP protocols, or an ICMP type number.</p> </li>   <li> <p> <code>ip-permission.group-id</code> - The ID of a security group that has been referenced in an inbound security group rule.</p> </li>   <li> <p> <code>ip-permission.group-name</code> - The name of a security group that is referenced in an inbound security group rule.</p> </li>   <li> <p> <code>ip-permission.ipv6-cidr</code> - An IPv6 CIDR block for an inbound security group rule.</p> </li>   <li> <p> <code>ip-permission.prefix-list-id</code> - The ID of a prefix list from which a security group rule allows inbound access.</p> </li>   <li> <p> <code>ip-permission.protocol</code> - The IP protocol for an inbound security group rule (<code>tcp</code> | <code>udp</code> | <code>icmp</code>, a protocol number, or -1 for all protocols).</p> </li>   <li> <p> <code>ip-permission.to-port</code> - For an inbound rule, the end of port range for the TCP and UDP protocols, or an ICMP code.</p> </li>   <li> <p> <code>ip-permission.user-id</code> - The ID of an Amazon Web Services account that has been referenced in an inbound security group rule.</p> </li>   <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner of the security group.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC specified when the security group was created.</p> </li>  </ul>
    ///   - [`group_ids(Vec<String>)`](crate::client::fluent_builders::DescribeSecurityGroups::group_ids) / [`set_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSecurityGroups::set_group_ids): <p>The IDs of the security groups. Required for security groups in a nondefault VPC.</p>  <p>Default: Describes all of your security groups.</p>
    ///   - [`group_names(Vec<String>)`](crate::client::fluent_builders::DescribeSecurityGroups::group_names) / [`set_group_names(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSecurityGroups::set_group_names): <p>[EC2-Classic and default VPC only] The names of the security groups. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, use the <code>group-name</code> filter to describe security groups by name.</p>  <p>Default: Describes all of your security groups.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSecurityGroups::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSecurityGroups::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSecurityGroups::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSecurityGroups::set_next_token): <p>The token to request the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSecurityGroups::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSecurityGroups::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000. If this parameter is not specified, then all results are returned.</p>
    /// - On success, responds with [`DescribeSecurityGroupsOutput`](crate::output::DescribeSecurityGroupsOutput) with field(s):
    ///   - [`security_groups(Option<Vec<SecurityGroup>>)`](crate::output::DescribeSecurityGroupsOutput::security_groups): <p>Information about the security groups.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSecurityGroupsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeSecurityGroupsError>`](crate::error::DescribeSecurityGroupsError)
    pub fn describe_security_groups(&self) -> fluent_builders::DescribeSecurityGroups {
        fluent_builders::DescribeSecurityGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSnapshotAttribute`](crate::client::fluent_builders::DescribeSnapshotAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(SnapshotAttributeName)`](crate::client::fluent_builders::DescribeSnapshotAttribute::attribute) / [`set_attribute(Option<SnapshotAttributeName>)`](crate::client::fluent_builders::DescribeSnapshotAttribute::set_attribute): <p>The snapshot attribute you would like to view.</p>
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::DescribeSnapshotAttribute::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::DescribeSnapshotAttribute::set_snapshot_id): <p>The ID of the EBS snapshot.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSnapshotAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSnapshotAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeSnapshotAttributeOutput`](crate::output::DescribeSnapshotAttributeOutput) with field(s):
    ///   - [`create_volume_permissions(Option<Vec<CreateVolumePermission>>)`](crate::output::DescribeSnapshotAttributeOutput::create_volume_permissions): <p>The users and groups that have the permissions for creating volumes from the snapshot.</p>
    ///   - [`product_codes(Option<Vec<ProductCode>>)`](crate::output::DescribeSnapshotAttributeOutput::product_codes): <p>The product codes.</p>
    ///   - [`snapshot_id(Option<String>)`](crate::output::DescribeSnapshotAttributeOutput::snapshot_id): <p>The ID of the EBS snapshot.</p>
    /// - On failure, responds with [`SdkError<DescribeSnapshotAttributeError>`](crate::error::DescribeSnapshotAttributeError)
    pub fn describe_snapshot_attribute(&self) -> fluent_builders::DescribeSnapshotAttribute {
        fluent_builders::DescribeSnapshotAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSnapshots`](crate::client::fluent_builders::DescribeSnapshots) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeSnapshots::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeSnapshots::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeSnapshots::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>description</code> - A description of the snapshot.</p> </li>   <li> <p> <code>encrypted</code> - Indicates whether the snapshot is encrypted (<code>true</code> | <code>false</code>)</p> </li>   <li> <p> <code>owner-alias</code> - The owner alias, from an Amazon-maintained list (<code>amazon</code>). This is not the user-configured Amazon Web Services account alias set using the IAM console. We recommend that you use the related parameter instead of this filter.</p> </li>   <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner. We recommend that you use the related parameter instead of this filter.</p> </li>   <li> <p> <code>progress</code> - The progress of the snapshot, as a percentage (for example, 80%).</p> </li>   <li> <p> <code>snapshot-id</code> - The snapshot ID.</p> </li>   <li> <p> <code>start-time</code> - The time stamp when the snapshot was initiated.</p> </li>   <li> <p> <code>status</code> - The status of the snapshot (<code>pending</code> | <code>completed</code> | <code>error</code>).</p> </li>   <li> <p> <code>storage-tier</code> - The storage tier of the snapshot (<code>archive</code> | <code>standard</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>volume-id</code> - The ID of the volume the snapshot is for.</p> </li>   <li> <p> <code>volume-size</code> - The size of the volume, in GiB.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSnapshots::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSnapshots::set_max_results): <p>The maximum number of snapshot results returned by <code>DescribeSnapshots</code> in paginated output. When this parameter is used, <code>DescribeSnapshots</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>DescribeSnapshots</code> request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned. If this parameter is not used, then <code>DescribeSnapshots</code> returns all results. You cannot specify this parameter and the snapshot IDs parameter in the same request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSnapshots::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSnapshots::set_next_token): <p>The <code>NextToken</code> value returned from a previous paginated <code>DescribeSnapshots</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`owner_ids(Vec<String>)`](crate::client::fluent_builders::DescribeSnapshots::owner_ids) / [`set_owner_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSnapshots::set_owner_ids): <p>Scopes the results to snapshots with the specified owners. You can specify a combination of Amazon Web Services account IDs, <code>self</code>, and <code>amazon</code>.</p>
    ///   - [`restorable_by_user_ids(Vec<String>)`](crate::client::fluent_builders::DescribeSnapshots::restorable_by_user_ids) / [`set_restorable_by_user_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSnapshots::set_restorable_by_user_ids): <p>The IDs of the Amazon Web Services accounts that can create volumes from the snapshot.</p>
    ///   - [`snapshot_ids(Vec<String>)`](crate::client::fluent_builders::DescribeSnapshots::snapshot_ids) / [`set_snapshot_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSnapshots::set_snapshot_ids): <p>The snapshot IDs.</p>  <p>Default: Describes the snapshots for which you have create volume permissions.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSnapshots::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSnapshots::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeSnapshotsOutput`](crate::output::DescribeSnapshotsOutput) with field(s):
    ///   - [`snapshots(Option<Vec<Snapshot>>)`](crate::output::DescribeSnapshotsOutput::snapshots): <p>Information about the snapshots.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSnapshotsOutput::next_token): <p>The <code>NextToken</code> value to include in a future <code>DescribeSnapshots</code> request. When the results of a <code>DescribeSnapshots</code> request exceed <code>MaxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeSnapshotsError>`](crate::error::DescribeSnapshotsError)
    pub fn describe_snapshots(&self) -> fluent_builders::DescribeSnapshots {
        fluent_builders::DescribeSnapshots::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSnapshotTierStatus`](crate::client::fluent_builders::DescribeSnapshotTierStatus) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeSnapshotTierStatus::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeSnapshotTierStatus::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeSnapshotTierStatus::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>snapshot-id</code> - The snapshot ID.</p> </li>   <li> <p> <code>volume-id</code> - The ID of the volume the snapshot is for.</p> </li>   <li> <p> <code>last-tiering-operation</code> - The state of the last archive or restore action. (<code>archival-in-progress</code> | <code>archival-completed</code> | <code>archival-failed</code> | <code>permanent-restore-in-progress</code> | <code>permanent-restore-completed</code> | <code>permanent-restore-failed</code> | <code>temporary-restore-in-progress</code> | <code>temporary-restore-completed</code> | <code>temporary-restore-failed</code>)</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSnapshotTierStatus::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSnapshotTierStatus::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSnapshotTierStatus::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSnapshotTierStatus::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSnapshotTierStatus::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSnapshotTierStatus::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeSnapshotTierStatusOutput`](crate::output::DescribeSnapshotTierStatusOutput) with field(s):
    ///   - [`snapshot_tier_statuses(Option<Vec<SnapshotTierStatus>>)`](crate::output::DescribeSnapshotTierStatusOutput::snapshot_tier_statuses): <p>Information about the snapshot's storage tier.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSnapshotTierStatusOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeSnapshotTierStatusError>`](crate::error::DescribeSnapshotTierStatusError)
    pub fn describe_snapshot_tier_status(&self) -> fluent_builders::DescribeSnapshotTierStatus {
        fluent_builders::DescribeSnapshotTierStatus::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSpotDatafeedSubscription`](crate::client::fluent_builders::DescribeSpotDatafeedSubscription) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSpotDatafeedSubscription::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSpotDatafeedSubscription::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeSpotDatafeedSubscriptionOutput`](crate::output::DescribeSpotDatafeedSubscriptionOutput) with field(s):
    ///   - [`spot_datafeed_subscription(Option<SpotDatafeedSubscription>)`](crate::output::DescribeSpotDatafeedSubscriptionOutput::spot_datafeed_subscription): <p>The Spot Instance data feed subscription.</p>
    /// - On failure, responds with [`SdkError<DescribeSpotDatafeedSubscriptionError>`](crate::error::DescribeSpotDatafeedSubscriptionError)
    pub fn describe_spot_datafeed_subscription(
        &self,
    ) -> fluent_builders::DescribeSpotDatafeedSubscription {
        fluent_builders::DescribeSpotDatafeedSubscription::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSpotFleetInstances`](crate::client::fluent_builders::DescribeSpotFleetInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSpotFleetInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSpotFleetInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSpotFleetInstances::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSpotFleetInstances::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSpotFleetInstances::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSpotFleetInstances::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`spot_fleet_request_id(impl Into<String>)`](crate::client::fluent_builders::DescribeSpotFleetInstances::spot_fleet_request_id) / [`set_spot_fleet_request_id(Option<String>)`](crate::client::fluent_builders::DescribeSpotFleetInstances::set_spot_fleet_request_id): <p>The ID of the Spot Fleet request.</p>
    /// - On success, responds with [`DescribeSpotFleetInstancesOutput`](crate::output::DescribeSpotFleetInstancesOutput) with field(s):
    ///   - [`active_instances(Option<Vec<ActiveInstance>>)`](crate::output::DescribeSpotFleetInstancesOutput::active_instances): <p>The running instances. This list is refreshed periodically and might be out of date.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSpotFleetInstancesOutput::next_token): <p>The token required to retrieve the next set of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`spot_fleet_request_id(Option<String>)`](crate::output::DescribeSpotFleetInstancesOutput::spot_fleet_request_id): <p>The ID of the Spot Fleet request.</p>
    /// - On failure, responds with [`SdkError<DescribeSpotFleetInstancesError>`](crate::error::DescribeSpotFleetInstancesError)
    pub fn describe_spot_fleet_instances(&self) -> fluent_builders::DescribeSpotFleetInstances {
        fluent_builders::DescribeSpotFleetInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSpotFleetRequestHistory`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`event_type(EventType)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::event_type) / [`set_event_type(Option<EventType>)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::set_event_type): <p>The type of events to describe. By default, all events are described.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`spot_fleet_request_id(impl Into<String>)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::spot_fleet_request_id) / [`set_spot_fleet_request_id(Option<String>)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::set_spot_fleet_request_id): <p>The ID of the Spot Fleet request.</p>
    ///   - [`start_time(DateTime)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::start_time) / [`set_start_time(Option<DateTime>)`](crate::client::fluent_builders::DescribeSpotFleetRequestHistory::set_start_time): <p>The starting date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
    /// - On success, responds with [`DescribeSpotFleetRequestHistoryOutput`](crate::output::DescribeSpotFleetRequestHistoryOutput) with field(s):
    ///   - [`history_records(Option<Vec<HistoryRecord>>)`](crate::output::DescribeSpotFleetRequestHistoryOutput::history_records): <p>Information about the events in the history of the Spot Fleet request.</p>
    ///   - [`last_evaluated_time(Option<DateTime>)`](crate::output::DescribeSpotFleetRequestHistoryOutput::last_evaluated_time): <p>The last date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). All records up to this time were retrieved.</p>  <p>If <code>nextToken</code> indicates that there are more results, this value is not present.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSpotFleetRequestHistoryOutput::next_token): <p>The token required to retrieve the next set of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`spot_fleet_request_id(Option<String>)`](crate::output::DescribeSpotFleetRequestHistoryOutput::spot_fleet_request_id): <p>The ID of the Spot Fleet request.</p>
    ///   - [`start_time(Option<DateTime>)`](crate::output::DescribeSpotFleetRequestHistoryOutput::start_time): <p>The starting date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
    /// - On failure, responds with [`SdkError<DescribeSpotFleetRequestHistoryError>`](crate::error::DescribeSpotFleetRequestHistoryError)
    pub fn describe_spot_fleet_request_history(
        &self,
    ) -> fluent_builders::DescribeSpotFleetRequestHistory {
        fluent_builders::DescribeSpotFleetRequestHistory::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSpotFleetRequests`](crate::client::fluent_builders::DescribeSpotFleetRequests) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeSpotFleetRequests::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSpotFleetRequests::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSpotFleetRequests::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSpotFleetRequests::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSpotFleetRequests::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSpotFleetRequests::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSpotFleetRequests::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`spot_fleet_request_ids(Vec<String>)`](crate::client::fluent_builders::DescribeSpotFleetRequests::spot_fleet_request_ids) / [`set_spot_fleet_request_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSpotFleetRequests::set_spot_fleet_request_ids): <p>The IDs of the Spot Fleet requests.</p>
    /// - On success, responds with [`DescribeSpotFleetRequestsOutput`](crate::output::DescribeSpotFleetRequestsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSpotFleetRequestsOutput::next_token): <p>The token required to retrieve the next set of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`spot_fleet_request_configs(Option<Vec<SpotFleetRequestConfig>>)`](crate::output::DescribeSpotFleetRequestsOutput::spot_fleet_request_configs): <p>Information about the configuration of your Spot Fleet.</p>
    /// - On failure, responds with [`SdkError<DescribeSpotFleetRequestsError>`](crate::error::DescribeSpotFleetRequestsError)
    pub fn describe_spot_fleet_requests(&self) -> fluent_builders::DescribeSpotFleetRequests {
        fluent_builders::DescribeSpotFleetRequests::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSpotInstanceRequests`](crate::client::fluent_builders::DescribeSpotInstanceRequests) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeSpotInstanceRequests::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>availability-zone-group</code> - The Availability Zone group.</p> </li>   <li> <p> <code>create-time</code> - The time stamp when the Spot Instance request was created.</p> </li>   <li> <p> <code>fault-code</code> - The fault code related to the request.</p> </li>   <li> <p> <code>fault-message</code> - The fault message related to the request.</p> </li>   <li> <p> <code>instance-id</code> - The ID of the instance that fulfilled the request.</p> </li>   <li> <p> <code>launch-group</code> - The Spot Instance launch group.</p> </li>   <li> <p> <code>launch.block-device-mapping.delete-on-termination</code> - Indicates whether the EBS volume is deleted on instance termination.</p> </li>   <li> <p> <code>launch.block-device-mapping.device-name</code> - The device name for the volume in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>   <li> <p> <code>launch.block-device-mapping.snapshot-id</code> - The ID of the snapshot for the EBS volume.</p> </li>   <li> <p> <code>launch.block-device-mapping.volume-size</code> - The size of the EBS volume, in GiB.</p> </li>   <li> <p> <code>launch.block-device-mapping.volume-type</code> - The type of EBS volume: <code>gp2</code> for General Purpose SSD, <code>io1</code> or <code>io2</code> for Provisioned IOPS SSD, <code>st1</code> for Throughput Optimized HDD, <code>sc1</code>for Cold HDD, or <code>standard</code> for Magnetic.</p> </li>   <li> <p> <code>launch.group-id</code> - The ID of the security group for the instance.</p> </li>   <li> <p> <code>launch.group-name</code> - The name of the security group for the instance.</p> </li>   <li> <p> <code>launch.image-id</code> - The ID of the AMI.</p> </li>   <li> <p> <code>launch.instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li>   <li> <p> <code>launch.kernel-id</code> - The kernel ID.</p> </li>   <li> <p> <code>launch.key-name</code> - The name of the key pair the instance launched with.</p> </li>   <li> <p> <code>launch.monitoring-enabled</code> - Whether detailed monitoring is enabled for the Spot Instance.</p> </li>   <li> <p> <code>launch.ramdisk-id</code> - The RAM disk ID.</p> </li>   <li> <p> <code>launched-availability-zone</code> - The Availability Zone in which the request is launched.</p> </li>   <li> <p> <code>network-interface.addresses.primary</code> - Indicates whether the IP address is the primary private IP address.</p> </li>   <li> <p> <code>network-interface.delete-on-termination</code> - Indicates whether the network interface is deleted when the instance is terminated.</p> </li>   <li> <p> <code>network-interface.description</code> - A description of the network interface.</p> </li>   <li> <p> <code>network-interface.device-index</code> - The index of the device for the network interface attachment on the instance.</p> </li>   <li> <p> <code>network-interface.group-id</code> - The ID of the security group associated with the network interface.</p> </li>   <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li>   <li> <p> <code>network-interface.private-ip-address</code> - The primary private IP address of the network interface.</p> </li>   <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the instance.</p> </li>   <li> <p> <code>product-description</code> - The product description associated with the instance (<code>Linux/UNIX</code> | <code>Windows</code>).</p> </li>   <li> <p> <code>spot-instance-request-id</code> - The Spot Instance request ID.</p> </li>   <li> <p> <code>spot-price</code> - The maximum hourly price for any Spot Instance launched to fulfill the request.</p> </li>   <li> <p> <code>state</code> - The state of the Spot Instance request (<code>open</code> | <code>active</code> | <code>closed</code> | <code>cancelled</code> | <code>failed</code>). Spot request status information can help you track your Amazon EC2 Spot Instance requests. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html">Spot request status</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> </li>   <li> <p> <code>status-code</code> - The short code describing the most recent evaluation of your Spot Instance request.</p> </li>   <li> <p> <code>status-message</code> - The message explaining the status of the Spot Instance request.</p> </li>   <li> <p> <code>tag:     <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>type</code> - The type of Spot Instance request (<code>one-time</code> | <code>persistent</code>).</p> </li>   <li> <p> <code>valid-from</code> - The start date of the request.</p> </li>   <li> <p> <code>valid-until</code> - The end date of the request.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`spot_instance_request_ids(Vec<String>)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::spot_instance_request_ids) / [`set_spot_instance_request_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::set_spot_instance_request_ids): <p>One or more Spot Instance request IDs.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::set_next_token): <p>The token to request the next set of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSpotInstanceRequests::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 5 and 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    /// - On success, responds with [`DescribeSpotInstanceRequestsOutput`](crate::output::DescribeSpotInstanceRequestsOutput) with field(s):
    ///   - [`spot_instance_requests(Option<Vec<SpotInstanceRequest>>)`](crate::output::DescribeSpotInstanceRequestsOutput::spot_instance_requests): <p>One or more Spot Instance requests.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSpotInstanceRequestsOutput::next_token): <p>The token to use to retrieve the next set of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeSpotInstanceRequestsError>`](crate::error::DescribeSpotInstanceRequestsError)
    pub fn describe_spot_instance_requests(&self) -> fluent_builders::DescribeSpotInstanceRequests {
        fluent_builders::DescribeSpotInstanceRequests::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSpotPriceHistory`](crate::client::fluent_builders::DescribeSpotPriceHistory) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeSpotPriceHistory::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>availability-zone</code> - The Availability Zone for which prices should be returned.</p> </li>   <li> <p> <code>instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li>   <li> <p> <code>product-description</code> - The product description for the Spot price (<code>Linux/UNIX</code> | <code>Red Hat Enterprise Linux</code> | <code>SUSE Linux</code> | <code>Windows</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Windows (Amazon VPC)</code>).</p> </li>   <li> <p> <code>spot-price</code> - The Spot price. The value must match exactly (or use wildcards; greater than or less than comparison is not supported).</p> </li>   <li> <p> <code>timestamp</code> - The time stamp of the Spot price history, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). You can use wildcards (* and ?). Greater than or less than comparison is not supported.</p> </li>  </ul>
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_availability_zone): <p>Filters the results by the specified Availability Zone.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSpotPriceHistory::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`end_time(DateTime)`](crate::client::fluent_builders::DescribeSpotPriceHistory::end_time) / [`set_end_time(Option<DateTime>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_end_time): <p>The date and time, up to the current date, from which to stop retrieving the price history data, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
    ///   - [`instance_types(Vec<InstanceType>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::instance_types) / [`set_instance_types(Option<Vec<InstanceType>>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_instance_types): <p>Filters the results by the specified instance types.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSpotPriceHistory::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_next_token): <p>The token for the next set of results.</p>
    ///   - [`product_descriptions(Vec<String>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::product_descriptions) / [`set_product_descriptions(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_product_descriptions): <p>Filters the results by the specified basic product descriptions.</p>
    ///   - [`start_time(DateTime)`](crate::client::fluent_builders::DescribeSpotPriceHistory::start_time) / [`set_start_time(Option<DateTime>)`](crate::client::fluent_builders::DescribeSpotPriceHistory::set_start_time): <p>The date and time, up to the past 90 days, from which to start retrieving the price history data, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
    /// - On success, responds with [`DescribeSpotPriceHistoryOutput`](crate::output::DescribeSpotPriceHistoryOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSpotPriceHistoryOutput::next_token): <p>The token required to retrieve the next set of results. This value is null or an empty string when there are no more results to return.</p>
    ///   - [`spot_price_history(Option<Vec<SpotPrice>>)`](crate::output::DescribeSpotPriceHistoryOutput::spot_price_history): <p>The historical Spot prices.</p>
    /// - On failure, responds with [`SdkError<DescribeSpotPriceHistoryError>`](crate::error::DescribeSpotPriceHistoryError)
    pub fn describe_spot_price_history(&self) -> fluent_builders::DescribeSpotPriceHistory {
        fluent_builders::DescribeSpotPriceHistory::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeStaleSecurityGroups`](crate::client::fluent_builders::DescribeStaleSecurityGroups) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeStaleSecurityGroups::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeStaleSecurityGroups::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeStaleSecurityGroups::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeStaleSecurityGroups::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeStaleSecurityGroups::set_max_results): <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeStaleSecurityGroups::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeStaleSecurityGroups::set_next_token): <p>The token for the next set of items to return. (You received this token from a prior call.)</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::DescribeStaleSecurityGroups::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::DescribeStaleSecurityGroups::set_vpc_id): <p>The ID of the VPC.</p>
    /// - On success, responds with [`DescribeStaleSecurityGroupsOutput`](crate::output::DescribeStaleSecurityGroupsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeStaleSecurityGroupsOutput::next_token): <p>The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.</p>
    ///   - [`stale_security_group_set(Option<Vec<StaleSecurityGroup>>)`](crate::output::DescribeStaleSecurityGroupsOutput::stale_security_group_set): <p>Information about the stale security groups.</p>
    /// - On failure, responds with [`SdkError<DescribeStaleSecurityGroupsError>`](crate::error::DescribeStaleSecurityGroupsError)
    pub fn describe_stale_security_groups(&self) -> fluent_builders::DescribeStaleSecurityGroups {
        fluent_builders::DescribeStaleSecurityGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeStoreImageTasks`](crate::client::fluent_builders::DescribeStoreImageTasks) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeStoreImageTasks::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_ids(Vec<String>)`](crate::client::fluent_builders::DescribeStoreImageTasks::image_ids) / [`set_image_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeStoreImageTasks::set_image_ids): <p>The AMI IDs for which to show progress. Up to 20 AMI IDs can be included in a request.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeStoreImageTasks::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeStoreImageTasks::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeStoreImageTasks::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeStoreImageTasks::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>task-state</code> - Returns tasks in a certain state (<code>InProgress</code> | <code>Completed</code> | <code>Failed</code>)</p> </li>   <li> <p> <code>bucket</code> - Returns task information for tasks that targeted a specific bucket. For the filter value, specify the bucket name.</p> </li>  </ul>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeStoreImageTasks::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeStoreImageTasks::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeStoreImageTasks::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeStoreImageTasks::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200. You cannot specify this parameter and the <code>ImageIDs</code> parameter in the same call.</p>
    /// - On success, responds with [`DescribeStoreImageTasksOutput`](crate::output::DescribeStoreImageTasksOutput) with field(s):
    ///   - [`store_image_task_results(Option<Vec<StoreImageTaskResult>>)`](crate::output::DescribeStoreImageTasksOutput::store_image_task_results): <p>The information about the AMI store tasks.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeStoreImageTasksOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeStoreImageTasksError>`](crate::error::DescribeStoreImageTasksError)
    pub fn describe_store_image_tasks(&self) -> fluent_builders::DescribeStoreImageTasks {
        fluent_builders::DescribeStoreImageTasks::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeSubnets`](crate::client::fluent_builders::DescribeSubnets) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeSubnets::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeSubnets::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeSubnets::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>availability-zone</code> - The Availability Zone for the subnet. You can also use <code>availabilityZone</code> as the filter name.</p> </li>   <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone for the subnet. You can also use <code>availabilityZoneId</code> as the filter name.</p> </li>   <li> <p> <code>available-ip-address-count</code> - The number of IPv4 addresses in the subnet that are available.</p> </li>   <li> <p> <code>cidr-block</code> - The IPv4 CIDR block of the subnet. The CIDR block you specify must exactly match the subnet's CIDR block for information to be returned for the subnet. You can also use <code>cidr</code> or <code>cidrBlock</code> as the filter names.</p> </li>   <li> <p> <code>customer-owned-ipv4-pool</code> - The customer-owned IPv4 address pool associated with the subnet.</p> </li>   <li> <p> <code>default-for-az</code> - Indicates whether this is the default subnet for the Availability Zone (<code>true</code> | <code>false</code>). You can also use <code>defaultForAz</code> as the filter name.</p> </li>   <li> <p> <code>enable-dns64</code> - Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this subnet should return synthetic IPv6 addresses for IPv4-only destinations.</p> </li>   <li> <p> <code>enable-lni-at-device-index</code> - Indicates the device position for local network interfaces in this subnet. For example, <code>1</code> indicates local network interfaces in this subnet are the secondary network interface (eth1). </p> </li>   <li> <p> <code>ipv6-cidr-block-association.ipv6-cidr-block</code> - An IPv6 CIDR block associated with the subnet.</p> </li>   <li> <p> <code>ipv6-cidr-block-association.association-id</code> - An association ID for an IPv6 CIDR block associated with the subnet.</p> </li>   <li> <p> <code>ipv6-cidr-block-association.state</code> - The state of an IPv6 CIDR block associated with the subnet.</p> </li>   <li> <p> <code>ipv6-native</code> - Indicates whether this is an IPv6 only subnet (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>map-customer-owned-ip-on-launch</code> - Indicates whether a network interface created in this subnet (including a network interface created by <code>RunInstances</code>) receives a customer-owned IPv4 address.</p> </li>   <li> <p> <code>map-public-ip-on-launch</code> - Indicates whether instances launched in this subnet receive a public IPv4 address.</p> </li>   <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the subnet.</p> </li>   <li> <p> <code>private-dns-name-options-on-launch.hostname-type</code> - The type of hostname to assign to instances in the subnet at launch. For IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name can be based on the instance IPv4 address (ip-name) or the instance ID (resource-name). For IPv6 only subnets, an instance DNS name must be based on the instance ID (resource-name).</p> </li>   <li> <p> <code>private-dns-name-options-on-launch.enable-resource-name-dns-a-record</code> - Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p> </li>   <li> <p> <code>private-dns-name-options-on-launch.enable-resource-name-dns-aaaa-record</code> - Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p> </li>   <li> <p> <code>state</code> - The state of the subnet (<code>pending</code> | <code>available</code>).</p> </li>   <li> <p> <code>subnet-arn</code> - The Amazon Resource Name (ARN) of the subnet.</p> </li>   <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC for the subnet.</p> </li>  </ul>
    ///   - [`subnet_ids(Vec<String>)`](crate::client::fluent_builders::DescribeSubnets::subnet_ids) / [`set_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeSubnets::set_subnet_ids): <p>One or more subnet IDs.</p>  <p>Default: Describes all your subnets.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeSubnets::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeSubnets::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeSubnets::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeSubnets::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeSubnets::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeSubnets::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeSubnetsOutput`](crate::output::DescribeSubnetsOutput) with field(s):
    ///   - [`subnets(Option<Vec<Subnet>>)`](crate::output::DescribeSubnetsOutput::subnets): <p>Information about one or more subnets.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeSubnetsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeSubnetsError>`](crate::error::DescribeSubnetsError)
    pub fn describe_subnets(&self) -> fluent_builders::DescribeSubnets {
        fluent_builders::DescribeSubnets::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTags`](crate::client::fluent_builders::DescribeTags) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTags::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTags::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTags::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTags::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTags::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>key</code> - The tag key.</p> </li>   <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>   <li> <p> <code>resource-type</code> - The resource type (<code>customer-gateway</code> | <code>dedicated-host</code> | <code>dhcp-options</code> | <code>elastic-ip</code> | <code>fleet</code> | <code>fpga-image</code> | <code>host-reservation</code> | <code>image</code> | <code>instance</code> | <code>internet-gateway</code> | <code>key-pair</code> | <code>launch-template</code> | <code>natgateway</code> | <code>network-acl</code> | <code>network-interface</code> | <code>placement-group</code> | <code>reserved-instances</code> | <code>route-table</code> | <code>security-group</code> | <code>snapshot</code> | <code>spot-instances-request</code> | <code>subnet</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-endpoint</code> | <code>vpc-endpoint-service</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of the tag. For example, specify "tag:Owner" for the filter name and "TeamA" for the filter value to find resources with the tag "Owner=TeamA".    </key></p> </li>   <li> <p> <code>value</code> - The tag value.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTags::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTags::set_max_results): <p>The maximum number of results to return in a single call. This value can be between 5 and 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTags::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTags::set_next_token): <p>The token to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeTagsOutput`](crate::output::DescribeTagsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTagsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`tags(Option<Vec<TagDescription>>)`](crate::output::DescribeTagsOutput::tags): <p>The tags.</p>
    /// - On failure, responds with [`SdkError<DescribeTagsError>`](crate::error::DescribeTagsError)
    pub fn describe_tags(&self) -> fluent_builders::DescribeTags {
        fluent_builders::DescribeTags::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTrafficMirrorFilters`](crate::client::fluent_builders::DescribeTrafficMirrorFilters) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_filter_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::traffic_mirror_filter_ids) / [`set_traffic_mirror_filter_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::set_traffic_mirror_filter_ids): <p>The ID of the Traffic Mirror filter.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>description</code>: The Traffic Mirror filter description.</p> </li>   <li> <p> <code>traffic-mirror-filter-id</code>: The ID of the Traffic Mirror filter.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorFilters::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeTrafficMirrorFiltersOutput`](crate::output::DescribeTrafficMirrorFiltersOutput) with field(s):
    ///   - [`traffic_mirror_filters(Option<Vec<TrafficMirrorFilter>>)`](crate::output::DescribeTrafficMirrorFiltersOutput::traffic_mirror_filters): <p>Information about one or more Traffic Mirror filters.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTrafficMirrorFiltersOutput::next_token): <p>The token to use to retrieve the next page of results. The value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTrafficMirrorFiltersError>`](crate::error::DescribeTrafficMirrorFiltersError)
    pub fn describe_traffic_mirror_filters(&self) -> fluent_builders::DescribeTrafficMirrorFilters {
        fluent_builders::DescribeTrafficMirrorFilters::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTrafficMirrorSessions`](crate::client::fluent_builders::DescribeTrafficMirrorSessions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_session_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::traffic_mirror_session_ids) / [`set_traffic_mirror_session_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::set_traffic_mirror_session_ids): <p>The ID of the Traffic Mirror session.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>description</code>: The Traffic Mirror session description.</p> </li>   <li> <p> <code>network-interface-id</code>: The ID of the Traffic Mirror session network interface.</p> </li>   <li> <p> <code>owner-id</code>: The ID of the account that owns the Traffic Mirror session.</p> </li>   <li> <p> <code>packet-length</code>: The assigned number of packets to mirror. </p> </li>   <li> <p> <code>session-number</code>: The assigned session number. </p> </li>   <li> <p> <code>traffic-mirror-filter-id</code>: The ID of the Traffic Mirror filter.</p> </li>   <li> <p> <code>traffic-mirror-session-id</code>: The ID of the Traffic Mirror session.</p> </li>   <li> <p> <code>traffic-mirror-target-id</code>: The ID of the Traffic Mirror target.</p> </li>   <li> <p> <code>virtual-network-id</code>: The virtual network ID of the Traffic Mirror session.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorSessions::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeTrafficMirrorSessionsOutput`](crate::output::DescribeTrafficMirrorSessionsOutput) with field(s):
    ///   - [`traffic_mirror_sessions(Option<Vec<TrafficMirrorSession>>)`](crate::output::DescribeTrafficMirrorSessionsOutput::traffic_mirror_sessions): <p>Describes one or more Traffic Mirror sessions. By default, all Traffic Mirror sessions are described. Alternatively, you can filter the results.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTrafficMirrorSessionsOutput::next_token): <p>The token to use to retrieve the next page of results. The value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTrafficMirrorSessionsError>`](crate::error::DescribeTrafficMirrorSessionsError)
    pub fn describe_traffic_mirror_sessions(
        &self,
    ) -> fluent_builders::DescribeTrafficMirrorSessions {
        fluent_builders::DescribeTrafficMirrorSessions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTrafficMirrorTargets`](crate::client::fluent_builders::DescribeTrafficMirrorTargets) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_target_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::traffic_mirror_target_ids) / [`set_traffic_mirror_target_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::set_traffic_mirror_target_ids): <p>The ID of the Traffic Mirror targets.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>description</code>: The Traffic Mirror target description.</p> </li>   <li> <p> <code>network-interface-id</code>: The ID of the Traffic Mirror session network interface.</p> </li>   <li> <p> <code>network-load-balancer-arn</code>: The Amazon Resource Name (ARN) of the Network Load Balancer that is associated with the session.</p> </li>   <li> <p> <code>owner-id</code>: The ID of the account that owns the Traffic Mirror session.</p> </li>   <li> <p> <code>traffic-mirror-target-id</code>: The ID of the Traffic Mirror target.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTrafficMirrorTargets::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`DescribeTrafficMirrorTargetsOutput`](crate::output::DescribeTrafficMirrorTargetsOutput) with field(s):
    ///   - [`traffic_mirror_targets(Option<Vec<TrafficMirrorTarget>>)`](crate::output::DescribeTrafficMirrorTargetsOutput::traffic_mirror_targets): <p>Information about one or more Traffic Mirror targets.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTrafficMirrorTargetsOutput::next_token): <p>The token to use to retrieve the next page of results. The value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTrafficMirrorTargetsError>`](crate::error::DescribeTrafficMirrorTargetsError)
    pub fn describe_traffic_mirror_targets(&self) -> fluent_builders::DescribeTrafficMirrorTargets {
        fluent_builders::DescribeTrafficMirrorTargets::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayAttachments`](crate::client::fluent_builders::DescribeTransitGatewayAttachments) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::transit_gateway_attachment_ids) / [`set_transit_gateway_attachment_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::set_transit_gateway_attachment_ids): <p>The IDs of the attachments.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>association.state</code> - The state of the association (<code>associating</code> | <code>associated</code> | <code>disassociating</code>).</p> </li>   <li> <p> <code>association.transit-gateway-route-table-id</code> - The ID of the route table for the transit gateway.</p> </li>   <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>   <li> <p> <code>resource-owner-id</code> - The ID of the Amazon Web Services account that owns the resource.</p> </li>   <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>   <li> <p> <code>state</code> - The state of the attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>.</p> </li>   <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>   <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>   <li> <p> <code>transit-gateway-owner-id</code> - The ID of the Amazon Web Services account that owns the transit gateway.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayAttachments::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayAttachmentsOutput`](crate::output::DescribeTransitGatewayAttachmentsOutput) with field(s):
    ///   - [`transit_gateway_attachments(Option<Vec<TransitGatewayAttachment>>)`](crate::output::DescribeTransitGatewayAttachmentsOutput::transit_gateway_attachments): <p>Information about the attachments.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayAttachmentsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayAttachmentsError>`](crate::error::DescribeTransitGatewayAttachmentsError)
    pub fn describe_transit_gateway_attachments(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayAttachments {
        fluent_builders::DescribeTransitGatewayAttachments::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayConnectPeers`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_connect_peer_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::transit_gateway_connect_peer_ids) / [`set_transit_gateway_connect_peer_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::set_transit_gateway_connect_peer_ids): <p>The IDs of the Connect peers.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>state</code> - The state of the Connect peer (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>   <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>   <li> <p> <code>transit-gateway-connect-peer-id</code> - The ID of the Connect peer.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayConnectPeers::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayConnectPeersOutput`](crate::output::DescribeTransitGatewayConnectPeersOutput) with field(s):
    ///   - [`transit_gateway_connect_peers(Option<Vec<TransitGatewayConnectPeer>>)`](crate::output::DescribeTransitGatewayConnectPeersOutput::transit_gateway_connect_peers): <p>Information about the Connect peers.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayConnectPeersOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayConnectPeersError>`](crate::error::DescribeTransitGatewayConnectPeersError)
    pub fn describe_transit_gateway_connect_peers(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayConnectPeers {
        fluent_builders::DescribeTransitGatewayConnectPeers::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayConnects`](crate::client::fluent_builders::DescribeTransitGatewayConnects) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayConnects::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::transit_gateway_attachment_ids) / [`set_transit_gateway_attachment_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::set_transit_gateway_attachment_ids): <p>The IDs of the attachments.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>options.protocol</code> - The tunnel protocol (<code>gre</code>).</p> </li>   <li> <p> <code>state</code> - The state of the attachment (<code>initiating</code> | <code>initiatingRequest</code> | <code>pendingAcceptance</code> | <code>rollingBack</code> | <code>pending</code> | <code>available</code> | <code>modifying</code> | <code>deleting</code> | <code>deleted</code> | <code>failed</code> | <code>rejected</code> | <code>rejecting</code> | <code>failing</code>).</p> </li>   <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the Connect attachment.</p> </li>   <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>   <li> <p> <code>transport-transit-gateway-attachment-id</code> - The ID of the transit gateway attachment from which the Connect attachment was created.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayConnects::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayConnectsOutput`](crate::output::DescribeTransitGatewayConnectsOutput) with field(s):
    ///   - [`transit_gateway_connects(Option<Vec<TransitGatewayConnect>>)`](crate::output::DescribeTransitGatewayConnectsOutput::transit_gateway_connects): <p>Information about the Connect attachments.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayConnectsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayConnectsError>`](crate::error::DescribeTransitGatewayConnectsError)
    pub fn describe_transit_gateway_connects(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayConnects {
        fluent_builders::DescribeTransitGatewayConnects::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayMulticastDomains`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::transit_gateway_multicast_domain_ids) / [`set_transit_gateway_multicast_domain_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::set_transit_gateway_multicast_domain_ids): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>state</code> - The state of the transit gateway multicast domain. Valid values are <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>.</p> </li>   <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>   <li> <p> <code>transit-gateway-multicast-domain-id</code> - The ID of the transit gateway multicast domain.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayMulticastDomains::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayMulticastDomainsOutput`](crate::output::DescribeTransitGatewayMulticastDomainsOutput) with field(s):
    ///   - [`transit_gateway_multicast_domains(Option<Vec<TransitGatewayMulticastDomain>>)`](crate::output::DescribeTransitGatewayMulticastDomainsOutput::transit_gateway_multicast_domains): <p>Information about the transit gateway multicast domains.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayMulticastDomainsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayMulticastDomainsError>`](crate::error::DescribeTransitGatewayMulticastDomainsError)
    pub fn describe_transit_gateway_multicast_domains(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayMulticastDomains {
        fluent_builders::DescribeTransitGatewayMulticastDomains::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayPeeringAttachments`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::transit_gateway_attachment_ids) / [`set_transit_gateway_attachment_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::set_transit_gateway_attachment_ids): <p>One or more IDs of the transit gateway peering attachments.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the transit gateway attachment.</p> </li>   <li> <p> <code>local-owner-id</code> - The ID of your Amazon Web Services account.</p> </li>   <li> <p> <code>remote-owner-id</code> - The ID of the Amazon Web Services account in the remote Region that owns the transit gateway.</p> </li>   <li> <p> <code>state</code> - The state of the peering attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayPeeringAttachments::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayPeeringAttachmentsOutput`](crate::output::DescribeTransitGatewayPeeringAttachmentsOutput) with field(s):
    ///   - [`transit_gateway_peering_attachments(Option<Vec<TransitGatewayPeeringAttachment>>)`](crate::output::DescribeTransitGatewayPeeringAttachmentsOutput::transit_gateway_peering_attachments): <p>The transit gateway peering attachments.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayPeeringAttachmentsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayPeeringAttachmentsError>`](crate::error::DescribeTransitGatewayPeeringAttachmentsError)
    pub fn describe_transit_gateway_peering_attachments(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayPeeringAttachments {
        fluent_builders::DescribeTransitGatewayPeeringAttachments::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayPolicyTables`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_policy_table_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::transit_gateway_policy_table_ids) / [`set_transit_gateway_policy_table_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::set_transit_gateway_policy_table_ids): <p>The IDs of the transit gateway policy tables.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::set_filters): <p>The filters associated with the transit gateway policy table.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayPolicyTables::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayPolicyTablesOutput`](crate::output::DescribeTransitGatewayPolicyTablesOutput) with field(s):
    ///   - [`transit_gateway_policy_tables(Option<Vec<TransitGatewayPolicyTable>>)`](crate::output::DescribeTransitGatewayPolicyTablesOutput::transit_gateway_policy_tables): <p>Describes the transit gateway policy tables.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayPolicyTablesOutput::next_token): <p>The token for the next page of results.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayPolicyTablesError>`](crate::error::DescribeTransitGatewayPolicyTablesError)
    pub fn describe_transit_gateway_policy_tables(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayPolicyTables {
        fluent_builders::DescribeTransitGatewayPolicyTables::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayRouteTableAnnouncements`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_announcement_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::transit_gateway_route_table_announcement_ids) / [`set_transit_gateway_route_table_announcement_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::set_transit_gateway_route_table_announcement_ids): <p>The IDs of the transit gateway route tables that are being advertised.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::set_filters): <p>The filters associated with the transit gateway policy table.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayRouteTableAnnouncementsOutput`](crate::output::DescribeTransitGatewayRouteTableAnnouncementsOutput) with field(s):
    ///   - [`transit_gateway_route_table_announcements(Option<Vec<TransitGatewayRouteTableAnnouncement>>)`](crate::output::DescribeTransitGatewayRouteTableAnnouncementsOutput::transit_gateway_route_table_announcements): <p>Describes the transit gateway route table announcement.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayRouteTableAnnouncementsOutput::next_token): <p>The token for the next page of results.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayRouteTableAnnouncementsError>`](crate::error::DescribeTransitGatewayRouteTableAnnouncementsError)
    pub fn describe_transit_gateway_route_table_announcements(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayRouteTableAnnouncements {
        fluent_builders::DescribeTransitGatewayRouteTableAnnouncements::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayRouteTables`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::transit_gateway_route_table_ids) / [`set_transit_gateway_route_table_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::set_transit_gateway_route_table_ids): <p>The IDs of the transit gateway route tables.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>default-association-route-table</code> - Indicates whether this is the default association route table for the transit gateway (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>default-propagation-route-table</code> - Indicates whether this is the default propagation route table for the transit gateway (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>state</code> - The state of the route table (<code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>pending</code>).</p> </li>   <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>   <li> <p> <code>transit-gateway-route-table-id</code> - The ID of the transit gateway route table.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayRouteTables::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayRouteTablesOutput`](crate::output::DescribeTransitGatewayRouteTablesOutput) with field(s):
    ///   - [`transit_gateway_route_tables(Option<Vec<TransitGatewayRouteTable>>)`](crate::output::DescribeTransitGatewayRouteTablesOutput::transit_gateway_route_tables): <p>Information about the transit gateway route tables.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayRouteTablesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayRouteTablesError>`](crate::error::DescribeTransitGatewayRouteTablesError)
    pub fn describe_transit_gateway_route_tables(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayRouteTables {
        fluent_builders::DescribeTransitGatewayRouteTables::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGateways`](crate::client::fluent_builders::DescribeTransitGateways) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGateways::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGateways::transit_gateway_ids) / [`set_transit_gateway_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGateways::set_transit_gateway_ids): <p>The IDs of the transit gateways.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGateways::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGateways::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>options.propagation-default-route-table-id</code> - The ID of the default propagation route table.</p> </li>   <li> <p> <code>options.amazon-side-asn</code> - The private ASN for the Amazon side of a BGP session.</p> </li>   <li> <p> <code>options.association-default-route-table-id</code> - The ID of the default association route table.</p> </li>   <li> <p> <code>options.auto-accept-shared-attachments</code> - Indicates whether there is automatic acceptance of attachment requests (<code>enable</code> | <code>disable</code>).</p> </li>   <li> <p> <code>options.default-route-table-association</code> - Indicates whether resource attachments are automatically associated with the default association route table (<code>enable</code> | <code>disable</code>).</p> </li>   <li> <p> <code>options.default-route-table-propagation</code> - Indicates whether resource attachments automatically propagate routes to the default propagation route table (<code>enable</code> | <code>disable</code>).</p> </li>   <li> <p> <code>options.dns-support</code> - Indicates whether DNS support is enabled (<code>enable</code> | <code>disable</code>).</p> </li>   <li> <p> <code>options.vpn-ecmp-support</code> - Indicates whether Equal Cost Multipath Protocol support is enabled (<code>enable</code> | <code>disable</code>).</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the transit gateway.</p> </li>   <li> <p> <code>state</code> - The state of the transit gateway (<code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>modifying</code> | <code>pending</code>).</p> </li>   <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGateways::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGateways::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGateways::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGateways::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGateways::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGateways::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewaysOutput`](crate::output::DescribeTransitGatewaysOutput) with field(s):
    ///   - [`transit_gateways(Option<Vec<TransitGateway>>)`](crate::output::DescribeTransitGatewaysOutput::transit_gateways): <p>Information about the transit gateways.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewaysOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewaysError>`](crate::error::DescribeTransitGatewaysError)
    pub fn describe_transit_gateways(&self) -> fluent_builders::DescribeTransitGateways {
        fluent_builders::DescribeTransitGateways::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTransitGatewayVpcAttachments`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::transit_gateway_attachment_ids) / [`set_transit_gateway_attachment_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::set_transit_gateway_attachment_ids): <p>The IDs of the attachments.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>state</code> - The state of the attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>.</p> </li>   <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>   <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTransitGatewayVpcAttachments::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeTransitGatewayVpcAttachmentsOutput`](crate::output::DescribeTransitGatewayVpcAttachmentsOutput) with field(s):
    ///   - [`transit_gateway_vpc_attachments(Option<Vec<TransitGatewayVpcAttachment>>)`](crate::output::DescribeTransitGatewayVpcAttachmentsOutput::transit_gateway_vpc_attachments): <p>Information about the VPC attachments.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTransitGatewayVpcAttachmentsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTransitGatewayVpcAttachmentsError>`](crate::error::DescribeTransitGatewayVpcAttachmentsError)
    pub fn describe_transit_gateway_vpc_attachments(
        &self,
    ) -> fluent_builders::DescribeTransitGatewayVpcAttachments {
        fluent_builders::DescribeTransitGatewayVpcAttachments::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeTrunkInterfaceAssociations`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_ids(Vec<String>)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::association_ids) / [`set_association_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::set_association_ids): <p>The IDs of the associations.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>gre-key</code> - The ID of a trunk interface association.</p> </li>   <li> <p> <code>interface-protocol</code> - The interface protocol. Valid values are <code>VLAN</code> and <code>GRE</code>.</p> </li>  </ul>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeTrunkInterfaceAssociations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeTrunkInterfaceAssociationsOutput`](crate::output::DescribeTrunkInterfaceAssociationsOutput) with field(s):
    ///   - [`interface_associations(Option<Vec<TrunkInterfaceAssociation>>)`](crate::output::DescribeTrunkInterfaceAssociationsOutput::interface_associations): <p>Information about the trunk associations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeTrunkInterfaceAssociationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeTrunkInterfaceAssociationsError>`](crate::error::DescribeTrunkInterfaceAssociationsError)
    pub fn describe_trunk_interface_associations(
        &self,
    ) -> fluent_builders::DescribeTrunkInterfaceAssociations {
        fluent_builders::DescribeTrunkInterfaceAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVerifiedAccessEndpoints`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_endpoint_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::verified_access_endpoint_ids) / [`set_verified_access_endpoint_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::set_verified_access_endpoint_ids): <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`verified_access_group_id(impl Into<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::verified_access_group_id) / [`set_verified_access_group_id(Option<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::set_verified_access_group_id): <p>The ID of the Amazon Web Services Verified Access group.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVerifiedAccessEndpoints::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVerifiedAccessEndpointsOutput`](crate::output::DescribeVerifiedAccessEndpointsOutput) with field(s):
    ///   - [`verified_access_endpoints(Option<Vec<VerifiedAccessEndpoint>>)`](crate::output::DescribeVerifiedAccessEndpointsOutput::verified_access_endpoints): <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVerifiedAccessEndpointsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVerifiedAccessEndpointsError>`](crate::error::DescribeVerifiedAccessEndpointsError)
    pub fn describe_verified_access_endpoints(
        &self,
    ) -> fluent_builders::DescribeVerifiedAccessEndpoints {
        fluent_builders::DescribeVerifiedAccessEndpoints::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVerifiedAccessGroups`](crate::client::fluent_builders::DescribeVerifiedAccessGroups) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_group_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::verified_access_group_ids) / [`set_verified_access_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::set_verified_access_group_ids): <p>The ID of the Amazon Web Services Verified Access groups.</p>
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVerifiedAccessGroups::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVerifiedAccessGroupsOutput`](crate::output::DescribeVerifiedAccessGroupsOutput) with field(s):
    ///   - [`verified_access_groups(Option<Vec<VerifiedAccessGroup>>)`](crate::output::DescribeVerifiedAccessGroupsOutput::verified_access_groups): <p>The ID of the Verified Access group.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVerifiedAccessGroupsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVerifiedAccessGroupsError>`](crate::error::DescribeVerifiedAccessGroupsError)
    pub fn describe_verified_access_groups(&self) -> fluent_builders::DescribeVerifiedAccessGroups {
        fluent_builders::DescribeVerifiedAccessGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVerifiedAccessInstanceLoggingConfigurations`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_instance_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::verified_access_instance_ids) / [`set_verified_access_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::set_verified_access_instance_ids): <p>The IDs of the Amazon Web Services Verified Access instances.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVerifiedAccessInstanceLoggingConfigurationsOutput`](crate::output::DescribeVerifiedAccessInstanceLoggingConfigurationsOutput) with field(s):
    ///   - [`logging_configurations(Option<Vec<VerifiedAccessInstanceLoggingConfiguration>>)`](crate::output::DescribeVerifiedAccessInstanceLoggingConfigurationsOutput::logging_configurations): <p>The current logging configuration for the Amazon Web Services Verified Access instances.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVerifiedAccessInstanceLoggingConfigurationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVerifiedAccessInstanceLoggingConfigurationsError>`](crate::error::DescribeVerifiedAccessInstanceLoggingConfigurationsError)
    pub fn describe_verified_access_instance_logging_configurations(
        &self,
    ) -> fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations {
        fluent_builders::DescribeVerifiedAccessInstanceLoggingConfigurations::new(
            self.handle.clone(),
        )
    }
    /// Constructs a fluent builder for the [`DescribeVerifiedAccessInstances`](crate::client::fluent_builders::DescribeVerifiedAccessInstances) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_instance_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::verified_access_instance_ids) / [`set_verified_access_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::set_verified_access_instance_ids): <p>The IDs of the Amazon Web Services Verified Access instances.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVerifiedAccessInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVerifiedAccessInstancesOutput`](crate::output::DescribeVerifiedAccessInstancesOutput) with field(s):
    ///   - [`verified_access_instances(Option<Vec<VerifiedAccessInstance>>)`](crate::output::DescribeVerifiedAccessInstancesOutput::verified_access_instances): <p>The IDs of the Amazon Web Services Verified Access instances.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVerifiedAccessInstancesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVerifiedAccessInstancesError>`](crate::error::DescribeVerifiedAccessInstancesError)
    pub fn describe_verified_access_instances(
        &self,
    ) -> fluent_builders::DescribeVerifiedAccessInstances {
        fluent_builders::DescribeVerifiedAccessInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVerifiedAccessTrustProviders`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_trust_provider_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::verified_access_trust_provider_ids) / [`set_verified_access_trust_provider_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::set_verified_access_trust_provider_ids): <p>The IDs of the Amazon Web Services Verified Access trust providers.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::set_filters): <p>One or more filters. Filter names and values are case-sensitive.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVerifiedAccessTrustProviders::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVerifiedAccessTrustProvidersOutput`](crate::output::DescribeVerifiedAccessTrustProvidersOutput) with field(s):
    ///   - [`verified_access_trust_providers(Option<Vec<VerifiedAccessTrustProvider>>)`](crate::output::DescribeVerifiedAccessTrustProvidersOutput::verified_access_trust_providers): <p>The IDs of the Amazon Web Services Verified Access trust providers.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVerifiedAccessTrustProvidersOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVerifiedAccessTrustProvidersError>`](crate::error::DescribeVerifiedAccessTrustProvidersError)
    pub fn describe_verified_access_trust_providers(
        &self,
    ) -> fluent_builders::DescribeVerifiedAccessTrustProviders {
        fluent_builders::DescribeVerifiedAccessTrustProviders::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVolumeAttribute`](crate::client::fluent_builders::DescribeVolumeAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(VolumeAttributeName)`](crate::client::fluent_builders::DescribeVolumeAttribute::attribute) / [`set_attribute(Option<VolumeAttributeName>)`](crate::client::fluent_builders::DescribeVolumeAttribute::set_attribute): <p>The attribute of the volume. This parameter is required.</p>
    ///   - [`volume_id(impl Into<String>)`](crate::client::fluent_builders::DescribeVolumeAttribute::volume_id) / [`set_volume_id(Option<String>)`](crate::client::fluent_builders::DescribeVolumeAttribute::set_volume_id): <p>The ID of the volume.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVolumeAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVolumeAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVolumeAttributeOutput`](crate::output::DescribeVolumeAttributeOutput) with field(s):
    ///   - [`auto_enable_io(Option<AttributeBooleanValue>)`](crate::output::DescribeVolumeAttributeOutput::auto_enable_io): <p>The state of <code>autoEnableIO</code> attribute.</p>
    ///   - [`product_codes(Option<Vec<ProductCode>>)`](crate::output::DescribeVolumeAttributeOutput::product_codes): <p>A list of product codes.</p>
    ///   - [`volume_id(Option<String>)`](crate::output::DescribeVolumeAttributeOutput::volume_id): <p>The ID of the volume.</p>
    /// - On failure, responds with [`SdkError<DescribeVolumeAttributeError>`](crate::error::DescribeVolumeAttributeError)
    pub fn describe_volume_attribute(&self) -> fluent_builders::DescribeVolumeAttribute {
        fluent_builders::DescribeVolumeAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVolumes`](crate::client::fluent_builders::DescribeVolumes) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVolumes::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVolumes::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVolumes::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>attachment.attach-time</code> - The time stamp when the attachment initiated.</p> </li>   <li> <p> <code>attachment.delete-on-termination</code> - Whether the volume is deleted on instance termination.</p> </li>   <li> <p> <code>attachment.device</code> - The device name specified in the block device mapping (for example, <code>/dev/sda1</code>).</p> </li>   <li> <p> <code>attachment.instance-id</code> - The ID of the instance the volume is attached to.</p> </li>   <li> <p> <code>attachment.status</code> - The attachment state (<code>attaching</code> | <code>attached</code> | <code>detaching</code>).</p> </li>   <li> <p> <code>availability-zone</code> - The Availability Zone in which the volume was created.</p> </li>   <li> <p> <code>create-time</code> - The time stamp when the volume was created.</p> </li>   <li> <p> <code>encrypted</code> - Indicates whether the volume is encrypted (<code>true</code> | <code>false</code>)</p> </li>   <li> <p> <code>multi-attach-enabled</code> - Indicates whether the volume is enabled for Multi-Attach (<code>true</code> | <code>false</code>)</p> </li>   <li> <p> <code>fast-restored</code> - Indicates whether the volume was created from a snapshot that is enabled for fast snapshot restore (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>size</code> - The size of the volume, in GiB.</p> </li>   <li> <p> <code>snapshot-id</code> - The snapshot from which the volume was created.</p> </li>   <li> <p> <code>status</code> - The state of the volume (<code>creating</code> | <code>available</code> | <code>in-use</code> | <code>deleting</code> | <code>deleted</code> | <code>error</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>volume-id</code> - The volume ID.</p> </li>   <li> <p> <code>volume-type</code> - The Amazon EBS volume type (<code>gp2</code> | <code>gp3</code> | <code>io1</code> | <code>io2</code> | <code>st1</code> | <code>sc1</code>| <code>standard</code>)</p> </li>  </ul>
    ///   - [`volume_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVolumes::volume_ids) / [`set_volume_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVolumes::set_volume_ids): <p>The volume IDs.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVolumes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVolumes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVolumes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVolumes::set_max_results): <p>The maximum number of volume results returned by <code>DescribeVolumes</code> in paginated output. When this parameter is used, <code>DescribeVolumes</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>DescribeVolumes</code> request with the returned <code>NextToken</code> value. This value can be between 5 and 500; if <code>MaxResults</code> is given a value larger than 500, only 500 results are returned. If this parameter is not used, then <code>DescribeVolumes</code> returns all results. You cannot specify this parameter and the volume IDs parameter in the same request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVolumes::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVolumes::set_next_token): <p>The <code>NextToken</code> value returned from a previous paginated <code>DescribeVolumes</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is <code>null</code> when there are no more results to return.</p>
    /// - On success, responds with [`DescribeVolumesOutput`](crate::output::DescribeVolumesOutput) with field(s):
    ///   - [`volumes(Option<Vec<Volume>>)`](crate::output::DescribeVolumesOutput::volumes): <p>Information about the volumes.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVolumesOutput::next_token): <p>The <code>NextToken</code> value to include in a future <code>DescribeVolumes</code> request. When the results of a <code>DescribeVolumes</code> request exceed <code>MaxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVolumesError>`](crate::error::DescribeVolumesError)
    pub fn describe_volumes(&self) -> fluent_builders::DescribeVolumes {
        fluent_builders::DescribeVolumes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVolumesModifications`](crate::client::fluent_builders::DescribeVolumesModifications) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVolumesModifications::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVolumesModifications::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVolumesModifications::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`volume_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVolumesModifications::volume_ids) / [`set_volume_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVolumesModifications::set_volume_ids): <p>The IDs of the volumes.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVolumesModifications::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVolumesModifications::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>modification-state</code> - The current modification state (modifying | optimizing | completed | failed).</p> </li>   <li> <p> <code>original-iops</code> - The original IOPS rate of the volume.</p> </li>   <li> <p> <code>original-size</code> - The original size of the volume, in GiB.</p> </li>   <li> <p> <code>original-volume-type</code> - The original volume type of the volume (standard | io1 | io2 | gp2 | sc1 | st1).</p> </li>   <li> <p> <code>originalMultiAttachEnabled</code> - Indicates whether Multi-Attach support was enabled (true | false).</p> </li>   <li> <p> <code>start-time</code> - The modification start time.</p> </li>   <li> <p> <code>target-iops</code> - The target IOPS rate of the volume.</p> </li>   <li> <p> <code>target-size</code> - The target size of the volume, in GiB.</p> </li>   <li> <p> <code>target-volume-type</code> - The target volume type of the volume (standard | io1 | io2 | gp2 | sc1 | st1).</p> </li>   <li> <p> <code>targetMultiAttachEnabled</code> - Indicates whether Multi-Attach support is to be enabled (true | false).</p> </li>   <li> <p> <code>volume-id</code> - The ID of the volume.</p> </li>  </ul>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVolumesModifications::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVolumesModifications::set_next_token): <p>The <code>nextToken</code> value returned by a previous paginated request.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVolumesModifications::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVolumesModifications::set_max_results): <p>The maximum number of results (up to a limit of 500) to be returned in a paginated request.</p>
    /// - On success, responds with [`DescribeVolumesModificationsOutput`](crate::output::DescribeVolumesModificationsOutput) with field(s):
    ///   - [`volumes_modifications(Option<Vec<VolumeModification>>)`](crate::output::DescribeVolumesModificationsOutput::volumes_modifications): <p>Information about the volume modifications.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVolumesModificationsOutput::next_token): <p>Token for pagination, null if there are no more results </p>
    /// - On failure, responds with [`SdkError<DescribeVolumesModificationsError>`](crate::error::DescribeVolumesModificationsError)
    pub fn describe_volumes_modifications(&self) -> fluent_builders::DescribeVolumesModifications {
        fluent_builders::DescribeVolumesModifications::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVolumeStatus`](crate::client::fluent_builders::DescribeVolumeStatus) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVolumeStatus::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVolumeStatus::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVolumeStatus::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>action.code</code> - The action code for the event (for example, <code>enable-volume-io</code>).</p> </li>   <li> <p> <code>action.description</code> - A description of the action.</p> </li>   <li> <p> <code>action.event-id</code> - The event ID associated with the action.</p> </li>   <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>   <li> <p> <code>event.description</code> - A description of the event.</p> </li>   <li> <p> <code>event.event-id</code> - The event ID.</p> </li>   <li> <p> <code>event.event-type</code> - The event type (for <code>io-enabled</code>: <code>passed</code> | <code>failed</code>; for <code>io-performance</code>: <code>io-performance:degraded</code> | <code>io-performance:severely-degraded</code> | <code>io-performance:stalled</code>).</p> </li>   <li> <p> <code>event.not-after</code> - The latest end time for the event.</p> </li>   <li> <p> <code>event.not-before</code> - The earliest start time for the event.</p> </li>   <li> <p> <code>volume-status.details-name</code> - The cause for <code>volume-status.status</code> (<code>io-enabled</code> | <code>io-performance</code>).</p> </li>   <li> <p> <code>volume-status.details-status</code> - The status of <code>volume-status.details-name</code> (for <code>io-enabled</code>: <code>passed</code> | <code>failed</code>; for <code>io-performance</code>: <code>normal</code> | <code>degraded</code> | <code>severely-degraded</code> | <code>stalled</code>).</p> </li>   <li> <p> <code>volume-status.status</code> - The status of the volume (<code>ok</code> | <code>impaired</code> | <code>warning</code> | <code>insufficient-data</code>).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVolumeStatus::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVolumeStatus::set_max_results): <p>The maximum number of volume results returned by <code>DescribeVolumeStatus</code> in paginated output. When this parameter is used, the request only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned. If this parameter is not used, then <code>DescribeVolumeStatus</code> returns all results. You cannot specify this parameter and the volume IDs parameter in the same request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVolumeStatus::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVolumeStatus::set_next_token): <p>The <code>NextToken</code> value to include in a future <code>DescribeVolumeStatus</code> request. When the results of the request exceed <code>MaxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`volume_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVolumeStatus::volume_ids) / [`set_volume_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVolumeStatus::set_volume_ids): <p>The IDs of the volumes.</p>  <p>Default: Describes all your volumes.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVolumeStatus::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVolumeStatus::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVolumeStatusOutput`](crate::output::DescribeVolumeStatusOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVolumeStatusOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`volume_statuses(Option<Vec<VolumeStatusItem>>)`](crate::output::DescribeVolumeStatusOutput::volume_statuses): <p>Information about the status of the volumes.</p>
    /// - On failure, responds with [`SdkError<DescribeVolumeStatusError>`](crate::error::DescribeVolumeStatusError)
    pub fn describe_volume_status(&self) -> fluent_builders::DescribeVolumeStatus {
        fluent_builders::DescribeVolumeStatus::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcAttribute`](crate::client::fluent_builders::DescribeVpcAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(VpcAttributeName)`](crate::client::fluent_builders::DescribeVpcAttribute::attribute) / [`set_attribute(Option<VpcAttributeName>)`](crate::client::fluent_builders::DescribeVpcAttribute::set_attribute): <p>The VPC attribute.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcAttribute::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::DescribeVpcAttribute::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVpcAttributeOutput`](crate::output::DescribeVpcAttributeOutput) with field(s):
    ///   - [`vpc_id(Option<String>)`](crate::output::DescribeVpcAttributeOutput::vpc_id): <p>The ID of the VPC.</p>
    ///   - [`enable_dns_hostnames(Option<AttributeBooleanValue>)`](crate::output::DescribeVpcAttributeOutput::enable_dns_hostnames): <p>Indicates whether the instances launched in the VPC get DNS hostnames. If this attribute is <code>true</code>, instances in the VPC get DNS hostnames; otherwise, they do not.</p>
    ///   - [`enable_dns_support(Option<AttributeBooleanValue>)`](crate::output::DescribeVpcAttributeOutput::enable_dns_support): <p>Indicates whether DNS resolution is enabled for the VPC. If this attribute is <code>true</code>, the Amazon DNS server resolves DNS hostnames for your instances to their corresponding IP addresses; otherwise, it does not.</p>
    ///   - [`enable_network_address_usage_metrics(Option<AttributeBooleanValue>)`](crate::output::DescribeVpcAttributeOutput::enable_network_address_usage_metrics): <p>Indicates whether Network Address Usage metrics are enabled for your VPC.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcAttributeError>`](crate::error::DescribeVpcAttributeError)
    pub fn describe_vpc_attribute(&self) -> fluent_builders::DescribeVpcAttribute {
        fluent_builders::DescribeVpcAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcClassicLink`](crate::client::fluent_builders::DescribeVpcClassicLink) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcClassicLink::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcClassicLink::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>is-classic-link-enabled</code> - Whether the VPC is enabled for ClassicLink (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcClassicLink::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcClassicLink::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVpcClassicLink::vpc_ids) / [`set_vpc_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpcClassicLink::set_vpc_ids): <p>One or more VPCs for which you want to describe the ClassicLink status.</p>
    /// - On success, responds with [`DescribeVpcClassicLinkOutput`](crate::output::DescribeVpcClassicLinkOutput) with field(s):
    ///   - [`vpcs(Option<Vec<VpcClassicLink>>)`](crate::output::DescribeVpcClassicLinkOutput::vpcs): <p>The ClassicLink status of one or more VPCs.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcClassicLinkError>`](crate::error::DescribeVpcClassicLinkError)
    pub fn describe_vpc_classic_link(&self) -> fluent_builders::DescribeVpcClassicLink {
        fluent_builders::DescribeVpcClassicLink::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcClassicLinkDnsSupport`](crate::client::fluent_builders::DescribeVpcClassicLinkDnsSupport) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVpcClassicLinkDnsSupport::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcClassicLinkDnsSupport::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcClassicLinkDnsSupport::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcClassicLinkDnsSupport::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcClassicLinkDnsSupport::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`vpc_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVpcClassicLinkDnsSupport::vpc_ids) / [`set_vpc_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpcClassicLinkDnsSupport::set_vpc_ids): <p>One or more VPC IDs.</p>
    /// - On success, responds with [`DescribeVpcClassicLinkDnsSupportOutput`](crate::output::DescribeVpcClassicLinkDnsSupportOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcClassicLinkDnsSupportOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`vpcs(Option<Vec<ClassicLinkDnsSupport>>)`](crate::output::DescribeVpcClassicLinkDnsSupportOutput::vpcs): <p>Information about the ClassicLink DNS support status of the VPCs.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcClassicLinkDnsSupportError>`](crate::error::DescribeVpcClassicLinkDnsSupportError)
    pub fn describe_vpc_classic_link_dns_support(
        &self,
    ) -> fluent_builders::DescribeVpcClassicLinkDnsSupport {
        fluent_builders::DescribeVpcClassicLinkDnsSupport::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcEndpointConnectionNotifications`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`connection_notification_id(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::connection_notification_id) / [`set_connection_notification_id(Option<String>)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::set_connection_notification_id): <p>The ID of the notification.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>connection-notification-arn</code> - The ARN of the SNS topic for the notification.</p> </li>   <li> <p> <code>connection-notification-id</code> - The ID of the notification.</p> </li>   <li> <p> <code>connection-notification-state</code> - The state of the notification (<code>Enabled</code> | <code>Disabled</code>).</p> </li>   <li> <p> <code>connection-notification-type</code> - The type of notification (<code>Topic</code>).</p> </li>   <li> <p> <code>service-id</code> - The ID of the endpoint service.</p> </li>   <li> <p> <code>vpc-endpoint-id</code> - The ID of the VPC endpoint.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::set_max_results): <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcEndpointConnectionNotifications::set_next_token): <p>The token to request the next page of results.</p>
    /// - On success, responds with [`DescribeVpcEndpointConnectionNotificationsOutput`](crate::output::DescribeVpcEndpointConnectionNotificationsOutput) with field(s):
    ///   - [`connection_notification_set(Option<Vec<ConnectionNotification>>)`](crate::output::DescribeVpcEndpointConnectionNotificationsOutput::connection_notification_set): <p>The notifications.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcEndpointConnectionNotificationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcEndpointConnectionNotificationsError>`](crate::error::DescribeVpcEndpointConnectionNotificationsError)
    pub fn describe_vpc_endpoint_connection_notifications(
        &self,
    ) -> fluent_builders::DescribeVpcEndpointConnectionNotifications {
        fluent_builders::DescribeVpcEndpointConnectionNotifications::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcEndpointConnections`](crate::client::fluent_builders::DescribeVpcEndpointConnections) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVpcEndpointConnections::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcEndpointConnections::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcEndpointConnections::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcEndpointConnections::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcEndpointConnections::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>ip-address-type</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>   <li> <p> <code>service-id</code> - The ID of the service.</p> </li>   <li> <p> <code>vpc-endpoint-owner</code> - The ID of the Amazon Web Services account ID that owns the endpoint.</p> </li>   <li> <p> <code>vpc-endpoint-state</code> - The state of the endpoint (<code>pendingAcceptance</code> | <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code> | <code>failed</code>).</p> </li>   <li> <p> <code>vpc-endpoint-id</code> - The ID of the endpoint.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcEndpointConnections::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcEndpointConnections::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcEndpointConnections::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcEndpointConnections::set_next_token): <p>The token to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeVpcEndpointConnectionsOutput`](crate::output::DescribeVpcEndpointConnectionsOutput) with field(s):
    ///   - [`vpc_endpoint_connections(Option<Vec<VpcEndpointConnection>>)`](crate::output::DescribeVpcEndpointConnectionsOutput::vpc_endpoint_connections): <p>Information about the VPC endpoint connections.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcEndpointConnectionsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcEndpointConnectionsError>`](crate::error::DescribeVpcEndpointConnectionsError)
    pub fn describe_vpc_endpoint_connections(
        &self,
    ) -> fluent_builders::DescribeVpcEndpointConnections {
        fluent_builders::DescribeVpcEndpointConnections::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcEndpoints`](crate::client::fluent_builders::DescribeVpcEndpoints) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVpcEndpoints::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcEndpoints::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcEndpoints::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_endpoint_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVpcEndpoints::vpc_endpoint_ids) / [`set_vpc_endpoint_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpcEndpoints::set_vpc_endpoint_ids): <p>The IDs of the VPC endpoints.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcEndpoints::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcEndpoints::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>ip-address-type</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>   <li> <p> <code>service-name</code> - The name of the service.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC in which the endpoint resides.</p> </li>   <li> <p> <code>vpc-endpoint-id</code> - The ID of the endpoint.</p> </li>   <li> <p> <code>vpc-endpoint-state</code> - The state of the endpoint (<code>pendingAcceptance</code> | <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code> | <code>failed</code>).</p> </li>   <li> <p> <code>vpc-endpoint-type</code> - The type of VPC endpoint (<code>Interface</code> | <code>Gateway</code> | <code>GatewayLoadBalancer</code>).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcEndpoints::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcEndpoints::set_max_results): <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>  <p>Constraint: If the value is greater than 1,000, we return only 1,000 items.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcEndpoints::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcEndpoints::set_next_token): <p>The token for the next set of items to return. (You received this token from a prior call.)</p>
    /// - On success, responds with [`DescribeVpcEndpointsOutput`](crate::output::DescribeVpcEndpointsOutput) with field(s):
    ///   - [`vpc_endpoints(Option<Vec<VpcEndpoint>>)`](crate::output::DescribeVpcEndpointsOutput::vpc_endpoints): <p>Information about the endpoints.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcEndpointsOutput::next_token): <p>The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcEndpointsError>`](crate::error::DescribeVpcEndpointsError)
    pub fn describe_vpc_endpoints(&self) -> fluent_builders::DescribeVpcEndpoints {
        fluent_builders::DescribeVpcEndpoints::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcEndpointServiceConfigurations`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::service_ids) / [`set_service_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::set_service_ids): <p>The IDs of the endpoint services.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>service-name</code> - The name of the service.</p> </li>   <li> <p> <code>service-id</code> - The ID of the service.</p> </li>   <li> <p> <code>service-state</code> - The state of the service (<code>Pending</code> | <code>Available</code> | <code>Deleting</code> | <code>Deleted</code> | <code>Failed</code>). </p> </li>   <li> <p> <code>supported-ip-address-types</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServiceConfigurations::set_next_token): <p>The token to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeVpcEndpointServiceConfigurationsOutput`](crate::output::DescribeVpcEndpointServiceConfigurationsOutput) with field(s):
    ///   - [`service_configurations(Option<Vec<ServiceConfiguration>>)`](crate::output::DescribeVpcEndpointServiceConfigurationsOutput::service_configurations): <p>Information about the services.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcEndpointServiceConfigurationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcEndpointServiceConfigurationsError>`](crate::error::DescribeVpcEndpointServiceConfigurationsError)
    pub fn describe_vpc_endpoint_service_configurations(
        &self,
    ) -> fluent_builders::DescribeVpcEndpointServiceConfigurations {
        fluent_builders::DescribeVpcEndpointServiceConfigurations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcEndpointServicePermissions`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_id(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::service_id) / [`set_service_id(Option<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::set_service_id): <p>The ID of the service.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>principal</code> - The ARN of the principal.</p> </li>   <li> <p> <code>principal-type</code> - The principal type (<code>All</code> | <code>Service</code> | <code>OrganizationUnit</code> | <code>Account</code> | <code>User</code> | <code>Role</code>).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServicePermissions::set_next_token): <p>The token to retrieve the next page of results.</p>
    /// - On success, responds with [`DescribeVpcEndpointServicePermissionsOutput`](crate::output::DescribeVpcEndpointServicePermissionsOutput) with field(s):
    ///   - [`allowed_principals(Option<Vec<AllowedPrincipal>>)`](crate::output::DescribeVpcEndpointServicePermissionsOutput::allowed_principals): <p>Information about the allowed principals.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcEndpointServicePermissionsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcEndpointServicePermissionsError>`](crate::error::DescribeVpcEndpointServicePermissionsError)
    pub fn describe_vpc_endpoint_service_permissions(
        &self,
    ) -> fluent_builders::DescribeVpcEndpointServicePermissions {
        fluent_builders::DescribeVpcEndpointServicePermissions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcEndpointServices`](crate::client::fluent_builders::DescribeVpcEndpointServices) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcEndpointServices::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcEndpointServices::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_names(Vec<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServices::service_names) / [`set_service_names(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpcEndpointServices::set_service_names): <p>The service names.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcEndpointServices::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcEndpointServices::set_filters): <p>The filters.</p>  <ul>   <li> <p> <code>owner</code> - The ID or alias of the Amazon Web Services account that owns the service.</p> </li>   <li> <p> <code>service-name</code> - The name of the service.</p> </li>   <li> <p> <code>service-type</code> - The type of service (<code>Interface</code> | <code>Gateway</code> | <code>GatewayLoadBalancer</code>).</p> </li>   <li> <p> <code>supported-ip-address-types</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcEndpointServices::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcEndpointServices::set_max_results): <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>  <p>Constraint: If the value is greater than 1,000, we return only 1,000 items.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServices::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcEndpointServices::set_next_token): <p>The token for the next set of items to return. (You received this token from a prior call.)</p>
    /// - On success, responds with [`DescribeVpcEndpointServicesOutput`](crate::output::DescribeVpcEndpointServicesOutput) with field(s):
    ///   - [`service_names(Option<Vec<String>>)`](crate::output::DescribeVpcEndpointServicesOutput::service_names): <p>The supported services.</p>
    ///   - [`service_details(Option<Vec<ServiceDetail>>)`](crate::output::DescribeVpcEndpointServicesOutput::service_details): <p>Information about the service.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcEndpointServicesOutput::next_token): <p>The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcEndpointServicesError>`](crate::error::DescribeVpcEndpointServicesError)
    pub fn describe_vpc_endpoint_services(&self) -> fluent_builders::DescribeVpcEndpointServices {
        fluent_builders::DescribeVpcEndpointServices::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcPeeringConnections`](crate::client::fluent_builders::DescribeVpcPeeringConnections) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVpcPeeringConnections::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>accepter-vpc-info.cidr-block</code> - The IPv4 CIDR block of the accepter VPC.</p> </li>   <li> <p> <code>accepter-vpc-info.owner-id</code> - The ID of the Amazon Web Services account that owns the accepter VPC.</p> </li>   <li> <p> <code>accepter-vpc-info.vpc-id</code> - The ID of the accepter VPC.</p> </li>   <li> <p> <code>expiration-time</code> - The expiration date and time for the VPC peering connection.</p> </li>   <li> <p> <code>requester-vpc-info.cidr-block</code> - The IPv4 CIDR block of the requester's VPC.</p> </li>   <li> <p> <code>requester-vpc-info.owner-id</code> - The ID of the Amazon Web Services account that owns the requester VPC.</p> </li>   <li> <p> <code>requester-vpc-info.vpc-id</code> - The ID of the requester VPC.</p> </li>   <li> <p> <code>status-code</code> - The status of the VPC peering connection (<code>pending-acceptance</code> | <code>failed</code> | <code>expired</code> | <code>provisioning</code> | <code>active</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code>).</p> </li>   <li> <p> <code>status-message</code> - A message that provides more information about the status of the VPC peering connection, if applicable.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-peering-connection-id</code> - The ID of the VPC peering connection.</p> </li>  </ul>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_peering_connection_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::vpc_peering_connection_ids) / [`set_vpc_peering_connection_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::set_vpc_peering_connection_ids): <p>One or more VPC peering connection IDs.</p>  <p>Default: Describes all your VPC peering connections.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcPeeringConnections::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeVpcPeeringConnectionsOutput`](crate::output::DescribeVpcPeeringConnectionsOutput) with field(s):
    ///   - [`vpc_peering_connections(Option<Vec<VpcPeeringConnection>>)`](crate::output::DescribeVpcPeeringConnectionsOutput::vpc_peering_connections): <p>Information about the VPC peering connections.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcPeeringConnectionsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcPeeringConnectionsError>`](crate::error::DescribeVpcPeeringConnectionsError)
    pub fn describe_vpc_peering_connections(
        &self,
    ) -> fluent_builders::DescribeVpcPeeringConnections {
        fluent_builders::DescribeVpcPeeringConnections::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpcs`](crate::client::fluent_builders::DescribeVpcs) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::DescribeVpcs::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpcs::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpcs::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>cidr</code> - The primary IPv4 CIDR block of the VPC. The CIDR block you specify must exactly match the VPC's CIDR block for information to be returned for the VPC. Must contain the slash followed by one or two digits (for example, <code>/28</code>).</p> </li>   <li> <p> <code>cidr-block-association.cidr-block</code> - An IPv4 CIDR block associated with the VPC.</p> </li>   <li> <p> <code>cidr-block-association.association-id</code> - The association ID for an IPv4 CIDR block associated with the VPC.</p> </li>   <li> <p> <code>cidr-block-association.state</code> - The state of an IPv4 CIDR block associated with the VPC.</p> </li>   <li> <p> <code>dhcp-options-id</code> - The ID of a set of DHCP options.</p> </li>   <li> <p> <code>ipv6-cidr-block-association.ipv6-cidr-block</code> - An IPv6 CIDR block associated with the VPC.</p> </li>   <li> <p> <code>ipv6-cidr-block-association.ipv6-pool</code> - The ID of the IPv6 address pool from which the IPv6 CIDR block is allocated.</p> </li>   <li> <p> <code>ipv6-cidr-block-association.association-id</code> - The association ID for an IPv6 CIDR block associated with the VPC.</p> </li>   <li> <p> <code>ipv6-cidr-block-association.state</code> - The state of an IPv6 CIDR block associated with the VPC.</p> </li>   <li> <p> <code>is-default</code> - Indicates whether the VPC is the default VPC.</p> </li>   <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the VPC.</p> </li>   <li> <p> <code>state</code> - The state of the VPC (<code>pending</code> | <code>available</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>  </ul>
    ///   - [`vpc_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVpcs::vpc_ids) / [`set_vpc_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpcs::set_vpc_ids): <p>One or more VPC IDs.</p>  <p>Default: Describes all your VPCs.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpcs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpcs::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::DescribeVpcs::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::DescribeVpcs::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::DescribeVpcs::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::DescribeVpcs::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`DescribeVpcsOutput`](crate::output::DescribeVpcsOutput) with field(s):
    ///   - [`vpcs(Option<Vec<Vpc>>)`](crate::output::DescribeVpcsOutput::vpcs): <p>Information about one or more VPCs.</p>
    ///   - [`next_token(Option<String>)`](crate::output::DescribeVpcsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<DescribeVpcsError>`](crate::error::DescribeVpcsError)
    pub fn describe_vpcs(&self) -> fluent_builders::DescribeVpcs {
        fluent_builders::DescribeVpcs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpnConnections`](crate::client::fluent_builders::DescribeVpnConnections) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpnConnections::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpnConnections::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>customer-gateway-configuration</code> - The configuration information for the customer gateway.</p> </li>   <li> <p> <code>customer-gateway-id</code> - The ID of a customer gateway associated with the VPN connection.</p> </li>   <li> <p> <code>state</code> - The state of the VPN connection (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>   <li> <p> <code>option.static-routes-only</code> - Indicates whether the connection has static routes only. Used for devices that do not support Border Gateway Protocol (BGP).</p> </li>   <li> <p> <code>route.destination-cidr-block</code> - The destination CIDR block. This corresponds to the subnet used in a customer data center.</p> </li>   <li> <p> <code>bgp-asn</code> - The BGP Autonomous System Number (ASN) associated with a BGP device.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>type</code> - The type of VPN connection. Currently the only supported type is <code>ipsec.1</code>.</p> </li>   <li> <p> <code>vpn-connection-id</code> - The ID of the VPN connection.</p> </li>   <li> <p> <code>vpn-gateway-id</code> - The ID of a virtual private gateway associated with the VPN connection.</p> </li>   <li> <p> <code>transit-gateway-id</code> - The ID of a transit gateway associated with the VPN connection.</p> </li>  </ul>
    ///   - [`vpn_connection_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVpnConnections::vpn_connection_ids) / [`set_vpn_connection_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpnConnections::set_vpn_connection_ids): <p>One or more VPN connection IDs.</p>  <p>Default: Describes your VPN connections.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpnConnections::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpnConnections::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVpnConnectionsOutput`](crate::output::DescribeVpnConnectionsOutput) with field(s):
    ///   - [`vpn_connections(Option<Vec<VpnConnection>>)`](crate::output::DescribeVpnConnectionsOutput::vpn_connections): <p>Information about one or more VPN connections.</p>
    /// - On failure, responds with [`SdkError<DescribeVpnConnectionsError>`](crate::error::DescribeVpnConnectionsError)
    pub fn describe_vpn_connections(&self) -> fluent_builders::DescribeVpnConnections {
        fluent_builders::DescribeVpnConnections::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DescribeVpnGateways`](crate::client::fluent_builders::DescribeVpnGateways) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::DescribeVpnGateways::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::DescribeVpnGateways::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>amazon-side-asn</code> - The Autonomous System Number (ASN) for the Amazon side of the gateway.</p> </li>   <li> <p> <code>attachment.state</code> - The current state of the attachment between the gateway and the VPC (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>   <li> <p> <code>attachment.vpc-id</code> - The ID of an attached VPC.</p> </li>   <li> <p> <code>availability-zone</code> - The Availability Zone for the virtual private gateway (if applicable).</p> </li>   <li> <p> <code>state</code> - The state of the virtual private gateway (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>   <li> <p> <code>type</code> - The type of virtual private gateway. Currently the only supported type is <code>ipsec.1</code>.</p> </li>   <li> <p> <code>vpn-gateway-id</code> - The ID of the virtual private gateway.</p> </li>  </ul>
    ///   - [`vpn_gateway_ids(Vec<String>)`](crate::client::fluent_builders::DescribeVpnGateways::vpn_gateway_ids) / [`set_vpn_gateway_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DescribeVpnGateways::set_vpn_gateway_ids): <p>One or more virtual private gateway IDs.</p>  <p>Default: Describes all your virtual private gateways.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DescribeVpnGateways::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DescribeVpnGateways::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DescribeVpnGatewaysOutput`](crate::output::DescribeVpnGatewaysOutput) with field(s):
    ///   - [`vpn_gateways(Option<Vec<VpnGateway>>)`](crate::output::DescribeVpnGatewaysOutput::vpn_gateways): <p>Information about one or more virtual private gateways.</p>
    /// - On failure, responds with [`SdkError<DescribeVpnGatewaysError>`](crate::error::DescribeVpnGatewaysError)
    pub fn describe_vpn_gateways(&self) -> fluent_builders::DescribeVpnGateways {
        fluent_builders::DescribeVpnGateways::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DetachClassicLinkVpc`](crate::client::fluent_builders::DetachClassicLinkVpc) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DetachClassicLinkVpc::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DetachClassicLinkVpc::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::DetachClassicLinkVpc::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::DetachClassicLinkVpc::set_instance_id): <p>The ID of the instance to unlink from the VPC.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::DetachClassicLinkVpc::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::DetachClassicLinkVpc::set_vpc_id): <p>The ID of the VPC to which the instance is linked.</p>
    /// - On success, responds with [`DetachClassicLinkVpcOutput`](crate::output::DetachClassicLinkVpcOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DetachClassicLinkVpcOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<DetachClassicLinkVpcError>`](crate::error::DetachClassicLinkVpcError)
    pub fn detach_classic_link_vpc(&self) -> fluent_builders::DetachClassicLinkVpc {
        fluent_builders::DetachClassicLinkVpc::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DetachInternetGateway`](crate::client::fluent_builders::DetachInternetGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DetachInternetGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DetachInternetGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`internet_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DetachInternetGateway::internet_gateway_id) / [`set_internet_gateway_id(Option<String>)`](crate::client::fluent_builders::DetachInternetGateway::set_internet_gateway_id): <p>The ID of the internet gateway.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::DetachInternetGateway::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::DetachInternetGateway::set_vpc_id): <p>The ID of the VPC.</p>
    /// - On success, responds with [`DetachInternetGatewayOutput`](crate::output::DetachInternetGatewayOutput)

    /// - On failure, responds with [`SdkError<DetachInternetGatewayError>`](crate::error::DetachInternetGatewayError)
    pub fn detach_internet_gateway(&self) -> fluent_builders::DetachInternetGateway {
        fluent_builders::DetachInternetGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DetachNetworkInterface`](crate::client::fluent_builders::DetachNetworkInterface) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attachment_id(impl Into<String>)`](crate::client::fluent_builders::DetachNetworkInterface::attachment_id) / [`set_attachment_id(Option<String>)`](crate::client::fluent_builders::DetachNetworkInterface::set_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DetachNetworkInterface::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DetachNetworkInterface::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`force(bool)`](crate::client::fluent_builders::DetachNetworkInterface::force) / [`set_force(Option<bool>)`](crate::client::fluent_builders::DetachNetworkInterface::set_force): <p>Specifies whether to force a detachment.</p> <note>   <ul>    <li> <p>Use the <code>Force</code> parameter only as a last resort to detach a network interface from a failed instance. </p> </li>    <li> <p>If you use the <code>Force</code> parameter to detach a network interface, you might not be able to attach a different network interface to the same index on the instance without first stopping and starting the instance.</p> </li>    <li> <p>If you force the detachment of a network interface, the <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">instance metadata</a> might not get updated. This means that the attributes associated with the detached network interface might still be visible. The instance metadata will get updated when you stop and start the instance.</p> </li>   </ul>  </note>
    /// - On success, responds with [`DetachNetworkInterfaceOutput`](crate::output::DetachNetworkInterfaceOutput)

    /// - On failure, responds with [`SdkError<DetachNetworkInterfaceError>`](crate::error::DetachNetworkInterfaceError)
    pub fn detach_network_interface(&self) -> fluent_builders::DetachNetworkInterface {
        fluent_builders::DetachNetworkInterface::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DetachVerifiedAccessTrustProvider`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`verified_access_trust_provider_id(impl Into<String>)`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider::verified_access_trust_provider_id) / [`set_verified_access_trust_provider_id(Option<String>)`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider::set_verified_access_trust_provider_id): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DetachVerifiedAccessTrustProvider::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DetachVerifiedAccessTrustProviderOutput`](crate::output::DetachVerifiedAccessTrustProviderOutput) with field(s):
    ///   - [`verified_access_trust_provider(Option<VerifiedAccessTrustProvider>)`](crate::output::DetachVerifiedAccessTrustProviderOutput::verified_access_trust_provider): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`verified_access_instance(Option<VerifiedAccessInstance>)`](crate::output::DetachVerifiedAccessTrustProviderOutput::verified_access_instance): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    /// - On failure, responds with [`SdkError<DetachVerifiedAccessTrustProviderError>`](crate::error::DetachVerifiedAccessTrustProviderError)
    pub fn detach_verified_access_trust_provider(
        &self,
    ) -> fluent_builders::DetachVerifiedAccessTrustProvider {
        fluent_builders::DetachVerifiedAccessTrustProvider::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DetachVolume`](crate::client::fluent_builders::DetachVolume) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`device(impl Into<String>)`](crate::client::fluent_builders::DetachVolume::device) / [`set_device(Option<String>)`](crate::client::fluent_builders::DetachVolume::set_device): <p>The device name.</p>
    ///   - [`force(bool)`](crate::client::fluent_builders::DetachVolume::force) / [`set_force(Option<bool>)`](crate::client::fluent_builders::DetachVolume::set_force): <p>Forces detachment if the previous detachment attempt did not occur cleanly (for example, logging into an instance, unmounting the volume, and detaching normally). This option can lead to data loss or a corrupted file system. Use this option only as a last resort to detach a volume from a failed instance. The instance won't have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::DetachVolume::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::DetachVolume::set_instance_id): <p>The ID of the instance. If you are detaching a Multi-Attach enabled volume, you must specify an instance ID.</p>
    ///   - [`volume_id(impl Into<String>)`](crate::client::fluent_builders::DetachVolume::volume_id) / [`set_volume_id(Option<String>)`](crate::client::fluent_builders::DetachVolume::set_volume_id): <p>The ID of the volume.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DetachVolume::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DetachVolume::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DetachVolumeOutput`](crate::output::DetachVolumeOutput) with field(s):
    ///   - [`attach_time(Option<DateTime>)`](crate::output::DetachVolumeOutput::attach_time): <p>The time stamp when the attachment initiated.</p>
    ///   - [`device(Option<String>)`](crate::output::DetachVolumeOutput::device): <p>The device name.</p>
    ///   - [`instance_id(Option<String>)`](crate::output::DetachVolumeOutput::instance_id): <p>The ID of the instance.</p>
    ///   - [`state(Option<VolumeAttachmentState>)`](crate::output::DetachVolumeOutput::state): <p>The attachment state of the volume.</p>
    ///   - [`volume_id(Option<String>)`](crate::output::DetachVolumeOutput::volume_id): <p>The ID of the volume.</p>
    ///   - [`delete_on_termination(Option<bool>)`](crate::output::DetachVolumeOutput::delete_on_termination): <p>Indicates whether the EBS volume is deleted on instance termination.</p>
    /// - On failure, responds with [`SdkError<DetachVolumeError>`](crate::error::DetachVolumeError)
    pub fn detach_volume(&self) -> fluent_builders::DetachVolume {
        fluent_builders::DetachVolume::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DetachVpnGateway`](crate::client::fluent_builders::DetachVpnGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::DetachVpnGateway::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::DetachVpnGateway::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`vpn_gateway_id(impl Into<String>)`](crate::client::fluent_builders::DetachVpnGateway::vpn_gateway_id) / [`set_vpn_gateway_id(Option<String>)`](crate::client::fluent_builders::DetachVpnGateway::set_vpn_gateway_id): <p>The ID of the virtual private gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DetachVpnGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DetachVpnGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DetachVpnGatewayOutput`](crate::output::DetachVpnGatewayOutput)

    /// - On failure, responds with [`SdkError<DetachVpnGatewayError>`](crate::error::DetachVpnGatewayError)
    pub fn detach_vpn_gateway(&self) -> fluent_builders::DetachVpnGateway {
        fluent_builders::DetachVpnGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableAddressTransfer`](crate::client::fluent_builders::DisableAddressTransfer) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_id(impl Into<String>)`](crate::client::fluent_builders::DisableAddressTransfer::allocation_id) / [`set_allocation_id(Option<String>)`](crate::client::fluent_builders::DisableAddressTransfer::set_allocation_id): <p>The allocation ID of an Elastic IP address.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableAddressTransfer::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableAddressTransfer::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisableAddressTransferOutput`](crate::output::DisableAddressTransferOutput) with field(s):
    ///   - [`address_transfer(Option<AddressTransfer>)`](crate::output::DisableAddressTransferOutput::address_transfer): <p>An Elastic IP address transfer.</p>
    /// - On failure, responds with [`SdkError<DisableAddressTransferError>`](crate::error::DisableAddressTransferError)
    pub fn disable_address_transfer(&self) -> fluent_builders::DisableAddressTransfer {
        fluent_builders::DisableAddressTransfer::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableAwsNetworkPerformanceMetricSubscription`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`source(impl Into<String>)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::source) / [`set_source(Option<String>)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::set_source): <p>The source Region or Availability Zone that the metric subscription is disabled for. For example, <code>us-east-1</code>.</p>
    ///   - [`destination(impl Into<String>)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::destination) / [`set_destination(Option<String>)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::set_destination): <p>The target Region or Availability Zone that the metric subscription is disabled for. For example, <code>eu-north-1</code>.</p>
    ///   - [`metric(MetricType)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::metric) / [`set_metric(Option<MetricType>)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::set_metric): <p>The metric used for the disabled subscription.</p>
    ///   - [`statistic(StatisticType)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::statistic) / [`set_statistic(Option<StatisticType>)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::set_statistic): <p>The statistic used for the disabled subscription. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisableAwsNetworkPerformanceMetricSubscriptionOutput`](crate::output::DisableAwsNetworkPerformanceMetricSubscriptionOutput) with field(s):
    ///   - [`output(Option<bool>)`](crate::output::DisableAwsNetworkPerformanceMetricSubscriptionOutput::output): <p>Indicates whether the unsubscribe action was successful.</p>
    /// - On failure, responds with [`SdkError<DisableAwsNetworkPerformanceMetricSubscriptionError>`](crate::error::DisableAwsNetworkPerformanceMetricSubscriptionError)
    pub fn disable_aws_network_performance_metric_subscription(
        &self,
    ) -> fluent_builders::DisableAwsNetworkPerformanceMetricSubscription {
        fluent_builders::DisableAwsNetworkPerformanceMetricSubscription::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableEbsEncryptionByDefault`](crate::client::fluent_builders::DisableEbsEncryptionByDefault) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableEbsEncryptionByDefault::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableEbsEncryptionByDefault::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisableEbsEncryptionByDefaultOutput`](crate::output::DisableEbsEncryptionByDefaultOutput) with field(s):
    ///   - [`ebs_encryption_by_default(Option<bool>)`](crate::output::DisableEbsEncryptionByDefaultOutput::ebs_encryption_by_default): <p>The updated status of encryption by default.</p>
    /// - On failure, responds with [`SdkError<DisableEbsEncryptionByDefaultError>`](crate::error::DisableEbsEncryptionByDefaultError)
    pub fn disable_ebs_encryption_by_default(
        &self,
    ) -> fluent_builders::DisableEbsEncryptionByDefault {
        fluent_builders::DisableEbsEncryptionByDefault::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableFastLaunch`](crate::client::fluent_builders::DisableFastLaunch) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::DisableFastLaunch::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::DisableFastLaunch::set_image_id): <p>The ID of the image for which you’re turning off faster launching, and removing pre-provisioned snapshots.</p>
    ///   - [`force(bool)`](crate::client::fluent_builders::DisableFastLaunch::force) / [`set_force(Option<bool>)`](crate::client::fluent_builders::DisableFastLaunch::set_force): <p>Forces the image settings to turn off faster launching for your Windows AMI. This parameter overrides any errors that are encountered while cleaning up resources in your account.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableFastLaunch::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableFastLaunch::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisableFastLaunchOutput`](crate::output::DisableFastLaunchOutput) with field(s):
    ///   - [`image_id(Option<String>)`](crate::output::DisableFastLaunchOutput::image_id): <p>The ID of the image for which faster-launching has been turned off.</p>
    ///   - [`resource_type(Option<FastLaunchResourceType>)`](crate::output::DisableFastLaunchOutput::resource_type): <p>The pre-provisioning resource type that must be cleaned after turning off faster launching for the Windows AMI. Supported values include: <code>snapshot</code>.</p>
    ///   - [`snapshot_configuration(Option<FastLaunchSnapshotConfigurationResponse>)`](crate::output::DisableFastLaunchOutput::snapshot_configuration): <p>Parameters that were used for faster launching for the Windows AMI before faster launching was turned off. This informs the clean-up process.</p>
    ///   - [`launch_template(Option<FastLaunchLaunchTemplateSpecificationResponse>)`](crate::output::DisableFastLaunchOutput::launch_template): <p>The launch template that was used to launch Windows instances from pre-provisioned snapshots.</p>
    ///   - [`max_parallel_launches(Option<i32>)`](crate::output::DisableFastLaunchOutput::max_parallel_launches): <p>The maximum number of parallel instances to launch for creating resources.</p>
    ///   - [`owner_id(Option<String>)`](crate::output::DisableFastLaunchOutput::owner_id): <p>The owner of the Windows AMI for which faster launching was turned off.</p>
    ///   - [`state(Option<FastLaunchStateCode>)`](crate::output::DisableFastLaunchOutput::state): <p>The current state of faster launching for the specified Windows AMI.</p>
    ///   - [`state_transition_reason(Option<String>)`](crate::output::DisableFastLaunchOutput::state_transition_reason): <p>The reason that the state changed for faster launching for the Windows AMI.</p>
    ///   - [`state_transition_time(Option<DateTime>)`](crate::output::DisableFastLaunchOutput::state_transition_time): <p>The time that the state changed for faster launching for the Windows AMI.</p>
    /// - On failure, responds with [`SdkError<DisableFastLaunchError>`](crate::error::DisableFastLaunchError)
    pub fn disable_fast_launch(&self) -> fluent_builders::DisableFastLaunch {
        fluent_builders::DisableFastLaunch::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableFastSnapshotRestores`](crate::client::fluent_builders::DisableFastSnapshotRestores) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`availability_zones(Vec<String>)`](crate::client::fluent_builders::DisableFastSnapshotRestores::availability_zones) / [`set_availability_zones(Option<Vec<String>>)`](crate::client::fluent_builders::DisableFastSnapshotRestores::set_availability_zones): <p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p>
    ///   - [`source_snapshot_ids(Vec<String>)`](crate::client::fluent_builders::DisableFastSnapshotRestores::source_snapshot_ids) / [`set_source_snapshot_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DisableFastSnapshotRestores::set_source_snapshot_ids): <p>The IDs of one or more snapshots. For example, <code>snap-1234567890abcdef0</code>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableFastSnapshotRestores::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableFastSnapshotRestores::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisableFastSnapshotRestoresOutput`](crate::output::DisableFastSnapshotRestoresOutput) with field(s):
    ///   - [`successful(Option<Vec<DisableFastSnapshotRestoreSuccessItem>>)`](crate::output::DisableFastSnapshotRestoresOutput::successful): <p>Information about the snapshots for which fast snapshot restores were successfully disabled.</p>
    ///   - [`unsuccessful(Option<Vec<DisableFastSnapshotRestoreErrorItem>>)`](crate::output::DisableFastSnapshotRestoresOutput::unsuccessful): <p>Information about the snapshots for which fast snapshot restores could not be disabled.</p>
    /// - On failure, responds with [`SdkError<DisableFastSnapshotRestoresError>`](crate::error::DisableFastSnapshotRestoresError)
    pub fn disable_fast_snapshot_restores(&self) -> fluent_builders::DisableFastSnapshotRestores {
        fluent_builders::DisableFastSnapshotRestores::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableImageDeprecation`](crate::client::fluent_builders::DisableImageDeprecation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::DisableImageDeprecation::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::DisableImageDeprecation::set_image_id): <p>The ID of the AMI.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableImageDeprecation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableImageDeprecation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisableImageDeprecationOutput`](crate::output::DisableImageDeprecationOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DisableImageDeprecationOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<DisableImageDeprecationError>`](crate::error::DisableImageDeprecationError)
    pub fn disable_image_deprecation(&self) -> fluent_builders::DisableImageDeprecation {
        fluent_builders::DisableImageDeprecation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableIpamOrganizationAdminAccount`](crate::client::fluent_builders::DisableIpamOrganizationAdminAccount) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableIpamOrganizationAdminAccount::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableIpamOrganizationAdminAccount::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`delegated_admin_account_id(impl Into<String>)`](crate::client::fluent_builders::DisableIpamOrganizationAdminAccount::delegated_admin_account_id) / [`set_delegated_admin_account_id(Option<String>)`](crate::client::fluent_builders::DisableIpamOrganizationAdminAccount::set_delegated_admin_account_id): <p>The Organizations member account ID that you want to disable as IPAM account.</p>
    /// - On success, responds with [`DisableIpamOrganizationAdminAccountOutput`](crate::output::DisableIpamOrganizationAdminAccountOutput) with field(s):
    ///   - [`success(Option<bool>)`](crate::output::DisableIpamOrganizationAdminAccountOutput::success): <p>The result of disabling the IPAM account.</p>
    /// - On failure, responds with [`SdkError<DisableIpamOrganizationAdminAccountError>`](crate::error::DisableIpamOrganizationAdminAccountError)
    pub fn disable_ipam_organization_admin_account(
        &self,
    ) -> fluent_builders::DisableIpamOrganizationAdminAccount {
        fluent_builders::DisableIpamOrganizationAdminAccount::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableSerialConsoleAccess`](crate::client::fluent_builders::DisableSerialConsoleAccess) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableSerialConsoleAccess::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableSerialConsoleAccess::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisableSerialConsoleAccessOutput`](crate::output::DisableSerialConsoleAccessOutput) with field(s):
    ///   - [`serial_console_access_enabled(Option<bool>)`](crate::output::DisableSerialConsoleAccessOutput::serial_console_access_enabled): <p>If <code>true</code>, access to the EC2 serial console of all instances is enabled for your account. If <code>false</code>, access to the EC2 serial console of all instances is disabled for your account.</p>
    /// - On failure, responds with [`SdkError<DisableSerialConsoleAccessError>`](crate::error::DisableSerialConsoleAccessError)
    pub fn disable_serial_console_access(&self) -> fluent_builders::DisableSerialConsoleAccess {
        fluent_builders::DisableSerialConsoleAccess::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableTransitGatewayRouteTablePropagation`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation::set_transit_gateway_route_table_id): <p>The ID of the propagation route table.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`transit_gateway_route_table_announcement_id(impl Into<String>)`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation::transit_gateway_route_table_announcement_id) / [`set_transit_gateway_route_table_announcement_id(Option<String>)`](crate::client::fluent_builders::DisableTransitGatewayRouteTablePropagation::set_transit_gateway_route_table_announcement_id): <p>The ID of the route table announcement.</p>
    /// - On success, responds with [`DisableTransitGatewayRouteTablePropagationOutput`](crate::output::DisableTransitGatewayRouteTablePropagationOutput) with field(s):
    ///   - [`propagation(Option<TransitGatewayPropagation>)`](crate::output::DisableTransitGatewayRouteTablePropagationOutput::propagation): <p>Information about route propagation.</p>
    /// - On failure, responds with [`SdkError<DisableTransitGatewayRouteTablePropagationError>`](crate::error::DisableTransitGatewayRouteTablePropagationError)
    pub fn disable_transit_gateway_route_table_propagation(
        &self,
    ) -> fluent_builders::DisableTransitGatewayRouteTablePropagation {
        fluent_builders::DisableTransitGatewayRouteTablePropagation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableVgwRoutePropagation`](crate::client::fluent_builders::DisableVgwRoutePropagation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`gateway_id(impl Into<String>)`](crate::client::fluent_builders::DisableVgwRoutePropagation::gateway_id) / [`set_gateway_id(Option<String>)`](crate::client::fluent_builders::DisableVgwRoutePropagation::set_gateway_id): <p>The ID of the virtual private gateway.</p>
    ///   - [`route_table_id(impl Into<String>)`](crate::client::fluent_builders::DisableVgwRoutePropagation::route_table_id) / [`set_route_table_id(Option<String>)`](crate::client::fluent_builders::DisableVgwRoutePropagation::set_route_table_id): <p>The ID of the route table.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableVgwRoutePropagation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableVgwRoutePropagation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisableVgwRoutePropagationOutput`](crate::output::DisableVgwRoutePropagationOutput)

    /// - On failure, responds with [`SdkError<DisableVgwRoutePropagationError>`](crate::error::DisableVgwRoutePropagationError)
    pub fn disable_vgw_route_propagation(&self) -> fluent_builders::DisableVgwRoutePropagation {
        fluent_builders::DisableVgwRoutePropagation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableVpcClassicLink`](crate::client::fluent_builders::DisableVpcClassicLink) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisableVpcClassicLink::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisableVpcClassicLink::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::DisableVpcClassicLink::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::DisableVpcClassicLink::set_vpc_id): <p>The ID of the VPC.</p>
    /// - On success, responds with [`DisableVpcClassicLinkOutput`](crate::output::DisableVpcClassicLinkOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DisableVpcClassicLinkOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<DisableVpcClassicLinkError>`](crate::error::DisableVpcClassicLinkError)
    pub fn disable_vpc_classic_link(&self) -> fluent_builders::DisableVpcClassicLink {
        fluent_builders::DisableVpcClassicLink::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisableVpcClassicLinkDnsSupport`](crate::client::fluent_builders::DisableVpcClassicLinkDnsSupport) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::DisableVpcClassicLinkDnsSupport::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::DisableVpcClassicLinkDnsSupport::set_vpc_id): <p>The ID of the VPC.</p>
    /// - On success, responds with [`DisableVpcClassicLinkDnsSupportOutput`](crate::output::DisableVpcClassicLinkDnsSupportOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DisableVpcClassicLinkDnsSupportOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<DisableVpcClassicLinkDnsSupportError>`](crate::error::DisableVpcClassicLinkDnsSupportError)
    pub fn disable_vpc_classic_link_dns_support(
        &self,
    ) -> fluent_builders::DisableVpcClassicLinkDnsSupport {
        fluent_builders::DisableVpcClassicLinkDnsSupport::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateAddress`](crate::client::fluent_builders::DisassociateAddress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateAddress::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::DisassociateAddress::set_association_id): <p>[EC2-VPC] The association ID. Required for EC2-VPC.</p>
    ///   - [`public_ip(impl Into<String>)`](crate::client::fluent_builders::DisassociateAddress::public_ip) / [`set_public_ip(Option<String>)`](crate::client::fluent_builders::DisassociateAddress::set_public_ip): <p>[EC2-Classic] The Elastic IP address. Required for EC2-Classic.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateAddress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateAddress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisassociateAddressOutput`](crate::output::DisassociateAddressOutput)

    /// - On failure, responds with [`SdkError<DisassociateAddressError>`](crate::error::DisassociateAddressError)
    pub fn disassociate_address(&self) -> fluent_builders::DisassociateAddress {
        fluent_builders::DisassociateAddress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateClientVpnTargetNetwork`](crate::client::fluent_builders::DisassociateClientVpnTargetNetwork) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateClientVpnTargetNetwork::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::DisassociateClientVpnTargetNetwork::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint from which to disassociate the target network.</p>
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateClientVpnTargetNetwork::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::DisassociateClientVpnTargetNetwork::set_association_id): <p>The ID of the target network association.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateClientVpnTargetNetwork::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateClientVpnTargetNetwork::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisassociateClientVpnTargetNetworkOutput`](crate::output::DisassociateClientVpnTargetNetworkOutput) with field(s):
    ///   - [`association_id(Option<String>)`](crate::output::DisassociateClientVpnTargetNetworkOutput::association_id): <p>The ID of the target network association.</p>
    ///   - [`status(Option<AssociationStatus>)`](crate::output::DisassociateClientVpnTargetNetworkOutput::status): <p>The current state of the target network association.</p>
    /// - On failure, responds with [`SdkError<DisassociateClientVpnTargetNetworkError>`](crate::error::DisassociateClientVpnTargetNetworkError)
    pub fn disassociate_client_vpn_target_network(
        &self,
    ) -> fluent_builders::DisassociateClientVpnTargetNetwork {
        fluent_builders::DisassociateClientVpnTargetNetwork::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateEnclaveCertificateIamRole`](crate::client::fluent_builders::DisassociateEnclaveCertificateIamRole) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`certificate_arn(impl Into<String>)`](crate::client::fluent_builders::DisassociateEnclaveCertificateIamRole::certificate_arn) / [`set_certificate_arn(Option<String>)`](crate::client::fluent_builders::DisassociateEnclaveCertificateIamRole::set_certificate_arn): <p>The ARN of the ACM certificate from which to disassociate the IAM role.</p>
    ///   - [`role_arn(impl Into<String>)`](crate::client::fluent_builders::DisassociateEnclaveCertificateIamRole::role_arn) / [`set_role_arn(Option<String>)`](crate::client::fluent_builders::DisassociateEnclaveCertificateIamRole::set_role_arn): <p>The ARN of the IAM role to disassociate.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateEnclaveCertificateIamRole::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateEnclaveCertificateIamRole::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisassociateEnclaveCertificateIamRoleOutput`](crate::output::DisassociateEnclaveCertificateIamRoleOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DisassociateEnclaveCertificateIamRoleOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<DisassociateEnclaveCertificateIamRoleError>`](crate::error::DisassociateEnclaveCertificateIamRoleError)
    pub fn disassociate_enclave_certificate_iam_role(
        &self,
    ) -> fluent_builders::DisassociateEnclaveCertificateIamRole {
        fluent_builders::DisassociateEnclaveCertificateIamRole::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateIamInstanceProfile`](crate::client::fluent_builders::DisassociateIamInstanceProfile) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateIamInstanceProfile::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::DisassociateIamInstanceProfile::set_association_id): <p>The ID of the IAM instance profile association.</p>
    /// - On success, responds with [`DisassociateIamInstanceProfileOutput`](crate::output::DisassociateIamInstanceProfileOutput) with field(s):
    ///   - [`iam_instance_profile_association(Option<IamInstanceProfileAssociation>)`](crate::output::DisassociateIamInstanceProfileOutput::iam_instance_profile_association): <p>Information about the IAM instance profile association.</p>
    /// - On failure, responds with [`SdkError<DisassociateIamInstanceProfileError>`](crate::error::DisassociateIamInstanceProfileError)
    pub fn disassociate_iam_instance_profile(
        &self,
    ) -> fluent_builders::DisassociateIamInstanceProfile {
        fluent_builders::DisassociateIamInstanceProfile::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateInstanceEventWindow`](crate::client::fluent_builders::DisassociateInstanceEventWindow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateInstanceEventWindow::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateInstanceEventWindow::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_event_window_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateInstanceEventWindow::instance_event_window_id) / [`set_instance_event_window_id(Option<String>)`](crate::client::fluent_builders::DisassociateInstanceEventWindow::set_instance_event_window_id): <p>The ID of the event window.</p>
    ///   - [`association_target(InstanceEventWindowDisassociationRequest)`](crate::client::fluent_builders::DisassociateInstanceEventWindow::association_target) / [`set_association_target(Option<InstanceEventWindowDisassociationRequest>)`](crate::client::fluent_builders::DisassociateInstanceEventWindow::set_association_target): <p>One or more targets to disassociate from the specified event window.</p>
    /// - On success, responds with [`DisassociateInstanceEventWindowOutput`](crate::output::DisassociateInstanceEventWindowOutput) with field(s):
    ///   - [`instance_event_window(Option<InstanceEventWindow>)`](crate::output::DisassociateInstanceEventWindowOutput::instance_event_window): <p>Information about the event window.</p>
    /// - On failure, responds with [`SdkError<DisassociateInstanceEventWindowError>`](crate::error::DisassociateInstanceEventWindowError)
    pub fn disassociate_instance_event_window(
        &self,
    ) -> fluent_builders::DisassociateInstanceEventWindow {
        fluent_builders::DisassociateInstanceEventWindow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateRouteTable`](crate::client::fluent_builders::DisassociateRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateRouteTable::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::DisassociateRouteTable::set_association_id): <p>The association ID representing the current association between the route table and subnet or gateway.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisassociateRouteTableOutput`](crate::output::DisassociateRouteTableOutput)

    /// - On failure, responds with [`SdkError<DisassociateRouteTableError>`](crate::error::DisassociateRouteTableError)
    pub fn disassociate_route_table(&self) -> fluent_builders::DisassociateRouteTable {
        fluent_builders::DisassociateRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateSubnetCidrBlock`](crate::client::fluent_builders::DisassociateSubnetCidrBlock) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateSubnetCidrBlock::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::DisassociateSubnetCidrBlock::set_association_id): <p>The association ID for the CIDR block.</p>
    /// - On success, responds with [`DisassociateSubnetCidrBlockOutput`](crate::output::DisassociateSubnetCidrBlockOutput) with field(s):
    ///   - [`ipv6_cidr_block_association(Option<SubnetIpv6CidrBlockAssociation>)`](crate::output::DisassociateSubnetCidrBlockOutput::ipv6_cidr_block_association): <p>Information about the IPv6 CIDR block association.</p>
    ///   - [`subnet_id(Option<String>)`](crate::output::DisassociateSubnetCidrBlockOutput::subnet_id): <p>The ID of the subnet.</p>
    /// - On failure, responds with [`SdkError<DisassociateSubnetCidrBlockError>`](crate::error::DisassociateSubnetCidrBlockError)
    pub fn disassociate_subnet_cidr_block(&self) -> fluent_builders::DisassociateSubnetCidrBlock {
        fluent_builders::DisassociateSubnetCidrBlock::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateTransitGatewayMulticastDomain`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`subnet_ids(Vec<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain::subnet_ids) / [`set_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain::set_subnet_ids): <p>The IDs of the subnets;</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateTransitGatewayMulticastDomain::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisassociateTransitGatewayMulticastDomainOutput`](crate::output::DisassociateTransitGatewayMulticastDomainOutput) with field(s):
    ///   - [`associations(Option<TransitGatewayMulticastDomainAssociations>)`](crate::output::DisassociateTransitGatewayMulticastDomainOutput::associations): <p>Information about the association.</p>
    /// - On failure, responds with [`SdkError<DisassociateTransitGatewayMulticastDomainError>`](crate::error::DisassociateTransitGatewayMulticastDomainError)
    pub fn disassociate_transit_gateway_multicast_domain(
        &self,
    ) -> fluent_builders::DisassociateTransitGatewayMulticastDomain {
        fluent_builders::DisassociateTransitGatewayMulticastDomain::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateTransitGatewayPolicyTable`](crate::client::fluent_builders::DisassociateTransitGatewayPolicyTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_policy_table_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayPolicyTable::transit_gateway_policy_table_id) / [`set_transit_gateway_policy_table_id(Option<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayPolicyTable::set_transit_gateway_policy_table_id): <p>The ID of the disassociated policy table.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayPolicyTable::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayPolicyTable::set_transit_gateway_attachment_id): <p>The ID of the transit gateway attachment to disassociate from the policy table.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateTransitGatewayPolicyTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateTransitGatewayPolicyTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisassociateTransitGatewayPolicyTableOutput`](crate::output::DisassociateTransitGatewayPolicyTableOutput) with field(s):
    ///   - [`association(Option<TransitGatewayPolicyTableAssociation>)`](crate::output::DisassociateTransitGatewayPolicyTableOutput::association): <p>Returns details about the transit gateway policy table disassociation.</p>
    /// - On failure, responds with [`SdkError<DisassociateTransitGatewayPolicyTableError>`](crate::error::DisassociateTransitGatewayPolicyTableError)
    pub fn disassociate_transit_gateway_policy_table(
        &self,
    ) -> fluent_builders::DisassociateTransitGatewayPolicyTable {
        fluent_builders::DisassociateTransitGatewayPolicyTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateTransitGatewayRouteTable`](crate::client::fluent_builders::DisassociateTransitGatewayRouteTable) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayRouteTable::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayRouteTable::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayRouteTable::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::DisassociateTransitGatewayRouteTable::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateTransitGatewayRouteTable::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateTransitGatewayRouteTable::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisassociateTransitGatewayRouteTableOutput`](crate::output::DisassociateTransitGatewayRouteTableOutput) with field(s):
    ///   - [`association(Option<TransitGatewayAssociation>)`](crate::output::DisassociateTransitGatewayRouteTableOutput::association): <p>Information about the association.</p>
    /// - On failure, responds with [`SdkError<DisassociateTransitGatewayRouteTableError>`](crate::error::DisassociateTransitGatewayRouteTableError)
    pub fn disassociate_transit_gateway_route_table(
        &self,
    ) -> fluent_builders::DisassociateTransitGatewayRouteTable {
        fluent_builders::DisassociateTransitGatewayRouteTable::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateTrunkInterface`](crate::client::fluent_builders::DisassociateTrunkInterface) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateTrunkInterface::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::DisassociateTrunkInterface::set_association_id): <p>The ID of the association</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::DisassociateTrunkInterface::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::DisassociateTrunkInterface::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::DisassociateTrunkInterface::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::DisassociateTrunkInterface::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`DisassociateTrunkInterfaceOutput`](crate::output::DisassociateTrunkInterfaceOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::DisassociateTrunkInterfaceOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    ///   - [`client_token(Option<String>)`](crate::output::DisassociateTrunkInterfaceOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a>.</p>
    /// - On failure, responds with [`SdkError<DisassociateTrunkInterfaceError>`](crate::error::DisassociateTrunkInterfaceError)
    pub fn disassociate_trunk_interface(&self) -> fluent_builders::DisassociateTrunkInterface {
        fluent_builders::DisassociateTrunkInterface::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`DisassociateVpcCidrBlock`](crate::client::fluent_builders::DisassociateVpcCidrBlock) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::DisassociateVpcCidrBlock::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::DisassociateVpcCidrBlock::set_association_id): <p>The association ID for the CIDR block.</p>
    /// - On success, responds with [`DisassociateVpcCidrBlockOutput`](crate::output::DisassociateVpcCidrBlockOutput) with field(s):
    ///   - [`ipv6_cidr_block_association(Option<VpcIpv6CidrBlockAssociation>)`](crate::output::DisassociateVpcCidrBlockOutput::ipv6_cidr_block_association): <p>Information about the IPv6 CIDR block association.</p>
    ///   - [`cidr_block_association(Option<VpcCidrBlockAssociation>)`](crate::output::DisassociateVpcCidrBlockOutput::cidr_block_association): <p>Information about the IPv4 CIDR block association.</p>
    ///   - [`vpc_id(Option<String>)`](crate::output::DisassociateVpcCidrBlockOutput::vpc_id): <p>The ID of the VPC.</p>
    /// - On failure, responds with [`SdkError<DisassociateVpcCidrBlockError>`](crate::error::DisassociateVpcCidrBlockError)
    pub fn disassociate_vpc_cidr_block(&self) -> fluent_builders::DisassociateVpcCidrBlock {
        fluent_builders::DisassociateVpcCidrBlock::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableAddressTransfer`](crate::client::fluent_builders::EnableAddressTransfer) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_id(impl Into<String>)`](crate::client::fluent_builders::EnableAddressTransfer::allocation_id) / [`set_allocation_id(Option<String>)`](crate::client::fluent_builders::EnableAddressTransfer::set_allocation_id): <p>The allocation ID of an Elastic IP address.</p>
    ///   - [`transfer_account_id(impl Into<String>)`](crate::client::fluent_builders::EnableAddressTransfer::transfer_account_id) / [`set_transfer_account_id(Option<String>)`](crate::client::fluent_builders::EnableAddressTransfer::set_transfer_account_id): <p>The ID of the account that you want to transfer the Elastic IP address to.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableAddressTransfer::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableAddressTransfer::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableAddressTransferOutput`](crate::output::EnableAddressTransferOutput) with field(s):
    ///   - [`address_transfer(Option<AddressTransfer>)`](crate::output::EnableAddressTransferOutput::address_transfer): <p>An Elastic IP address transfer.</p>
    /// - On failure, responds with [`SdkError<EnableAddressTransferError>`](crate::error::EnableAddressTransferError)
    pub fn enable_address_transfer(&self) -> fluent_builders::EnableAddressTransfer {
        fluent_builders::EnableAddressTransfer::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableAwsNetworkPerformanceMetricSubscription`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`source(impl Into<String>)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::source) / [`set_source(Option<String>)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::set_source): <p>The source Region or Availability Zone that the metric subscription is enabled for. For example, <code>us-east-1</code>.</p>
    ///   - [`destination(impl Into<String>)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::destination) / [`set_destination(Option<String>)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::set_destination): <p>The target Region or Availability Zone that the metric subscription is enabled for. For example, <code>eu-west-1</code>.</p>
    ///   - [`metric(MetricType)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::metric) / [`set_metric(Option<MetricType>)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::set_metric): <p>The metric used for the enabled subscription.</p>
    ///   - [`statistic(StatisticType)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::statistic) / [`set_statistic(Option<StatisticType>)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::set_statistic): <p>The statistic used for the enabled subscription.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableAwsNetworkPerformanceMetricSubscriptionOutput`](crate::output::EnableAwsNetworkPerformanceMetricSubscriptionOutput) with field(s):
    ///   - [`output(Option<bool>)`](crate::output::EnableAwsNetworkPerformanceMetricSubscriptionOutput::output): <p>Indicates whether the subscribe action was successful.</p>
    /// - On failure, responds with [`SdkError<EnableAwsNetworkPerformanceMetricSubscriptionError>`](crate::error::EnableAwsNetworkPerformanceMetricSubscriptionError)
    pub fn enable_aws_network_performance_metric_subscription(
        &self,
    ) -> fluent_builders::EnableAwsNetworkPerformanceMetricSubscription {
        fluent_builders::EnableAwsNetworkPerformanceMetricSubscription::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableEbsEncryptionByDefault`](crate::client::fluent_builders::EnableEbsEncryptionByDefault) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableEbsEncryptionByDefault::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableEbsEncryptionByDefault::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableEbsEncryptionByDefaultOutput`](crate::output::EnableEbsEncryptionByDefaultOutput) with field(s):
    ///   - [`ebs_encryption_by_default(Option<bool>)`](crate::output::EnableEbsEncryptionByDefaultOutput::ebs_encryption_by_default): <p>The updated status of encryption by default.</p>
    /// - On failure, responds with [`SdkError<EnableEbsEncryptionByDefaultError>`](crate::error::EnableEbsEncryptionByDefaultError)
    pub fn enable_ebs_encryption_by_default(
        &self,
    ) -> fluent_builders::EnableEbsEncryptionByDefault {
        fluent_builders::EnableEbsEncryptionByDefault::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableFastLaunch`](crate::client::fluent_builders::EnableFastLaunch) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::EnableFastLaunch::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::EnableFastLaunch::set_image_id): <p>The ID of the image for which you’re enabling faster launching.</p>
    ///   - [`resource_type(impl Into<String>)`](crate::client::fluent_builders::EnableFastLaunch::resource_type) / [`set_resource_type(Option<String>)`](crate::client::fluent_builders::EnableFastLaunch::set_resource_type): <p>The type of resource to use for pre-provisioning the Windows AMI for faster launching. Supported values include: <code>snapshot</code>, which is the default value.</p>
    ///   - [`snapshot_configuration(FastLaunchSnapshotConfigurationRequest)`](crate::client::fluent_builders::EnableFastLaunch::snapshot_configuration) / [`set_snapshot_configuration(Option<FastLaunchSnapshotConfigurationRequest>)`](crate::client::fluent_builders::EnableFastLaunch::set_snapshot_configuration): <p>Configuration settings for creating and managing the snapshots that are used for pre-provisioning the Windows AMI for faster launching. The associated <code>ResourceType</code> must be <code>snapshot</code>.</p>
    ///   - [`launch_template(FastLaunchLaunchTemplateSpecificationRequest)`](crate::client::fluent_builders::EnableFastLaunch::launch_template) / [`set_launch_template(Option<FastLaunchLaunchTemplateSpecificationRequest>)`](crate::client::fluent_builders::EnableFastLaunch::set_launch_template): <p>The launch template to use when launching Windows instances from pre-provisioned snapshots. Launch template parameters can include either the name or ID of the launch template, but not both.</p>
    ///   - [`max_parallel_launches(i32)`](crate::client::fluent_builders::EnableFastLaunch::max_parallel_launches) / [`set_max_parallel_launches(Option<i32>)`](crate::client::fluent_builders::EnableFastLaunch::set_max_parallel_launches): <p>The maximum number of parallel instances to launch for creating resources. Value must be <code>6</code> or greater. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableFastLaunch::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableFastLaunch::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableFastLaunchOutput`](crate::output::EnableFastLaunchOutput) with field(s):
    ///   - [`image_id(Option<String>)`](crate::output::EnableFastLaunchOutput::image_id): <p>The image ID that identifies the Windows AMI for which faster launching was enabled.</p>
    ///   - [`resource_type(Option<FastLaunchResourceType>)`](crate::output::EnableFastLaunchOutput::resource_type): <p>The type of resource that was defined for pre-provisioning the Windows AMI for faster launching.</p>
    ///   - [`snapshot_configuration(Option<FastLaunchSnapshotConfigurationResponse>)`](crate::output::EnableFastLaunchOutput::snapshot_configuration): <p>The configuration settings that were defined for creating and managing the pre-provisioned snapshots for faster launching of the Windows AMI. This property is returned when the associated <code>resourceType</code> is <code>snapshot</code>.</p>
    ///   - [`launch_template(Option<FastLaunchLaunchTemplateSpecificationResponse>)`](crate::output::EnableFastLaunchOutput::launch_template): <p>The launch template that is used when launching Windows instances from pre-provisioned snapshots.</p>
    ///   - [`max_parallel_launches(Option<i32>)`](crate::output::EnableFastLaunchOutput::max_parallel_launches): <p>The maximum number of parallel instances to launch for creating resources.</p>
    ///   - [`owner_id(Option<String>)`](crate::output::EnableFastLaunchOutput::owner_id): <p>The owner ID for the Windows AMI for which faster launching was enabled.</p>
    ///   - [`state(Option<FastLaunchStateCode>)`](crate::output::EnableFastLaunchOutput::state): <p>The current state of faster launching for the specified Windows AMI.</p>
    ///   - [`state_transition_reason(Option<String>)`](crate::output::EnableFastLaunchOutput::state_transition_reason): <p>The reason that the state changed for faster launching for the Windows AMI.</p>
    ///   - [`state_transition_time(Option<DateTime>)`](crate::output::EnableFastLaunchOutput::state_transition_time): <p>The time that the state changed for faster launching for the Windows AMI.</p>
    /// - On failure, responds with [`SdkError<EnableFastLaunchError>`](crate::error::EnableFastLaunchError)
    pub fn enable_fast_launch(&self) -> fluent_builders::EnableFastLaunch {
        fluent_builders::EnableFastLaunch::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableFastSnapshotRestores`](crate::client::fluent_builders::EnableFastSnapshotRestores) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`availability_zones(Vec<String>)`](crate::client::fluent_builders::EnableFastSnapshotRestores::availability_zones) / [`set_availability_zones(Option<Vec<String>>)`](crate::client::fluent_builders::EnableFastSnapshotRestores::set_availability_zones): <p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p>
    ///   - [`source_snapshot_ids(Vec<String>)`](crate::client::fluent_builders::EnableFastSnapshotRestores::source_snapshot_ids) / [`set_source_snapshot_ids(Option<Vec<String>>)`](crate::client::fluent_builders::EnableFastSnapshotRestores::set_source_snapshot_ids): <p>The IDs of one or more snapshots. For example, <code>snap-1234567890abcdef0</code>. You can specify a snapshot that was shared with you from another Amazon Web Services account.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableFastSnapshotRestores::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableFastSnapshotRestores::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableFastSnapshotRestoresOutput`](crate::output::EnableFastSnapshotRestoresOutput) with field(s):
    ///   - [`successful(Option<Vec<EnableFastSnapshotRestoreSuccessItem>>)`](crate::output::EnableFastSnapshotRestoresOutput::successful): <p>Information about the snapshots for which fast snapshot restores were successfully enabled.</p>
    ///   - [`unsuccessful(Option<Vec<EnableFastSnapshotRestoreErrorItem>>)`](crate::output::EnableFastSnapshotRestoresOutput::unsuccessful): <p>Information about the snapshots for which fast snapshot restores could not be enabled.</p>
    /// - On failure, responds with [`SdkError<EnableFastSnapshotRestoresError>`](crate::error::EnableFastSnapshotRestoresError)
    pub fn enable_fast_snapshot_restores(&self) -> fluent_builders::EnableFastSnapshotRestores {
        fluent_builders::EnableFastSnapshotRestores::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableImageDeprecation`](crate::client::fluent_builders::EnableImageDeprecation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::EnableImageDeprecation::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::EnableImageDeprecation::set_image_id): <p>The ID of the AMI.</p>
    ///   - [`deprecate_at(DateTime)`](crate::client::fluent_builders::EnableImageDeprecation::deprecate_at) / [`set_deprecate_at(Option<DateTime>)`](crate::client::fluent_builders::EnableImageDeprecation::set_deprecate_at): <p>The date and time to deprecate the AMI, in UTC, in the following format: <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z. If you specify a value for seconds, Amazon EC2 rounds the seconds to the nearest minute.</p>  <p>You can’t specify a date in the past. The upper limit for <code>DeprecateAt</code> is 10 years from now, except for public AMIs, where the upper limit is 2 years from the creation date.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableImageDeprecation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableImageDeprecation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableImageDeprecationOutput`](crate::output::EnableImageDeprecationOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::EnableImageDeprecationOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<EnableImageDeprecationError>`](crate::error::EnableImageDeprecationError)
    pub fn enable_image_deprecation(&self) -> fluent_builders::EnableImageDeprecation {
        fluent_builders::EnableImageDeprecation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableIpamOrganizationAdminAccount`](crate::client::fluent_builders::EnableIpamOrganizationAdminAccount) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableIpamOrganizationAdminAccount::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableIpamOrganizationAdminAccount::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`delegated_admin_account_id(impl Into<String>)`](crate::client::fluent_builders::EnableIpamOrganizationAdminAccount::delegated_admin_account_id) / [`set_delegated_admin_account_id(Option<String>)`](crate::client::fluent_builders::EnableIpamOrganizationAdminAccount::set_delegated_admin_account_id): <p>The Organizations member account ID that you want to enable as the IPAM account.</p>
    /// - On success, responds with [`EnableIpamOrganizationAdminAccountOutput`](crate::output::EnableIpamOrganizationAdminAccountOutput) with field(s):
    ///   - [`success(Option<bool>)`](crate::output::EnableIpamOrganizationAdminAccountOutput::success): <p>The result of enabling the IPAM account.</p>
    /// - On failure, responds with [`SdkError<EnableIpamOrganizationAdminAccountError>`](crate::error::EnableIpamOrganizationAdminAccountError)
    pub fn enable_ipam_organization_admin_account(
        &self,
    ) -> fluent_builders::EnableIpamOrganizationAdminAccount {
        fluent_builders::EnableIpamOrganizationAdminAccount::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableReachabilityAnalyzerOrganizationSharing`](crate::client::fluent_builders::EnableReachabilityAnalyzerOrganizationSharing) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableReachabilityAnalyzerOrganizationSharing::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableReachabilityAnalyzerOrganizationSharing::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableReachabilityAnalyzerOrganizationSharingOutput`](crate::output::EnableReachabilityAnalyzerOrganizationSharingOutput) with field(s):
    ///   - [`return_value(Option<bool>)`](crate::output::EnableReachabilityAnalyzerOrganizationSharingOutput::return_value): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    /// - On failure, responds with [`SdkError<EnableReachabilityAnalyzerOrganizationSharingError>`](crate::error::EnableReachabilityAnalyzerOrganizationSharingError)
    pub fn enable_reachability_analyzer_organization_sharing(
        &self,
    ) -> fluent_builders::EnableReachabilityAnalyzerOrganizationSharing {
        fluent_builders::EnableReachabilityAnalyzerOrganizationSharing::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableSerialConsoleAccess`](crate::client::fluent_builders::EnableSerialConsoleAccess) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableSerialConsoleAccess::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableSerialConsoleAccess::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableSerialConsoleAccessOutput`](crate::output::EnableSerialConsoleAccessOutput) with field(s):
    ///   - [`serial_console_access_enabled(Option<bool>)`](crate::output::EnableSerialConsoleAccessOutput::serial_console_access_enabled): <p>If <code>true</code>, access to the EC2 serial console of all instances is enabled for your account. If <code>false</code>, access to the EC2 serial console of all instances is disabled for your account.</p>
    /// - On failure, responds with [`SdkError<EnableSerialConsoleAccessError>`](crate::error::EnableSerialConsoleAccessError)
    pub fn enable_serial_console_access(&self) -> fluent_builders::EnableSerialConsoleAccess {
        fluent_builders::EnableSerialConsoleAccess::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableTransitGatewayRouteTablePropagation`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation::set_transit_gateway_route_table_id): <p>The ID of the propagation route table.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`transit_gateway_route_table_announcement_id(impl Into<String>)`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation::transit_gateway_route_table_announcement_id) / [`set_transit_gateway_route_table_announcement_id(Option<String>)`](crate::client::fluent_builders::EnableTransitGatewayRouteTablePropagation::set_transit_gateway_route_table_announcement_id): <p>The ID of the transit gateway route table announcement.</p>
    /// - On success, responds with [`EnableTransitGatewayRouteTablePropagationOutput`](crate::output::EnableTransitGatewayRouteTablePropagationOutput) with field(s):
    ///   - [`propagation(Option<TransitGatewayPropagation>)`](crate::output::EnableTransitGatewayRouteTablePropagationOutput::propagation): <p>Information about route propagation.</p>
    /// - On failure, responds with [`SdkError<EnableTransitGatewayRouteTablePropagationError>`](crate::error::EnableTransitGatewayRouteTablePropagationError)
    pub fn enable_transit_gateway_route_table_propagation(
        &self,
    ) -> fluent_builders::EnableTransitGatewayRouteTablePropagation {
        fluent_builders::EnableTransitGatewayRouteTablePropagation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableVgwRoutePropagation`](crate::client::fluent_builders::EnableVgwRoutePropagation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`gateway_id(impl Into<String>)`](crate::client::fluent_builders::EnableVgwRoutePropagation::gateway_id) / [`set_gateway_id(Option<String>)`](crate::client::fluent_builders::EnableVgwRoutePropagation::set_gateway_id): <p>The ID of the virtual private gateway that is attached to a VPC. The virtual private gateway must be attached to the same VPC that the routing tables are associated with. </p>
    ///   - [`route_table_id(impl Into<String>)`](crate::client::fluent_builders::EnableVgwRoutePropagation::route_table_id) / [`set_route_table_id(Option<String>)`](crate::client::fluent_builders::EnableVgwRoutePropagation::set_route_table_id): <p>The ID of the route table. The routing table must be associated with the same VPC that the virtual private gateway is attached to. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableVgwRoutePropagation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableVgwRoutePropagation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`EnableVgwRoutePropagationOutput`](crate::output::EnableVgwRoutePropagationOutput)

    /// - On failure, responds with [`SdkError<EnableVgwRoutePropagationError>`](crate::error::EnableVgwRoutePropagationError)
    pub fn enable_vgw_route_propagation(&self) -> fluent_builders::EnableVgwRoutePropagation {
        fluent_builders::EnableVgwRoutePropagation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableVolumeIO`](crate::client::fluent_builders::EnableVolumeIO) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableVolumeIO::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableVolumeIO::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`volume_id(impl Into<String>)`](crate::client::fluent_builders::EnableVolumeIO::volume_id) / [`set_volume_id(Option<String>)`](crate::client::fluent_builders::EnableVolumeIO::set_volume_id): <p>The ID of the volume.</p>
    /// - On success, responds with [`EnableVolumeIoOutput`](crate::output::EnableVolumeIoOutput)

    /// - On failure, responds with [`SdkError<EnableVolumeIOError>`](crate::error::EnableVolumeIOError)
    pub fn enable_volume_io(&self) -> fluent_builders::EnableVolumeIO {
        fluent_builders::EnableVolumeIO::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableVpcClassicLink`](crate::client::fluent_builders::EnableVpcClassicLink) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::EnableVpcClassicLink::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::EnableVpcClassicLink::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::EnableVpcClassicLink::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::EnableVpcClassicLink::set_vpc_id): <p>The ID of the VPC.</p>
    /// - On success, responds with [`EnableVpcClassicLinkOutput`](crate::output::EnableVpcClassicLinkOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::EnableVpcClassicLinkOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<EnableVpcClassicLinkError>`](crate::error::EnableVpcClassicLinkError)
    pub fn enable_vpc_classic_link(&self) -> fluent_builders::EnableVpcClassicLink {
        fluent_builders::EnableVpcClassicLink::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`EnableVpcClassicLinkDnsSupport`](crate::client::fluent_builders::EnableVpcClassicLinkDnsSupport) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::EnableVpcClassicLinkDnsSupport::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::EnableVpcClassicLinkDnsSupport::set_vpc_id): <p>The ID of the VPC.</p>
    /// - On success, responds with [`EnableVpcClassicLinkDnsSupportOutput`](crate::output::EnableVpcClassicLinkDnsSupportOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::EnableVpcClassicLinkDnsSupportOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<EnableVpcClassicLinkDnsSupportError>`](crate::error::EnableVpcClassicLinkDnsSupportError)
    pub fn enable_vpc_classic_link_dns_support(
        &self,
    ) -> fluent_builders::EnableVpcClassicLinkDnsSupport {
        fluent_builders::EnableVpcClassicLinkDnsSupport::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ExportClientVpnClientCertificateRevocationList`](crate::client::fluent_builders::ExportClientVpnClientCertificateRevocationList) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ExportClientVpnClientCertificateRevocationList::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::ExportClientVpnClientCertificateRevocationList::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ExportClientVpnClientCertificateRevocationList::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ExportClientVpnClientCertificateRevocationList::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ExportClientVpnClientCertificateRevocationListOutput`](crate::output::ExportClientVpnClientCertificateRevocationListOutput) with field(s):
    ///   - [`certificate_revocation_list(Option<String>)`](crate::output::ExportClientVpnClientCertificateRevocationListOutput::certificate_revocation_list): <p>Information about the client certificate revocation list.</p>
    ///   - [`status(Option<ClientCertificateRevocationListStatus>)`](crate::output::ExportClientVpnClientCertificateRevocationListOutput::status): <p>The current state of the client certificate revocation list.</p>
    /// - On failure, responds with [`SdkError<ExportClientVpnClientCertificateRevocationListError>`](crate::error::ExportClientVpnClientCertificateRevocationListError)
    pub fn export_client_vpn_client_certificate_revocation_list(
        &self,
    ) -> fluent_builders::ExportClientVpnClientCertificateRevocationList {
        fluent_builders::ExportClientVpnClientCertificateRevocationList::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ExportClientVpnClientConfiguration`](crate::client::fluent_builders::ExportClientVpnClientConfiguration) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ExportClientVpnClientConfiguration::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::ExportClientVpnClientConfiguration::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ExportClientVpnClientConfiguration::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ExportClientVpnClientConfiguration::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ExportClientVpnClientConfigurationOutput`](crate::output::ExportClientVpnClientConfigurationOutput) with field(s):
    ///   - [`client_configuration(Option<String>)`](crate::output::ExportClientVpnClientConfigurationOutput::client_configuration): <p>The contents of the Client VPN endpoint configuration file.</p>
    /// - On failure, responds with [`SdkError<ExportClientVpnClientConfigurationError>`](crate::error::ExportClientVpnClientConfigurationError)
    pub fn export_client_vpn_client_configuration(
        &self,
    ) -> fluent_builders::ExportClientVpnClientConfiguration {
        fluent_builders::ExportClientVpnClientConfiguration::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ExportImage`](crate::client::fluent_builders::ExportImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ExportImage::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ExportImage::set_client_token): <p>Token to enable idempotency for export image requests.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ExportImage::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ExportImage::set_description): <p>A description of the image being exported. The maximum length is 255 characters.</p>
    ///   - [`disk_image_format(DiskImageFormat)`](crate::client::fluent_builders::ExportImage::disk_image_format) / [`set_disk_image_format(Option<DiskImageFormat>)`](crate::client::fluent_builders::ExportImage::set_disk_image_format): <p>The disk image format.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ExportImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ExportImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::ExportImage::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::ExportImage::set_image_id): <p>The ID of the image.</p>
    ///   - [`s3_export_location(ExportTaskS3LocationRequest)`](crate::client::fluent_builders::ExportImage::s3_export_location) / [`set_s3_export_location(Option<ExportTaskS3LocationRequest>)`](crate::client::fluent_builders::ExportImage::set_s3_export_location): <p>The Amazon S3 bucket for the destination image. The destination bucket must exist.</p>
    ///   - [`role_name(impl Into<String>)`](crate::client::fluent_builders::ExportImage::role_name) / [`set_role_name(Option<String>)`](crate::client::fluent_builders::ExportImage::set_role_name): <p>The name of the role that grants VM Import/Export permission to export images to your Amazon S3 bucket. If this parameter is not specified, the default role is named 'vmimport'.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::ExportImage::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::ExportImage::set_tag_specifications): <p>The tags to apply to the export image task during creation.</p>
    /// - On success, responds with [`ExportImageOutput`](crate::output::ExportImageOutput) with field(s):
    ///   - [`description(Option<String>)`](crate::output::ExportImageOutput::description): <p>A description of the image being exported.</p>
    ///   - [`disk_image_format(Option<DiskImageFormat>)`](crate::output::ExportImageOutput::disk_image_format): <p>The disk image format for the exported image.</p>
    ///   - [`export_image_task_id(Option<String>)`](crate::output::ExportImageOutput::export_image_task_id): <p>The ID of the export image task.</p>
    ///   - [`image_id(Option<String>)`](crate::output::ExportImageOutput::image_id): <p>The ID of the image.</p>
    ///   - [`role_name(Option<String>)`](crate::output::ExportImageOutput::role_name): <p>The name of the role that grants VM Import/Export permission to export images to your Amazon S3 bucket.</p>
    ///   - [`progress(Option<String>)`](crate::output::ExportImageOutput::progress): <p>The percent complete of the export image task.</p>
    ///   - [`s3_export_location(Option<ExportTaskS3Location>)`](crate::output::ExportImageOutput::s3_export_location): <p>Information about the destination Amazon S3 bucket.</p>
    ///   - [`status(Option<String>)`](crate::output::ExportImageOutput::status): <p>The status of the export image task. The possible values are <code>active</code>, <code>completed</code>, <code>deleting</code>, and <code>deleted</code>.</p>
    ///   - [`status_message(Option<String>)`](crate::output::ExportImageOutput::status_message): <p>The status message for the export image task.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::ExportImageOutput::tags): <p>Any tags assigned to the export image task.</p>
    /// - On failure, responds with [`SdkError<ExportImageError>`](crate::error::ExportImageError)
    pub fn export_image(&self) -> fluent_builders::ExportImage {
        fluent_builders::ExportImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ExportTransitGatewayRoutes`](crate::client::fluent_builders::ExportTransitGatewayRoutes) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::ExportTransitGatewayRoutes::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::ExportTransitGatewayRoutes::set_transit_gateway_route_table_id): <p>The ID of the route table.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::ExportTransitGatewayRoutes::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::ExportTransitGatewayRoutes::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>attachment.transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>   <li> <p> <code>attachment.resource-id</code> - The resource id of the transit gateway attachment.</p> </li>   <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>   <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>   <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>   <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify supernet-of-match as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>   <li> <p> <code>state</code> - The state of the route (<code>active</code> | <code>blackhole</code>).</p> </li>   <li> <p> <code>transit-gateway-route-destination-cidr-block</code> - The CIDR range.</p> </li>   <li> <p> <code>type</code> - The type of route (<code>propagated</code> | <code>static</code>).</p> </li>  </ul>
    ///   - [`s3_bucket(impl Into<String>)`](crate::client::fluent_builders::ExportTransitGatewayRoutes::s3_bucket) / [`set_s3_bucket(Option<String>)`](crate::client::fluent_builders::ExportTransitGatewayRoutes::set_s3_bucket): <p>The name of the S3 bucket.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ExportTransitGatewayRoutes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ExportTransitGatewayRoutes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ExportTransitGatewayRoutesOutput`](crate::output::ExportTransitGatewayRoutesOutput) with field(s):
    ///   - [`s3_location(Option<String>)`](crate::output::ExportTransitGatewayRoutesOutput::s3_location): <p>The URL of the exported file in Amazon S3. For example, s3://<i>bucket_name</i>/VPCTransitGateway/TransitGatewayRouteTables/<i>file_name</i>.</p>
    /// - On failure, responds with [`SdkError<ExportTransitGatewayRoutesError>`](crate::error::ExportTransitGatewayRoutesError)
    pub fn export_transit_gateway_routes(&self) -> fluent_builders::ExportTransitGatewayRoutes {
        fluent_builders::ExportTransitGatewayRoutes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetAssociatedEnclaveCertificateIamRoles`](crate::client::fluent_builders::GetAssociatedEnclaveCertificateIamRoles) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`certificate_arn(impl Into<String>)`](crate::client::fluent_builders::GetAssociatedEnclaveCertificateIamRoles::certificate_arn) / [`set_certificate_arn(Option<String>)`](crate::client::fluent_builders::GetAssociatedEnclaveCertificateIamRoles::set_certificate_arn): <p>The ARN of the ACM certificate for which to view the associated IAM roles, encryption keys, and Amazon S3 object information.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetAssociatedEnclaveCertificateIamRoles::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetAssociatedEnclaveCertificateIamRoles::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetAssociatedEnclaveCertificateIamRolesOutput`](crate::output::GetAssociatedEnclaveCertificateIamRolesOutput) with field(s):
    ///   - [`associated_roles(Option<Vec<AssociatedRole>>)`](crate::output::GetAssociatedEnclaveCertificateIamRolesOutput::associated_roles): <p>Information about the associated IAM roles.</p>
    /// - On failure, responds with [`SdkError<GetAssociatedEnclaveCertificateIamRolesError>`](crate::error::GetAssociatedEnclaveCertificateIamRolesError)
    pub fn get_associated_enclave_certificate_iam_roles(
        &self,
    ) -> fluent_builders::GetAssociatedEnclaveCertificateIamRoles {
        fluent_builders::GetAssociatedEnclaveCertificateIamRoles::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetAssociatedIpv6PoolCidrs`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`pool_id(impl Into<String>)`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::pool_id) / [`set_pool_id(Option<String>)`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::set_pool_id): <p>The ID of the IPv6 address pool.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetAssociatedIpv6PoolCidrs::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetAssociatedIpv6PoolCidrsOutput`](crate::output::GetAssociatedIpv6PoolCidrsOutput) with field(s):
    ///   - [`ipv6_cidr_associations(Option<Vec<Ipv6CidrAssociation>>)`](crate::output::GetAssociatedIpv6PoolCidrsOutput::ipv6_cidr_associations): <p>Information about the IPv6 CIDR block associations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetAssociatedIpv6PoolCidrsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetAssociatedIpv6PoolCidrsError>`](crate::error::GetAssociatedIpv6PoolCidrsError)
    pub fn get_associated_ipv6_pool_cidrs(&self) -> fluent_builders::GetAssociatedIpv6PoolCidrs {
        fluent_builders::GetAssociatedIpv6PoolCidrs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetAwsNetworkPerformanceData`](crate::client::fluent_builders::GetAwsNetworkPerformanceData) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`data_queries(Vec<DataQuery>)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::data_queries) / [`set_data_queries(Option<Vec<DataQuery>>)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::set_data_queries): <p>A list of network performance data queries.</p>
    ///   - [`start_time(DateTime)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::start_time) / [`set_start_time(Option<DateTime>)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::set_start_time): <p>The starting time for the performance data request. The starting time must be formatted as <code>yyyy-mm-ddThh:mm:ss</code>. For example, <code>2022-06-10T12:00:00.000Z</code>.</p>
    ///   - [`end_time(DateTime)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::end_time) / [`set_end_time(Option<DateTime>)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::set_end_time): <p>The ending time for the performance data request. The end time must be formatted as <code>yyyy-mm-ddThh:mm:ss</code>. For example, <code>2022-06-12T12:00:00.000Z</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetAwsNetworkPerformanceData::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetAwsNetworkPerformanceDataOutput`](crate::output::GetAwsNetworkPerformanceDataOutput) with field(s):
    ///   - [`data_responses(Option<Vec<DataResponse>>)`](crate::output::GetAwsNetworkPerformanceDataOutput::data_responses): <p>The list of data responses.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetAwsNetworkPerformanceDataOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetAwsNetworkPerformanceDataError>`](crate::error::GetAwsNetworkPerformanceDataError)
    pub fn get_aws_network_performance_data(
        &self,
    ) -> fluent_builders::GetAwsNetworkPerformanceData {
        fluent_builders::GetAwsNetworkPerformanceData::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetCapacityReservationUsage`](crate::client::fluent_builders::GetCapacityReservationUsage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`capacity_reservation_id(impl Into<String>)`](crate::client::fluent_builders::GetCapacityReservationUsage::capacity_reservation_id) / [`set_capacity_reservation_id(Option<String>)`](crate::client::fluent_builders::GetCapacityReservationUsage::set_capacity_reservation_id): <p>The ID of the Capacity Reservation.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetCapacityReservationUsage::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetCapacityReservationUsage::set_next_token): <p>The token to use to retrieve the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetCapacityReservationUsage::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetCapacityReservationUsage::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>  <p>Valid range: Minimum value of 1. Maximum value of 1000.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetCapacityReservationUsage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetCapacityReservationUsage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetCapacityReservationUsageOutput`](crate::output::GetCapacityReservationUsageOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::GetCapacityReservationUsageOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`capacity_reservation_id(Option<String>)`](crate::output::GetCapacityReservationUsageOutput::capacity_reservation_id): <p>The ID of the Capacity Reservation.</p>
    ///   - [`instance_type(Option<String>)`](crate::output::GetCapacityReservationUsageOutput::instance_type): <p>The type of instance for which the Capacity Reservation reserves capacity.</p>
    ///   - [`total_instance_count(Option<i32>)`](crate::output::GetCapacityReservationUsageOutput::total_instance_count): <p>The number of instances for which the Capacity Reservation reserves capacity.</p>
    ///   - [`available_instance_count(Option<i32>)`](crate::output::GetCapacityReservationUsageOutput::available_instance_count): <p>The remaining capacity. Indicates the number of instances that can be launched in the Capacity Reservation.</p>
    ///   - [`state(Option<CapacityReservationState>)`](crate::output::GetCapacityReservationUsageOutput::state): <p>The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p>  <ul>   <li> <p> <code>active</code> - The Capacity Reservation is active and the capacity is available for your use.</p> </li>   <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your request. The reserved capacity is no longer available for your use.</p> </li>   <li> <p> <code>cancelled</code> - The Capacity Reservation was cancelled. The reserved capacity is no longer available for your use.</p> </li>   <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li>   <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request might fail due to invalid request parameters, capacity constraints, or instance limit constraints. Failed requests are retained for 60 minutes.</p> </li>  </ul>
    ///   - [`instance_usages(Option<Vec<InstanceUsage>>)`](crate::output::GetCapacityReservationUsageOutput::instance_usages): <p>Information about the Capacity Reservation usage.</p>
    /// - On failure, responds with [`SdkError<GetCapacityReservationUsageError>`](crate::error::GetCapacityReservationUsageError)
    pub fn get_capacity_reservation_usage(&self) -> fluent_builders::GetCapacityReservationUsage {
        fluent_builders::GetCapacityReservationUsage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetCoipPoolUsage`](crate::client::fluent_builders::GetCoipPoolUsage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`pool_id(impl Into<String>)`](crate::client::fluent_builders::GetCoipPoolUsage::pool_id) / [`set_pool_id(Option<String>)`](crate::client::fluent_builders::GetCoipPoolUsage::set_pool_id): <p>The ID of the address pool.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetCoipPoolUsage::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetCoipPoolUsage::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>coip-address-usage.allocation-id</code> - The allocation ID of the address.</p> </li>   <li> <p> <code>coip-address-usage.aws-account-id</code> - The ID of the Amazon Web Services account that is using the customer-owned IP address.</p> </li>   <li> <p> <code>coip-address-usage.aws-service</code> - The Amazon Web Services service that is using the customer-owned IP address.</p> </li>   <li> <p> <code>coip-address-usage.co-ip</code> - The customer-owned IP address.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetCoipPoolUsage::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetCoipPoolUsage::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetCoipPoolUsage::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetCoipPoolUsage::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetCoipPoolUsage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetCoipPoolUsage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetCoipPoolUsageOutput`](crate::output::GetCoipPoolUsageOutput) with field(s):
    ///   - [`coip_pool_id(Option<String>)`](crate::output::GetCoipPoolUsageOutput::coip_pool_id): <p>The ID of the customer-owned address pool.</p>
    ///   - [`coip_address_usages(Option<Vec<CoipAddressUsage>>)`](crate::output::GetCoipPoolUsageOutput::coip_address_usages): <p>Information about the address usage.</p>
    ///   - [`local_gateway_route_table_id(Option<String>)`](crate::output::GetCoipPoolUsageOutput::local_gateway_route_table_id): <p>The ID of the local gateway route table.</p>
    /// - On failure, responds with [`SdkError<GetCoipPoolUsageError>`](crate::error::GetCoipPoolUsageError)
    pub fn get_coip_pool_usage(&self) -> fluent_builders::GetCoipPoolUsage {
        fluent_builders::GetCoipPoolUsage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetConsoleOutput`](crate::client::fluent_builders::GetConsoleOutput) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::GetConsoleOutput::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::GetConsoleOutput::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetConsoleOutput::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetConsoleOutput::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`latest(bool)`](crate::client::fluent_builders::GetConsoleOutput::latest) / [`set_latest(Option<bool>)`](crate::client::fluent_builders::GetConsoleOutput::set_latest): <p>When enabled, retrieves the latest console output for the instance.</p>  <p>Default: disabled (<code>false</code>)</p>
    /// - On success, responds with [`GetConsoleOutputOutput`](crate::output::GetConsoleOutputOutput) with field(s):
    ///   - [`instance_id(Option<String>)`](crate::output::GetConsoleOutputOutput::instance_id): <p>The ID of the instance.</p>
    ///   - [`output(Option<String>)`](crate::output::GetConsoleOutputOutput::output): <p>The console output, base64-encoded. If you are using a command line tool, the tool decodes the output for you.</p>
    ///   - [`timestamp(Option<DateTime>)`](crate::output::GetConsoleOutputOutput::timestamp): <p>The time at which the output was last updated.</p>
    /// - On failure, responds with [`SdkError<GetConsoleOutputError>`](crate::error::GetConsoleOutputError)
    pub fn get_console_output(&self) -> fluent_builders::GetConsoleOutput {
        fluent_builders::GetConsoleOutput::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetConsoleScreenshot`](crate::client::fluent_builders::GetConsoleScreenshot) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetConsoleScreenshot::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetConsoleScreenshot::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::GetConsoleScreenshot::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::GetConsoleScreenshot::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`wake_up(bool)`](crate::client::fluent_builders::GetConsoleScreenshot::wake_up) / [`set_wake_up(Option<bool>)`](crate::client::fluent_builders::GetConsoleScreenshot::set_wake_up): <p>When set to <code>true</code>, acts as keystroke input and wakes up an instance that's in standby or "sleep" mode.</p>
    /// - On success, responds with [`GetConsoleScreenshotOutput`](crate::output::GetConsoleScreenshotOutput) with field(s):
    ///   - [`image_data(Option<String>)`](crate::output::GetConsoleScreenshotOutput::image_data): <p>The data that comprises the image.</p>
    ///   - [`instance_id(Option<String>)`](crate::output::GetConsoleScreenshotOutput::instance_id): <p>The ID of the instance.</p>
    /// - On failure, responds with [`SdkError<GetConsoleScreenshotError>`](crate::error::GetConsoleScreenshotError)
    pub fn get_console_screenshot(&self) -> fluent_builders::GetConsoleScreenshot {
        fluent_builders::GetConsoleScreenshot::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetDefaultCreditSpecification`](crate::client::fluent_builders::GetDefaultCreditSpecification) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetDefaultCreditSpecification::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetDefaultCreditSpecification::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_family(UnlimitedSupportedInstanceFamily)`](crate::client::fluent_builders::GetDefaultCreditSpecification::instance_family) / [`set_instance_family(Option<UnlimitedSupportedInstanceFamily>)`](crate::client::fluent_builders::GetDefaultCreditSpecification::set_instance_family): <p>The instance family.</p>
    /// - On success, responds with [`GetDefaultCreditSpecificationOutput`](crate::output::GetDefaultCreditSpecificationOutput) with field(s):
    ///   - [`instance_family_credit_specification(Option<InstanceFamilyCreditSpecification>)`](crate::output::GetDefaultCreditSpecificationOutput::instance_family_credit_specification): <p>The default credit option for CPU usage of the instance family.</p>
    /// - On failure, responds with [`SdkError<GetDefaultCreditSpecificationError>`](crate::error::GetDefaultCreditSpecificationError)
    pub fn get_default_credit_specification(
        &self,
    ) -> fluent_builders::GetDefaultCreditSpecification {
        fluent_builders::GetDefaultCreditSpecification::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetEbsDefaultKmsKeyId`](crate::client::fluent_builders::GetEbsDefaultKmsKeyId) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetEbsDefaultKmsKeyId::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetEbsDefaultKmsKeyId::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetEbsDefaultKmsKeyIdOutput`](crate::output::GetEbsDefaultKmsKeyIdOutput) with field(s):
    ///   - [`kms_key_id(Option<String>)`](crate::output::GetEbsDefaultKmsKeyIdOutput::kms_key_id): <p>The Amazon Resource Name (ARN) of the default KMS key for encryption by default.</p>
    /// - On failure, responds with [`SdkError<GetEbsDefaultKmsKeyIdError>`](crate::error::GetEbsDefaultKmsKeyIdError)
    pub fn get_ebs_default_kms_key_id(&self) -> fluent_builders::GetEbsDefaultKmsKeyId {
        fluent_builders::GetEbsDefaultKmsKeyId::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetEbsEncryptionByDefault`](crate::client::fluent_builders::GetEbsEncryptionByDefault) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetEbsEncryptionByDefault::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetEbsEncryptionByDefault::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetEbsEncryptionByDefaultOutput`](crate::output::GetEbsEncryptionByDefaultOutput) with field(s):
    ///   - [`ebs_encryption_by_default(Option<bool>)`](crate::output::GetEbsEncryptionByDefaultOutput::ebs_encryption_by_default): <p>Indicates whether encryption by default is enabled.</p>
    /// - On failure, responds with [`SdkError<GetEbsEncryptionByDefaultError>`](crate::error::GetEbsEncryptionByDefaultError)
    pub fn get_ebs_encryption_by_default(&self) -> fluent_builders::GetEbsEncryptionByDefault {
        fluent_builders::GetEbsEncryptionByDefault::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetFlowLogsIntegrationTemplate`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`flow_log_id(impl Into<String>)`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate::flow_log_id) / [`set_flow_log_id(Option<String>)`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate::set_flow_log_id): <p>The ID of the flow log.</p>
    ///   - [`config_delivery_s3_destination_arn(impl Into<String>)`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate::config_delivery_s3_destination_arn) / [`set_config_delivery_s3_destination_arn(Option<String>)`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate::set_config_delivery_s3_destination_arn): <p>To store the CloudFormation template in Amazon S3, specify the location in Amazon S3.</p>
    ///   - [`integrate_services(IntegrateServices)`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate::integrate_services) / [`set_integrate_services(Option<IntegrateServices>)`](crate::client::fluent_builders::GetFlowLogsIntegrationTemplate::set_integrate_services): <p>Information about the service integration.</p>
    /// - On success, responds with [`GetFlowLogsIntegrationTemplateOutput`](crate::output::GetFlowLogsIntegrationTemplateOutput) with field(s):
    ///   - [`result(Option<String>)`](crate::output::GetFlowLogsIntegrationTemplateOutput::result): <p>The generated CloudFormation template.</p>
    /// - On failure, responds with [`SdkError<GetFlowLogsIntegrationTemplateError>`](crate::error::GetFlowLogsIntegrationTemplateError)
    pub fn get_flow_logs_integration_template(
        &self,
    ) -> fluent_builders::GetFlowLogsIntegrationTemplate {
        fluent_builders::GetFlowLogsIntegrationTemplate::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetGroupsForCapacityReservation`](crate::client::fluent_builders::GetGroupsForCapacityReservation) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetGroupsForCapacityReservation::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`capacity_reservation_id(impl Into<String>)`](crate::client::fluent_builders::GetGroupsForCapacityReservation::capacity_reservation_id) / [`set_capacity_reservation_id(Option<String>)`](crate::client::fluent_builders::GetGroupsForCapacityReservation::set_capacity_reservation_id): <p>The ID of the Capacity Reservation.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetGroupsForCapacityReservation::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetGroupsForCapacityReservation::set_next_token): <p>The token to use to retrieve the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetGroupsForCapacityReservation::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetGroupsForCapacityReservation::set_max_results): <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetGroupsForCapacityReservation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetGroupsForCapacityReservation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetGroupsForCapacityReservationOutput`](crate::output::GetGroupsForCapacityReservationOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::GetGroupsForCapacityReservationOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`capacity_reservation_groups(Option<Vec<CapacityReservationGroup>>)`](crate::output::GetGroupsForCapacityReservationOutput::capacity_reservation_groups): <p>Information about the resource groups to which the Capacity Reservation has been added.</p>
    /// - On failure, responds with [`SdkError<GetGroupsForCapacityReservationError>`](crate::error::GetGroupsForCapacityReservationError)
    pub fn get_groups_for_capacity_reservation(
        &self,
    ) -> fluent_builders::GetGroupsForCapacityReservation {
        fluent_builders::GetGroupsForCapacityReservation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetHostReservationPurchasePreview`](crate::client::fluent_builders::GetHostReservationPurchasePreview) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`host_id_set(Vec<String>)`](crate::client::fluent_builders::GetHostReservationPurchasePreview::host_id_set) / [`set_host_id_set(Option<Vec<String>>)`](crate::client::fluent_builders::GetHostReservationPurchasePreview::set_host_id_set): <p>The IDs of the Dedicated Hosts with which the reservation is associated.</p>
    ///   - [`offering_id(impl Into<String>)`](crate::client::fluent_builders::GetHostReservationPurchasePreview::offering_id) / [`set_offering_id(Option<String>)`](crate::client::fluent_builders::GetHostReservationPurchasePreview::set_offering_id): <p>The offering ID of the reservation.</p>
    /// - On success, responds with [`GetHostReservationPurchasePreviewOutput`](crate::output::GetHostReservationPurchasePreviewOutput) with field(s):
    ///   - [`currency_code(Option<CurrencyCodeValues>)`](crate::output::GetHostReservationPurchasePreviewOutput::currency_code): <p>The currency in which the <code>totalUpfrontPrice</code> and <code>totalHourlyPrice</code> amounts are specified. At this time, the only supported currency is <code>USD</code>.</p>
    ///   - [`purchase(Option<Vec<Purchase>>)`](crate::output::GetHostReservationPurchasePreviewOutput::purchase): <p>The purchase information of the Dedicated Host reservation and the Dedicated Hosts associated with it.</p>
    ///   - [`total_hourly_price(Option<String>)`](crate::output::GetHostReservationPurchasePreviewOutput::total_hourly_price): <p>The potential total hourly price of the reservation per hour.</p>
    ///   - [`total_upfront_price(Option<String>)`](crate::output::GetHostReservationPurchasePreviewOutput::total_upfront_price): <p>The potential total upfront price. This is billed immediately.</p>
    /// - On failure, responds with [`SdkError<GetHostReservationPurchasePreviewError>`](crate::error::GetHostReservationPurchasePreviewError)
    pub fn get_host_reservation_purchase_preview(
        &self,
    ) -> fluent_builders::GetHostReservationPurchasePreview {
        fluent_builders::GetHostReservationPurchasePreview::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetInstanceTypesFromInstanceRequirements`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`architecture_types(Vec<ArchitectureType>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::architecture_types) / [`set_architecture_types(Option<Vec<ArchitectureType>>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::set_architecture_types): <p>The processor architecture type.</p>
    ///   - [`virtualization_types(Vec<VirtualizationType>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::virtualization_types) / [`set_virtualization_types(Option<Vec<VirtualizationType>>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::set_virtualization_types): <p>The virtualization type.</p>
    ///   - [`instance_requirements(InstanceRequirementsRequest)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::instance_requirements) / [`set_instance_requirements(Option<InstanceRequirementsRequest>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::set_instance_requirements): <p>The attributes required for the instance types.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and
 1000. The default value is 1000. To retrieve the remaining results, make another call with
 the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetInstanceTypesFromInstanceRequirements::set_next_token): <p>The token for the next set of results.</p>
    /// - On success, responds with [`GetInstanceTypesFromInstanceRequirementsOutput`](crate::output::GetInstanceTypesFromInstanceRequirementsOutput) with field(s):
    ///   - [`instance_types(Option<Vec<InstanceTypeInfoFromInstanceRequirements>>)`](crate::output::GetInstanceTypesFromInstanceRequirementsOutput::instance_types): <p>The instance types with the specified instance attributes.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetInstanceTypesFromInstanceRequirementsOutput::next_token): <p>The token for the next set of results.</p>
    /// - On failure, responds with [`SdkError<GetInstanceTypesFromInstanceRequirementsError>`](crate::error::GetInstanceTypesFromInstanceRequirementsError)
    pub fn get_instance_types_from_instance_requirements(
        &self,
    ) -> fluent_builders::GetInstanceTypesFromInstanceRequirements {
        fluent_builders::GetInstanceTypesFromInstanceRequirements::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetInstanceUefiData`](crate::client::fluent_builders::GetInstanceUefiData) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::GetInstanceUefiData::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::GetInstanceUefiData::set_instance_id): <p>The ID of the instance from which to retrieve the UEFI data.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetInstanceUefiData::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetInstanceUefiData::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetInstanceUefiDataOutput`](crate::output::GetInstanceUefiDataOutput) with field(s):
    ///   - [`instance_id(Option<String>)`](crate::output::GetInstanceUefiDataOutput::instance_id): <p>The ID of the instance from which to retrieve the UEFI data.</p>
    ///   - [`uefi_data(Option<String>)`](crate::output::GetInstanceUefiDataOutput::uefi_data): <p>Base64 representation of the non-volatile UEFI variable store.</p>
    /// - On failure, responds with [`SdkError<GetInstanceUefiDataError>`](crate::error::GetInstanceUefiDataError)
    pub fn get_instance_uefi_data(&self) -> fluent_builders::GetInstanceUefiData {
        fluent_builders::GetInstanceUefiData::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetIpamAddressHistory`](crate::client::fluent_builders::GetIpamAddressHistory) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetIpamAddressHistory::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetIpamAddressHistory::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetIpamAddressHistory::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::GetIpamAddressHistory::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::GetIpamAddressHistory::set_cidr): <p>The CIDR you want the history of. The CIDR can be an IPv4 or IPv6 IP address range. If you enter a /16 IPv4 CIDR, you will get records that match it exactly. You will not get records for any subnets within the /16 CIDR.</p>
    ///   - [`ipam_scope_id(impl Into<String>)`](crate::client::fluent_builders::GetIpamAddressHistory::ipam_scope_id) / [`set_ipam_scope_id(Option<String>)`](crate::client::fluent_builders::GetIpamAddressHistory::set_ipam_scope_id): <p>The ID of the IPAM scope that the CIDR is in.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::GetIpamAddressHistory::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::GetIpamAddressHistory::set_vpc_id): <p>The ID of the VPC you want your history records filtered by.</p>
    ///   - [`start_time(DateTime)`](crate::client::fluent_builders::GetIpamAddressHistory::start_time) / [`set_start_time(Option<DateTime>)`](crate::client::fluent_builders::GetIpamAddressHistory::set_start_time): <p>The start of the time period for which you are looking for history. If you omit this option, it will default to the value of EndTime.</p>
    ///   - [`end_time(DateTime)`](crate::client::fluent_builders::GetIpamAddressHistory::end_time) / [`set_end_time(Option<DateTime>)`](crate::client::fluent_builders::GetIpamAddressHistory::set_end_time): <p>The end of the time period for which you are looking for history. If you omit this option, it will default to the current time.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetIpamAddressHistory::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetIpamAddressHistory::set_max_results): <p>The maximum number of historical results you would like returned per page. Defaults to 100.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetIpamAddressHistory::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetIpamAddressHistory::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`GetIpamAddressHistoryOutput`](crate::output::GetIpamAddressHistoryOutput) with field(s):
    ///   - [`history_records(Option<Vec<IpamAddressHistoryRecord>>)`](crate::output::GetIpamAddressHistoryOutput::history_records): <p>A historical record for a CIDR within an IPAM scope. If the CIDR is associated with an EC2 instance, you will see an object in the response for the instance and one for the network interface.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetIpamAddressHistoryOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetIpamAddressHistoryError>`](crate::error::GetIpamAddressHistoryError)
    pub fn get_ipam_address_history(&self) -> fluent_builders::GetIpamAddressHistory {
        fluent_builders::GetIpamAddressHistory::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetIpamPoolAllocations`](crate::client::fluent_builders::GetIpamPoolAllocations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetIpamPoolAllocations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetIpamPoolAllocations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetIpamPoolAllocations::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::GetIpamPoolAllocations::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::GetIpamPoolAllocations::set_ipam_pool_id): <p>The ID of the IPAM pool you want to see the allocations for.</p>
    ///   - [`ipam_pool_allocation_id(impl Into<String>)`](crate::client::fluent_builders::GetIpamPoolAllocations::ipam_pool_allocation_id) / [`set_ipam_pool_allocation_id(Option<String>)`](crate::client::fluent_builders::GetIpamPoolAllocations::set_ipam_pool_allocation_id): <p>The ID of the allocation.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetIpamPoolAllocations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetIpamPoolAllocations::set_filters): <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetIpamPoolAllocations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetIpamPoolAllocations::set_max_results): <p>The maximum number of results you would like returned per page.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetIpamPoolAllocations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetIpamPoolAllocations::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`GetIpamPoolAllocationsOutput`](crate::output::GetIpamPoolAllocationsOutput) with field(s):
    ///   - [`ipam_pool_allocations(Option<Vec<IpamPoolAllocation>>)`](crate::output::GetIpamPoolAllocationsOutput::ipam_pool_allocations): <p>The IPAM pool allocations you want information on.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetIpamPoolAllocationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetIpamPoolAllocationsError>`](crate::error::GetIpamPoolAllocationsError)
    pub fn get_ipam_pool_allocations(&self) -> fluent_builders::GetIpamPoolAllocations {
        fluent_builders::GetIpamPoolAllocations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetIpamPoolCidrs`](crate::client::fluent_builders::GetIpamPoolCidrs) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetIpamPoolCidrs::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetIpamPoolCidrs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetIpamPoolCidrs::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::GetIpamPoolCidrs::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::GetIpamPoolCidrs::set_ipam_pool_id): <p>The ID of the IPAM pool you want the CIDR for.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetIpamPoolCidrs::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetIpamPoolCidrs::set_filters): <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetIpamPoolCidrs::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetIpamPoolCidrs::set_max_results): <p>The maximum number of results to return in the request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetIpamPoolCidrs::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetIpamPoolCidrs::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`GetIpamPoolCidrsOutput`](crate::output::GetIpamPoolCidrsOutput) with field(s):
    ///   - [`ipam_pool_cidrs(Option<Vec<IpamPoolCidr>>)`](crate::output::GetIpamPoolCidrsOutput::ipam_pool_cidrs): <p>Information about the CIDRs provisioned to an IPAM pool.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetIpamPoolCidrsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetIpamPoolCidrsError>`](crate::error::GetIpamPoolCidrsError)
    pub fn get_ipam_pool_cidrs(&self) -> fluent_builders::GetIpamPoolCidrs {
        fluent_builders::GetIpamPoolCidrs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetIpamResourceCidrs`](crate::client::fluent_builders::GetIpamResourceCidrs) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetIpamResourceCidrs::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetIpamResourceCidrs::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetIpamResourceCidrs::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_filters): <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetIpamResourceCidrs::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_max_results): <p>The maximum number of results to return in the request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`ipam_scope_id(impl Into<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::ipam_scope_id) / [`set_ipam_scope_id(Option<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_ipam_scope_id): <p>The ID of the scope that the resource is in.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_ipam_pool_id): <p>The ID of the IPAM pool that the resource is in.</p>
    ///   - [`resource_id(impl Into<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::resource_id) / [`set_resource_id(Option<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_resource_id): <p>The ID of the resource.</p>
    ///   - [`resource_type(IpamResourceType)`](crate::client::fluent_builders::GetIpamResourceCidrs::resource_type) / [`set_resource_type(Option<IpamResourceType>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_resource_type): <p>The resource type.</p>
    ///   - [`resource_tag(RequestIpamResourceTag)`](crate::client::fluent_builders::GetIpamResourceCidrs::resource_tag) / [`set_resource_tag(Option<RequestIpamResourceTag>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_resource_tag): <p>The resource tag.</p>
    ///   - [`resource_owner(impl Into<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::resource_owner) / [`set_resource_owner(Option<String>)`](crate::client::fluent_builders::GetIpamResourceCidrs::set_resource_owner): <p>The ID of the Amazon Web Services account that owns the resource.</p>
    /// - On success, responds with [`GetIpamResourceCidrsOutput`](crate::output::GetIpamResourceCidrsOutput) with field(s):
    ///   - [`next_token(Option<String>)`](crate::output::GetIpamResourceCidrsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    ///   - [`ipam_resource_cidrs(Option<Vec<IpamResourceCidr>>)`](crate::output::GetIpamResourceCidrsOutput::ipam_resource_cidrs): <p>The resource CIDRs.</p>
    /// - On failure, responds with [`SdkError<GetIpamResourceCidrsError>`](crate::error::GetIpamResourceCidrsError)
    pub fn get_ipam_resource_cidrs(&self) -> fluent_builders::GetIpamResourceCidrs {
        fluent_builders::GetIpamResourceCidrs::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetLaunchTemplateData`](crate::client::fluent_builders::GetLaunchTemplateData) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetLaunchTemplateData::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetLaunchTemplateData::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::GetLaunchTemplateData::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::GetLaunchTemplateData::set_instance_id): <p>The ID of the instance.</p>
    /// - On success, responds with [`GetLaunchTemplateDataOutput`](crate::output::GetLaunchTemplateDataOutput) with field(s):
    ///   - [`launch_template_data(Option<ResponseLaunchTemplateData>)`](crate::output::GetLaunchTemplateDataOutput::launch_template_data): <p>The instance data.</p>
    /// - On failure, responds with [`SdkError<GetLaunchTemplateDataError>`](crate::error::GetLaunchTemplateDataError)
    pub fn get_launch_template_data(&self) -> fluent_builders::GetLaunchTemplateData {
        fluent_builders::GetLaunchTemplateData::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetManagedPrefixListAssociations`](crate::client::fluent_builders::GetManagedPrefixListAssociations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetManagedPrefixListAssociations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetManagedPrefixListAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetManagedPrefixListAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::GetManagedPrefixListAssociations::prefix_list_id) / [`set_prefix_list_id(Option<String>)`](crate::client::fluent_builders::GetManagedPrefixListAssociations::set_prefix_list_id): <p>The ID of the prefix list.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetManagedPrefixListAssociations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetManagedPrefixListAssociations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetManagedPrefixListAssociations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetManagedPrefixListAssociations::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`GetManagedPrefixListAssociationsOutput`](crate::output::GetManagedPrefixListAssociationsOutput) with field(s):
    ///   - [`prefix_list_associations(Option<Vec<PrefixListAssociation>>)`](crate::output::GetManagedPrefixListAssociationsOutput::prefix_list_associations): <p>Information about the associations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetManagedPrefixListAssociationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetManagedPrefixListAssociationsError>`](crate::error::GetManagedPrefixListAssociationsError)
    pub fn get_managed_prefix_list_associations(
        &self,
    ) -> fluent_builders::GetManagedPrefixListAssociations {
        fluent_builders::GetManagedPrefixListAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetManagedPrefixListEntries`](crate::client::fluent_builders::GetManagedPrefixListEntries) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetManagedPrefixListEntries::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetManagedPrefixListEntries::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetManagedPrefixListEntries::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::GetManagedPrefixListEntries::prefix_list_id) / [`set_prefix_list_id(Option<String>)`](crate::client::fluent_builders::GetManagedPrefixListEntries::set_prefix_list_id): <p>The ID of the prefix list.</p>
    ///   - [`target_version(i64)`](crate::client::fluent_builders::GetManagedPrefixListEntries::target_version) / [`set_target_version(Option<i64>)`](crate::client::fluent_builders::GetManagedPrefixListEntries::set_target_version): <p>The version of the prefix list for which to return the entries. The default is the current version.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetManagedPrefixListEntries::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetManagedPrefixListEntries::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetManagedPrefixListEntries::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetManagedPrefixListEntries::set_next_token): <p>The token for the next page of results.</p>
    /// - On success, responds with [`GetManagedPrefixListEntriesOutput`](crate::output::GetManagedPrefixListEntriesOutput) with field(s):
    ///   - [`entries(Option<Vec<PrefixListEntry>>)`](crate::output::GetManagedPrefixListEntriesOutput::entries): <p>Information about the prefix list entries.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetManagedPrefixListEntriesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetManagedPrefixListEntriesError>`](crate::error::GetManagedPrefixListEntriesError)
    pub fn get_managed_prefix_list_entries(&self) -> fluent_builders::GetManagedPrefixListEntries {
        fluent_builders::GetManagedPrefixListEntries::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetNetworkInsightsAccessScopeAnalysisFindings`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_access_scope_analysis_id(impl Into<String>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::network_insights_access_scope_analysis_id) / [`set_network_insights_access_scope_analysis_id(Option<String>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::set_network_insights_access_scope_analysis_id): <p>The ID of the Network Access Scope analysis.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetNetworkInsightsAccessScopeAnalysisFindingsOutput`](crate::output::GetNetworkInsightsAccessScopeAnalysisFindingsOutput) with field(s):
    ///   - [`network_insights_access_scope_analysis_id(Option<String>)`](crate::output::GetNetworkInsightsAccessScopeAnalysisFindingsOutput::network_insights_access_scope_analysis_id): <p>The ID of the Network Access Scope analysis.</p>
    ///   - [`analysis_status(Option<AnalysisStatus>)`](crate::output::GetNetworkInsightsAccessScopeAnalysisFindingsOutput::analysis_status): <p>The status of Network Access Scope Analysis.</p>
    ///   - [`analysis_findings(Option<Vec<AccessScopeAnalysisFinding>>)`](crate::output::GetNetworkInsightsAccessScopeAnalysisFindingsOutput::analysis_findings): <p>The findings associated with Network Access Scope Analysis.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetNetworkInsightsAccessScopeAnalysisFindingsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetNetworkInsightsAccessScopeAnalysisFindingsError>`](crate::error::GetNetworkInsightsAccessScopeAnalysisFindingsError)
    pub fn get_network_insights_access_scope_analysis_findings(
        &self,
    ) -> fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings {
        fluent_builders::GetNetworkInsightsAccessScopeAnalysisFindings::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetNetworkInsightsAccessScopeContent`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeContent) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_access_scope_id(impl Into<String>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeContent::network_insights_access_scope_id) / [`set_network_insights_access_scope_id(Option<String>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeContent::set_network_insights_access_scope_id): <p>The ID of the Network Access Scope.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeContent::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetNetworkInsightsAccessScopeContent::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetNetworkInsightsAccessScopeContentOutput`](crate::output::GetNetworkInsightsAccessScopeContentOutput) with field(s):
    ///   - [`network_insights_access_scope_content(Option<NetworkInsightsAccessScopeContent>)`](crate::output::GetNetworkInsightsAccessScopeContentOutput::network_insights_access_scope_content): <p>The Network Access Scope content.</p>
    /// - On failure, responds with [`SdkError<GetNetworkInsightsAccessScopeContentError>`](crate::error::GetNetworkInsightsAccessScopeContentError)
    pub fn get_network_insights_access_scope_content(
        &self,
    ) -> fluent_builders::GetNetworkInsightsAccessScopeContent {
        fluent_builders::GetNetworkInsightsAccessScopeContent::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetPasswordData`](crate::client::fluent_builders::GetPasswordData) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::GetPasswordData::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::GetPasswordData::set_instance_id): <p>The ID of the Windows instance.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetPasswordData::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetPasswordData::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetPasswordDataOutput`](crate::output::GetPasswordDataOutput) with field(s):
    ///   - [`instance_id(Option<String>)`](crate::output::GetPasswordDataOutput::instance_id): <p>The ID of the Windows instance.</p>
    ///   - [`password_data(Option<String>)`](crate::output::GetPasswordDataOutput::password_data): <p>The password of the instance. Returns an empty string if the password is not available.</p>
    ///   - [`timestamp(Option<DateTime>)`](crate::output::GetPasswordDataOutput::timestamp): <p>The time the data was last updated.</p>
    /// - On failure, responds with [`SdkError<GetPasswordDataError>`](crate::error::GetPasswordDataError)
    pub fn get_password_data(&self) -> fluent_builders::GetPasswordData {
        fluent_builders::GetPasswordData::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetReservedInstancesExchangeQuote`](crate::client::fluent_builders::GetReservedInstancesExchangeQuote) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetReservedInstancesExchangeQuote::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetReservedInstancesExchangeQuote::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`reserved_instance_ids(Vec<String>)`](crate::client::fluent_builders::GetReservedInstancesExchangeQuote::reserved_instance_ids) / [`set_reserved_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::GetReservedInstancesExchangeQuote::set_reserved_instance_ids): <p>The IDs of the Convertible Reserved Instances to exchange.</p>
    ///   - [`target_configurations(Vec<TargetConfigurationRequest>)`](crate::client::fluent_builders::GetReservedInstancesExchangeQuote::target_configurations) / [`set_target_configurations(Option<Vec<TargetConfigurationRequest>>)`](crate::client::fluent_builders::GetReservedInstancesExchangeQuote::set_target_configurations): <p>The configuration of the target Convertible Reserved Instance to exchange for your current Convertible Reserved Instances.</p>
    /// - On success, responds with [`GetReservedInstancesExchangeQuoteOutput`](crate::output::GetReservedInstancesExchangeQuoteOutput) with field(s):
    ///   - [`currency_code(Option<String>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::currency_code): <p>The currency of the transaction.</p>
    ///   - [`is_valid_exchange(Option<bool>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::is_valid_exchange): <p>If <code>true</code>, the exchange is valid. If <code>false</code>, the exchange cannot be completed.</p>
    ///   - [`output_reserved_instances_will_expire_at(Option<DateTime>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::output_reserved_instances_will_expire_at): <p>The new end date of the reservation term.</p>
    ///   - [`payment_due(Option<String>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::payment_due): <p>The total true upfront charge for the exchange.</p>
    ///   - [`reserved_instance_value_rollup(Option<ReservationValue>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::reserved_instance_value_rollup): <p>The cost associated with the Reserved Instance.</p>
    ///   - [`reserved_instance_value_set(Option<Vec<ReservedInstanceReservationValue>>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::reserved_instance_value_set): <p>The configuration of your Convertible Reserved Instances.</p>
    ///   - [`target_configuration_value_rollup(Option<ReservationValue>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::target_configuration_value_rollup): <p>The cost associated with the Reserved Instance.</p>
    ///   - [`target_configuration_value_set(Option<Vec<TargetReservationValue>>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::target_configuration_value_set): <p>The values of the target Convertible Reserved Instances.</p>
    ///   - [`validation_failure_reason(Option<String>)`](crate::output::GetReservedInstancesExchangeQuoteOutput::validation_failure_reason): <p>Describes the reason why the exchange cannot be completed.</p>
    /// - On failure, responds with [`SdkError<GetReservedInstancesExchangeQuoteError>`](crate::error::GetReservedInstancesExchangeQuoteError)
    pub fn get_reserved_instances_exchange_quote(
        &self,
    ) -> fluent_builders::GetReservedInstancesExchangeQuote {
        fluent_builders::GetReservedInstancesExchangeQuote::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetSerialConsoleAccessStatus`](crate::client::fluent_builders::GetSerialConsoleAccessStatus) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetSerialConsoleAccessStatus::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetSerialConsoleAccessStatus::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetSerialConsoleAccessStatusOutput`](crate::output::GetSerialConsoleAccessStatusOutput) with field(s):
    ///   - [`serial_console_access_enabled(Option<bool>)`](crate::output::GetSerialConsoleAccessStatusOutput::serial_console_access_enabled): <p>If <code>true</code>, access to the EC2 serial console of all instances is enabled for your account. If <code>false</code>, access to the EC2 serial console of all instances is disabled for your account.</p>
    /// - On failure, responds with [`SdkError<GetSerialConsoleAccessStatusError>`](crate::error::GetSerialConsoleAccessStatusError)
    pub fn get_serial_console_access_status(
        &self,
    ) -> fluent_builders::GetSerialConsoleAccessStatus {
        fluent_builders::GetSerialConsoleAccessStatus::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetSpotPlacementScores`](crate::client::fluent_builders::GetSpotPlacementScores) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetSpotPlacementScores::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_types(Vec<String>)`](crate::client::fluent_builders::GetSpotPlacementScores::instance_types) / [`set_instance_types(Option<Vec<String>>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_instance_types): <p>The instance types. We recommend that you specify at least three instance types. If you specify one or two instance types, or specify variations of a single instance type (for example, an <code>m3.xlarge</code> with and without instance storage), the returned placement score will always be low. </p>  <p>If you specify <code>InstanceTypes</code>, you can't specify <code>InstanceRequirementsWithMetadata</code>.</p>
    ///   - [`target_capacity(i32)`](crate::client::fluent_builders::GetSpotPlacementScores::target_capacity) / [`set_target_capacity(Option<i32>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_target_capacity): <p>The target capacity.</p>
    ///   - [`target_capacity_unit_type(TargetCapacityUnitType)`](crate::client::fluent_builders::GetSpotPlacementScores::target_capacity_unit_type) / [`set_target_capacity_unit_type(Option<TargetCapacityUnitType>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_target_capacity_unit_type): <p>The unit for the target capacity.</p>  <p>Default: <code>units</code> (translates to number of instances)</p>
    ///   - [`single_availability_zone(bool)`](crate::client::fluent_builders::GetSpotPlacementScores::single_availability_zone) / [`set_single_availability_zone(Option<bool>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_single_availability_zone): <p>Specify <code>true</code> so that the response returns a list of scored Availability Zones. Otherwise, the response returns a list of scored Regions.</p>  <p>A list of scored Availability Zones is useful if you want to launch all of your Spot capacity into a single Availability Zone.</p>
    ///   - [`region_names(Vec<String>)`](crate::client::fluent_builders::GetSpotPlacementScores::region_names) / [`set_region_names(Option<Vec<String>>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_region_names): <p>The Regions used to narrow down the list of Regions to be scored. Enter the Region code, for example, <code>us-east-1</code>.</p>
    ///   - [`instance_requirements_with_metadata(InstanceRequirementsWithMetadataRequest)`](crate::client::fluent_builders::GetSpotPlacementScores::instance_requirements_with_metadata) / [`set_instance_requirements_with_metadata(Option<InstanceRequirementsWithMetadataRequest>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_instance_requirements_with_metadata): <p>The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with those attributes.</p>  <p>If you specify <code>InstanceRequirementsWithMetadata</code>, you can't specify <code>InstanceTypes</code>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetSpotPlacementScores::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetSpotPlacementScores::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_max_results): <p>The maximum number of results to return in a single call. Specify a value between 1 and
 1000. The default value is 1000. To retrieve the remaining results, make another call with
 the returned <code>NextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetSpotPlacementScores::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetSpotPlacementScores::set_next_token): <p>The token for the next set of results.</p>
    /// - On success, responds with [`GetSpotPlacementScoresOutput`](crate::output::GetSpotPlacementScoresOutput) with field(s):
    ///   - [`spot_placement_scores(Option<Vec<SpotPlacementScore>>)`](crate::output::GetSpotPlacementScoresOutput::spot_placement_scores): <p>The Spot placement score for the top 10 Regions or Availability Zones, scored on a scale from 1 to 10. Each score
 reflects how likely it is that each Region or Availability Zone will succeed at fulfilling the specified target capacity
 <i>at the time of the Spot placement score request</i>. A score of <code>10</code> means that your Spot capacity request is highly likely to succeed in that Region or Availability Zone. </p>  <p>If you request a Spot placement score for Regions, a high score assumes that your fleet request will be configured to use all Availability Zones and the <code>capacity-optimized</code> allocation strategy. If you request a Spot placement score for Availability Zones, a high score assumes that your fleet request will be configured to use a single Availability Zone and the <code>capacity-optimized</code> allocation strategy.</p>  <p>Different
 Regions or Availability Zones might return the same score.</p> <note>   <p>The Spot placement score serves as a recommendation only. No score guarantees that your Spot request will be fully or partially fulfilled.</p>  </note>
    ///   - [`next_token(Option<String>)`](crate::output::GetSpotPlacementScoresOutput::next_token): <p>The token for the next set of results.</p>
    /// - On failure, responds with [`SdkError<GetSpotPlacementScoresError>`](crate::error::GetSpotPlacementScoresError)
    pub fn get_spot_placement_scores(&self) -> fluent_builders::GetSpotPlacementScores {
        fluent_builders::GetSpotPlacementScores::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetSubnetCidrReservations`](crate::client::fluent_builders::GetSubnetCidrReservations) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetSubnetCidrReservations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetSubnetCidrReservations::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>reservationType</code> - The type of reservation (<code>prefix</code> | <code>explicit</code>).</p> </li>   <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>   <li> <p> <code>tag</code>:<key>      - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key      <code>Owner</code> and the value      <code>TeamA</code>, specify      <code>tag:Owner</code> for the filter name and      <code>TeamA</code> for the filter value.    </key></p> </li>   <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>  </ul>
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::GetSubnetCidrReservations::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::GetSubnetCidrReservations::set_subnet_id): <p>The ID of the subnet.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetSubnetCidrReservations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetSubnetCidrReservations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetSubnetCidrReservations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetSubnetCidrReservations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetSubnetCidrReservations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetSubnetCidrReservations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    /// - On success, responds with [`GetSubnetCidrReservationsOutput`](crate::output::GetSubnetCidrReservationsOutput) with field(s):
    ///   - [`subnet_ipv4_cidr_reservations(Option<Vec<SubnetCidrReservation>>)`](crate::output::GetSubnetCidrReservationsOutput::subnet_ipv4_cidr_reservations): <p>Information about the IPv4 subnet CIDR reservations.</p>
    ///   - [`subnet_ipv6_cidr_reservations(Option<Vec<SubnetCidrReservation>>)`](crate::output::GetSubnetCidrReservationsOutput::subnet_ipv6_cidr_reservations): <p>Information about the IPv6 subnet CIDR reservations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetSubnetCidrReservationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetSubnetCidrReservationsError>`](crate::error::GetSubnetCidrReservationsError)
    pub fn get_subnet_cidr_reservations(&self) -> fluent_builders::GetSubnetCidrReservations {
        fluent_builders::GetSubnetCidrReservations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTransitGatewayAttachmentPropagations`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>transit-gateway-route-table-id</code> - The ID of the transit gateway route table.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetTransitGatewayAttachmentPropagations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetTransitGatewayAttachmentPropagationsOutput`](crate::output::GetTransitGatewayAttachmentPropagationsOutput) with field(s):
    ///   - [`transit_gateway_attachment_propagations(Option<Vec<TransitGatewayAttachmentPropagation>>)`](crate::output::GetTransitGatewayAttachmentPropagationsOutput::transit_gateway_attachment_propagations): <p>Information about the propagation route tables.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetTransitGatewayAttachmentPropagationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetTransitGatewayAttachmentPropagationsError>`](crate::error::GetTransitGatewayAttachmentPropagationsError)
    pub fn get_transit_gateway_attachment_propagations(
        &self,
    ) -> fluent_builders::GetTransitGatewayAttachmentPropagations {
        fluent_builders::GetTransitGatewayAttachmentPropagations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTransitGatewayMulticastDomainAssociations`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>   <li> <p> <code>resource-type</code> - The type of resource. The valid value is: <code>vpc</code>.</p> </li>   <li> <p> <code>state</code> - The state of the subnet association. Valid values are <code>associated</code> | <code>associating</code> | <code>disassociated</code> | <code>disassociating</code>.</p> </li>   <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>   <li> <p> <code>transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetTransitGatewayMulticastDomainAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetTransitGatewayMulticastDomainAssociationsOutput`](crate::output::GetTransitGatewayMulticastDomainAssociationsOutput) with field(s):
    ///   - [`multicast_domain_associations(Option<Vec<TransitGatewayMulticastDomainAssociation>>)`](crate::output::GetTransitGatewayMulticastDomainAssociationsOutput::multicast_domain_associations): <p>Information about the multicast domain associations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetTransitGatewayMulticastDomainAssociationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetTransitGatewayMulticastDomainAssociationsError>`](crate::error::GetTransitGatewayMulticastDomainAssociationsError)
    pub fn get_transit_gateway_multicast_domain_associations(
        &self,
    ) -> fluent_builders::GetTransitGatewayMulticastDomainAssociations {
        fluent_builders::GetTransitGatewayMulticastDomainAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTransitGatewayPolicyTableAssociations`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_policy_table_id(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::transit_gateway_policy_table_id) / [`set_transit_gateway_policy_table_id(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::set_transit_gateway_policy_table_id): <p>The ID of the transit gateway policy table.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::set_filters): <p>The filters associated with the transit gateway policy table.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetTransitGatewayPolicyTableAssociationsOutput`](crate::output::GetTransitGatewayPolicyTableAssociationsOutput) with field(s):
    ///   - [`associations(Option<Vec<TransitGatewayPolicyTableAssociation>>)`](crate::output::GetTransitGatewayPolicyTableAssociationsOutput::associations): <p>Returns details about the transit gateway policy table association.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetTransitGatewayPolicyTableAssociationsOutput::next_token): <p>The token for the next page of results.</p>
    /// - On failure, responds with [`SdkError<GetTransitGatewayPolicyTableAssociationsError>`](crate::error::GetTransitGatewayPolicyTableAssociationsError)
    pub fn get_transit_gateway_policy_table_associations(
        &self,
    ) -> fluent_builders::GetTransitGatewayPolicyTableAssociations {
        fluent_builders::GetTransitGatewayPolicyTableAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTransitGatewayPolicyTableEntries`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_policy_table_id(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::transit_gateway_policy_table_id) / [`set_transit_gateway_policy_table_id(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::set_transit_gateway_policy_table_id): <p>The ID of the transit gateway policy table.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::set_filters): <p>The filters associated with the transit gateway policy table.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetTransitGatewayPolicyTableEntries::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetTransitGatewayPolicyTableEntriesOutput`](crate::output::GetTransitGatewayPolicyTableEntriesOutput) with field(s):
    ///   - [`transit_gateway_policy_table_entries(Option<Vec<TransitGatewayPolicyTableEntry>>)`](crate::output::GetTransitGatewayPolicyTableEntriesOutput::transit_gateway_policy_table_entries): <p>The entries for the transit gateway policy table.</p>
    /// - On failure, responds with [`SdkError<GetTransitGatewayPolicyTableEntriesError>`](crate::error::GetTransitGatewayPolicyTableEntriesError)
    pub fn get_transit_gateway_policy_table_entries(
        &self,
    ) -> fluent_builders::GetTransitGatewayPolicyTableEntries {
        fluent_builders::GetTransitGatewayPolicyTableEntries::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTransitGatewayPrefixListReferences`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>attachment.resource-id</code> - The ID of the resource for the attachment.</p> </li>   <li> <p> <code>attachment.resource-type</code> - The type of resource for the attachment. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code>.</p> </li>   <li> <p> <code>attachment.transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>   <li> <p> <code>is-blackhole</code> - Whether traffic matching the route is blocked (<code>true</code> | <code>false</code>).</p> </li>   <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>   <li> <p> <code>prefix-list-owner-id</code> - The ID of the owner of the prefix list.</p> </li>   <li> <p> <code>state</code> - The state of the prefix list reference (<code>pending</code> | <code>available</code> | <code>modifying</code> | <code>deleting</code>).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetTransitGatewayPrefixListReferences::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetTransitGatewayPrefixListReferencesOutput`](crate::output::GetTransitGatewayPrefixListReferencesOutput) with field(s):
    ///   - [`transit_gateway_prefix_list_references(Option<Vec<TransitGatewayPrefixListReference>>)`](crate::output::GetTransitGatewayPrefixListReferencesOutput::transit_gateway_prefix_list_references): <p>Information about the prefix list references.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetTransitGatewayPrefixListReferencesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetTransitGatewayPrefixListReferencesError>`](crate::error::GetTransitGatewayPrefixListReferencesError)
    pub fn get_transit_gateway_prefix_list_references(
        &self,
    ) -> fluent_builders::GetTransitGatewayPrefixListReferences {
        fluent_builders::GetTransitGatewayPrefixListReferences::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTransitGatewayRouteTableAssociations`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>   <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>   <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetTransitGatewayRouteTableAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetTransitGatewayRouteTableAssociationsOutput`](crate::output::GetTransitGatewayRouteTableAssociationsOutput) with field(s):
    ///   - [`associations(Option<Vec<TransitGatewayRouteTableAssociation>>)`](crate::output::GetTransitGatewayRouteTableAssociationsOutput::associations): <p>Information about the associations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetTransitGatewayRouteTableAssociationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetTransitGatewayRouteTableAssociationsError>`](crate::error::GetTransitGatewayRouteTableAssociationsError)
    pub fn get_transit_gateway_route_table_associations(
        &self,
    ) -> fluent_builders::GetTransitGatewayRouteTableAssociations {
        fluent_builders::GetTransitGatewayRouteTableAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetTransitGatewayRouteTablePropagations`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>   <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>   <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetTransitGatewayRouteTablePropagations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetTransitGatewayRouteTablePropagationsOutput`](crate::output::GetTransitGatewayRouteTablePropagationsOutput) with field(s):
    ///   - [`transit_gateway_route_table_propagations(Option<Vec<TransitGatewayRouteTablePropagation>>)`](crate::output::GetTransitGatewayRouteTablePropagationsOutput::transit_gateway_route_table_propagations): <p>Information about the route table propagations.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetTransitGatewayRouteTablePropagationsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetTransitGatewayRouteTablePropagationsError>`](crate::error::GetTransitGatewayRouteTablePropagationsError)
    pub fn get_transit_gateway_route_table_propagations(
        &self,
    ) -> fluent_builders::GetTransitGatewayRouteTablePropagations {
        fluent_builders::GetTransitGatewayRouteTablePropagations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetVerifiedAccessEndpointPolicy`](crate::client::fluent_builders::GetVerifiedAccessEndpointPolicy) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::GetVerifiedAccessEndpointPolicy::verified_access_endpoint_id) / [`set_verified_access_endpoint_id(Option<String>)`](crate::client::fluent_builders::GetVerifiedAccessEndpointPolicy::set_verified_access_endpoint_id): <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetVerifiedAccessEndpointPolicy::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetVerifiedAccessEndpointPolicy::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetVerifiedAccessEndpointPolicyOutput`](crate::output::GetVerifiedAccessEndpointPolicyOutput) with field(s):
    ///   - [`policy_enabled(Option<bool>)`](crate::output::GetVerifiedAccessEndpointPolicyOutput::policy_enabled): <p>The status of the Verified Access policy.</p>
    ///   - [`policy_document(Option<String>)`](crate::output::GetVerifiedAccessEndpointPolicyOutput::policy_document): <p>The Amazon Web Services Verified Access policy document.</p>
    /// - On failure, responds with [`SdkError<GetVerifiedAccessEndpointPolicyError>`](crate::error::GetVerifiedAccessEndpointPolicyError)
    pub fn get_verified_access_endpoint_policy(
        &self,
    ) -> fluent_builders::GetVerifiedAccessEndpointPolicy {
        fluent_builders::GetVerifiedAccessEndpointPolicy::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetVerifiedAccessGroupPolicy`](crate::client::fluent_builders::GetVerifiedAccessGroupPolicy) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_group_id(impl Into<String>)`](crate::client::fluent_builders::GetVerifiedAccessGroupPolicy::verified_access_group_id) / [`set_verified_access_group_id(Option<String>)`](crate::client::fluent_builders::GetVerifiedAccessGroupPolicy::set_verified_access_group_id): <p>The ID of the Amazon Web Services Verified Access group.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetVerifiedAccessGroupPolicy::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetVerifiedAccessGroupPolicy::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetVerifiedAccessGroupPolicyOutput`](crate::output::GetVerifiedAccessGroupPolicyOutput) with field(s):
    ///   - [`policy_enabled(Option<bool>)`](crate::output::GetVerifiedAccessGroupPolicyOutput::policy_enabled): <p>The status of the Verified Access policy.</p>
    ///   - [`policy_document(Option<String>)`](crate::output::GetVerifiedAccessGroupPolicyOutput::policy_document): <p>The Amazon Web Services Verified Access policy document.</p>
    /// - On failure, responds with [`SdkError<GetVerifiedAccessGroupPolicyError>`](crate::error::GetVerifiedAccessGroupPolicyError)
    pub fn get_verified_access_group_policy(
        &self,
    ) -> fluent_builders::GetVerifiedAccessGroupPolicy {
        fluent_builders::GetVerifiedAccessGroupPolicy::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetVpnConnectionDeviceSampleConfiguration`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpn_connection_id(impl Into<String>)`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration::vpn_connection_id) / [`set_vpn_connection_id(Option<String>)`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration::set_vpn_connection_id): <p>The <code>VpnConnectionId</code> specifies the Site-to-Site VPN connection used for the sample configuration.</p>
    ///   - [`vpn_connection_device_type_id(impl Into<String>)`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration::vpn_connection_device_type_id) / [`set_vpn_connection_device_type_id(Option<String>)`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration::set_vpn_connection_device_type_id): <p>Device identifier provided by the <code>GetVpnConnectionDeviceTypes</code> API.</p>
    ///   - [`internet_key_exchange_version(impl Into<String>)`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration::internet_key_exchange_version) / [`set_internet_key_exchange_version(Option<String>)`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration::set_internet_key_exchange_version): <p>The IKE version to be used in the sample configuration file for your customer gateway device. You can specify one of the following versions: <code>ikev1</code> or <code>ikev2</code>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetVpnConnectionDeviceSampleConfiguration::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetVpnConnectionDeviceSampleConfigurationOutput`](crate::output::GetVpnConnectionDeviceSampleConfigurationOutput) with field(s):
    ///   - [`vpn_connection_device_sample_configuration(Option<String>)`](crate::output::GetVpnConnectionDeviceSampleConfigurationOutput::vpn_connection_device_sample_configuration): <p>Sample configuration file for the specified customer gateway device.</p>
    /// - On failure, responds with [`SdkError<GetVpnConnectionDeviceSampleConfigurationError>`](crate::error::GetVpnConnectionDeviceSampleConfigurationError)
    pub fn get_vpn_connection_device_sample_configuration(
        &self,
    ) -> fluent_builders::GetVpnConnectionDeviceSampleConfiguration {
        fluent_builders::GetVpnConnectionDeviceSampleConfiguration::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetVpnConnectionDeviceTypes`](crate::client::fluent_builders::GetVpnConnectionDeviceTypes) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::GetVpnConnectionDeviceTypes::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::GetVpnConnectionDeviceTypes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::GetVpnConnectionDeviceTypes::set_max_results): <p>The maximum number of results returned by <code>GetVpnConnectionDeviceTypes</code> in paginated output. When this parameter is used, <code>GetVpnConnectionDeviceTypes</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>GetVpnConnectionDeviceTypes</code> request with the returned <code>NextToken</code> value. This value can be between 200 and 1000. If this parameter is not used, then <code>GetVpnConnectionDeviceTypes</code> returns all results.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::GetVpnConnectionDeviceTypes::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::GetVpnConnectionDeviceTypes::set_next_token): <p>The <code>NextToken</code> value returned from a previous paginated <code>GetVpnConnectionDeviceTypes</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is null when there are no more results to return. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::GetVpnConnectionDeviceTypes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::GetVpnConnectionDeviceTypes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`GetVpnConnectionDeviceTypesOutput`](crate::output::GetVpnConnectionDeviceTypesOutput) with field(s):
    ///   - [`vpn_connection_device_types(Option<Vec<VpnConnectionDeviceType>>)`](crate::output::GetVpnConnectionDeviceTypesOutput::vpn_connection_device_types): <p>List of customer gateway devices that have a sample configuration file available for use.</p>
    ///   - [`next_token(Option<String>)`](crate::output::GetVpnConnectionDeviceTypesOutput::next_token): <p>The <code>NextToken</code> value to include in a future <code>GetVpnConnectionDeviceTypes</code> request. When the results of a <code>GetVpnConnectionDeviceTypes</code> request exceed <code>MaxResults</code>, this value can be used to retrieve the next page of results. This value is null when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<GetVpnConnectionDeviceTypesError>`](crate::error::GetVpnConnectionDeviceTypesError)
    pub fn get_vpn_connection_device_types(&self) -> fluent_builders::GetVpnConnectionDeviceTypes {
        fluent_builders::GetVpnConnectionDeviceTypes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ImportClientVpnClientCertificateRevocationList`](crate::client::fluent_builders::ImportClientVpnClientCertificateRevocationList) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ImportClientVpnClientCertificateRevocationList::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::ImportClientVpnClientCertificateRevocationList::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint to which the client certificate revocation list applies.</p>
    ///   - [`certificate_revocation_list(impl Into<String>)`](crate::client::fluent_builders::ImportClientVpnClientCertificateRevocationList::certificate_revocation_list) / [`set_certificate_revocation_list(Option<String>)`](crate::client::fluent_builders::ImportClientVpnClientCertificateRevocationList::set_certificate_revocation_list): <p>The client certificate revocation list file. For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate">Generate a Client Certificate Revocation List</a> in the <i>Client VPN Administrator Guide</i>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ImportClientVpnClientCertificateRevocationList::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ImportClientVpnClientCertificateRevocationList::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ImportClientVpnClientCertificateRevocationListOutput`](crate::output::ImportClientVpnClientCertificateRevocationListOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ImportClientVpnClientCertificateRevocationListOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ImportClientVpnClientCertificateRevocationListError>`](crate::error::ImportClientVpnClientCertificateRevocationListError)
    pub fn import_client_vpn_client_certificate_revocation_list(
        &self,
    ) -> fluent_builders::ImportClientVpnClientCertificateRevocationList {
        fluent_builders::ImportClientVpnClientCertificateRevocationList::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ImportImage`](crate::client::fluent_builders::ImportImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`architecture(impl Into<String>)`](crate::client::fluent_builders::ImportImage::architecture) / [`set_architecture(Option<String>)`](crate::client::fluent_builders::ImportImage::set_architecture): <p>The architecture of the virtual machine.</p>  <p>Valid values: <code>i386</code> | <code>x86_64</code> </p>
    ///   - [`client_data(ClientData)`](crate::client::fluent_builders::ImportImage::client_data) / [`set_client_data(Option<ClientData>)`](crate::client::fluent_builders::ImportImage::set_client_data): <p>The client-specific data.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ImportImage::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ImportImage::set_client_token): <p>The token to enable idempotency for VM import requests.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ImportImage::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ImportImage::set_description): <p>A description string for the import image task.</p>
    ///   - [`disk_containers(Vec<ImageDiskContainer>)`](crate::client::fluent_builders::ImportImage::disk_containers) / [`set_disk_containers(Option<Vec<ImageDiskContainer>>)`](crate::client::fluent_builders::ImportImage::set_disk_containers): <p>Information about the disk containers.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ImportImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ImportImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`encrypted(bool)`](crate::client::fluent_builders::ImportImage::encrypted) / [`set_encrypted(Option<bool>)`](crate::client::fluent_builders::ImportImage::set_encrypted): <p>Specifies whether the destination AMI of the imported image should be encrypted. The default KMS key for EBS is used unless you specify a non-default KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS Encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`hypervisor(impl Into<String>)`](crate::client::fluent_builders::ImportImage::hypervisor) / [`set_hypervisor(Option<String>)`](crate::client::fluent_builders::ImportImage::set_hypervisor): <p>The target hypervisor platform.</p>  <p>Valid values: <code>xen</code> </p>
    ///   - [`kms_key_id(impl Into<String>)`](crate::client::fluent_builders::ImportImage::kms_key_id) / [`set_kms_key_id(Option<String>)`](crate::client::fluent_builders::ImportImage::set_kms_key_id): <p>An identifier for the symmetric KMS key to use when creating the encrypted AMI. This parameter is only required if you want to use a non-default KMS key; if this parameter is not specified, the default KMS key for EBS is used. If a <code>KmsKeyId</code> is specified, the <code>Encrypted</code> flag must also be set. </p>  <p>The KMS key identifier may be provided in any of the following formats: </p>  <ul>   <li> <p>Key ID</p> </li>   <li> <p>Key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li>   <li> <p>ARN using key ID. The ID ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>key</code> namespace, and then the key ID. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li>   <li> <p>ARN using key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>. </p> </li>  </ul>  <p>Amazon Web Services parses <code>KmsKeyId</code> asynchronously, meaning that the action you call may appear to complete even though you provided an invalid identifier. This action will eventually report failure. </p>  <p>The specified KMS key must exist in the Region that the AMI is being copied to.</p>  <p>Amazon EBS does not support asymmetric KMS keys.</p>
    ///   - [`license_type(impl Into<String>)`](crate::client::fluent_builders::ImportImage::license_type) / [`set_license_type(Option<String>)`](crate::client::fluent_builders::ImportImage::set_license_type): <p>The license type to be used for the Amazon Machine Image (AMI) after importing.</p>  <p>Specify <code>AWS</code> to replace the source-system license with an Amazon Web Services license or <code>BYOL</code> to retain the source-system license. Leaving this parameter undefined is the same as choosing <code>AWS</code> when importing a Windows Server operating system, and the same as choosing <code>BYOL</code> when importing a Windows client operating system (such as Windows 10) or a Linux operating system.</p>  <p>To use <code>BYOL</code>, you must have existing licenses with rights to use these licenses in a third party cloud, such as Amazon Web Services. For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image">Prerequisites</a> in the VM Import/Export User Guide.</p>
    ///   - [`platform(impl Into<String>)`](crate::client::fluent_builders::ImportImage::platform) / [`set_platform(Option<String>)`](crate::client::fluent_builders::ImportImage::set_platform): <p>The operating system of the virtual machine.</p>  <p>Valid values: <code>Windows</code> | <code>Linux</code> </p>
    ///   - [`role_name(impl Into<String>)`](crate::client::fluent_builders::ImportImage::role_name) / [`set_role_name(Option<String>)`](crate::client::fluent_builders::ImportImage::set_role_name): <p>The name of the role to use when not using the default role, 'vmimport'.</p>
    ///   - [`license_specifications(Vec<ImportImageLicenseConfigurationRequest>)`](crate::client::fluent_builders::ImportImage::license_specifications) / [`set_license_specifications(Option<Vec<ImportImageLicenseConfigurationRequest>>)`](crate::client::fluent_builders::ImportImage::set_license_specifications): <p>The ARNs of the license configurations.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::ImportImage::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::ImportImage::set_tag_specifications): <p>The tags to apply to the import image task during creation.</p>
    ///   - [`usage_operation(impl Into<String>)`](crate::client::fluent_builders::ImportImage::usage_operation) / [`set_usage_operation(Option<String>)`](crate::client::fluent_builders::ImportImage::set_usage_operation): <p>The usage operation value. For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#prerequisites">Licensing options</a> in the <i>VM Import/Export User Guide</i>.</p>
    ///   - [`boot_mode(BootModeValues)`](crate::client::fluent_builders::ImportImage::boot_mode) / [`set_boot_mode(Option<BootModeValues>)`](crate::client::fluent_builders::ImportImage::set_boot_mode): <p>The boot mode of the virtual machine.</p>
    /// - On success, responds with [`ImportImageOutput`](crate::output::ImportImageOutput) with field(s):
    ///   - [`architecture(Option<String>)`](crate::output::ImportImageOutput::architecture): <p>The architecture of the virtual machine.</p>
    ///   - [`description(Option<String>)`](crate::output::ImportImageOutput::description): <p>A description of the import task.</p>
    ///   - [`encrypted(Option<bool>)`](crate::output::ImportImageOutput::encrypted): <p>Indicates whether the AMI is encrypted.</p>
    ///   - [`hypervisor(Option<String>)`](crate::output::ImportImageOutput::hypervisor): <p>The target hypervisor of the import task.</p>
    ///   - [`image_id(Option<String>)`](crate::output::ImportImageOutput::image_id): <p>The ID of the Amazon Machine Image (AMI) created by the import task.</p>
    ///   - [`import_task_id(Option<String>)`](crate::output::ImportImageOutput::import_task_id): <p>The task ID of the import image task.</p>
    ///   - [`kms_key_id(Option<String>)`](crate::output::ImportImageOutput::kms_key_id): <p>The identifier for the symmetric KMS key that was used to create the encrypted AMI.</p>
    ///   - [`license_type(Option<String>)`](crate::output::ImportImageOutput::license_type): <p>The license type of the virtual machine.</p>
    ///   - [`platform(Option<String>)`](crate::output::ImportImageOutput::platform): <p>The operating system of the virtual machine.</p>
    ///   - [`progress(Option<String>)`](crate::output::ImportImageOutput::progress): <p>The progress of the task.</p>
    ///   - [`snapshot_details(Option<Vec<SnapshotDetail>>)`](crate::output::ImportImageOutput::snapshot_details): <p>Information about the snapshots.</p>
    ///   - [`status(Option<String>)`](crate::output::ImportImageOutput::status): <p>A brief status of the task.</p>
    ///   - [`status_message(Option<String>)`](crate::output::ImportImageOutput::status_message): <p>A detailed status message of the import task.</p>
    ///   - [`license_specifications(Option<Vec<ImportImageLicenseConfigurationResponse>>)`](crate::output::ImportImageOutput::license_specifications): <p>The ARNs of the license configurations.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::ImportImageOutput::tags): <p>Any tags assigned to the import image task.</p>
    ///   - [`usage_operation(Option<String>)`](crate::output::ImportImageOutput::usage_operation): <p>The usage operation value.</p>
    /// - On failure, responds with [`SdkError<ImportImageError>`](crate::error::ImportImageError)
    pub fn import_image(&self) -> fluent_builders::ImportImage {
        fluent_builders::ImportImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ImportInstance`](crate::client::fluent_builders::ImportInstance) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ImportInstance::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ImportInstance::set_description): <p>A description for the instance being imported.</p>
    ///   - [`disk_images(Vec<DiskImage>)`](crate::client::fluent_builders::ImportInstance::disk_images) / [`set_disk_images(Option<Vec<DiskImage>>)`](crate::client::fluent_builders::ImportInstance::set_disk_images): <p>The disk image.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ImportInstance::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ImportInstance::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`launch_specification(ImportInstanceLaunchSpecification)`](crate::client::fluent_builders::ImportInstance::launch_specification) / [`set_launch_specification(Option<ImportInstanceLaunchSpecification>)`](crate::client::fluent_builders::ImportInstance::set_launch_specification): <p>The launch specification.</p>
    ///   - [`platform(PlatformValues)`](crate::client::fluent_builders::ImportInstance::platform) / [`set_platform(Option<PlatformValues>)`](crate::client::fluent_builders::ImportInstance::set_platform): <p>The instance operating system.</p>
    /// - On success, responds with [`ImportInstanceOutput`](crate::output::ImportInstanceOutput) with field(s):
    ///   - [`conversion_task(Option<ConversionTask>)`](crate::output::ImportInstanceOutput::conversion_task): <p>Information about the conversion task.</p>
    /// - On failure, responds with [`SdkError<ImportInstanceError>`](crate::error::ImportInstanceError)
    pub fn import_instance(&self) -> fluent_builders::ImportInstance {
        fluent_builders::ImportInstance::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ImportKeyPair`](crate::client::fluent_builders::ImportKeyPair) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ImportKeyPair::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ImportKeyPair::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`key_name(impl Into<String>)`](crate::client::fluent_builders::ImportKeyPair::key_name) / [`set_key_name(Option<String>)`](crate::client::fluent_builders::ImportKeyPair::set_key_name): <p>A unique name for the key pair.</p>
    ///   - [`public_key_material(Blob)`](crate::client::fluent_builders::ImportKeyPair::public_key_material) / [`set_public_key_material(Option<Blob>)`](crate::client::fluent_builders::ImportKeyPair::set_public_key_material): <p>The public key. For API calls, the text must be base64-encoded. For command line tools, base64 encoding is performed for you.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::ImportKeyPair::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::ImportKeyPair::set_tag_specifications): <p>The tags to apply to the imported key pair.</p>
    /// - On success, responds with [`ImportKeyPairOutput`](crate::output::ImportKeyPairOutput) with field(s):
    ///   - [`key_fingerprint(Option<String>)`](crate::output::ImportKeyPairOutput::key_fingerprint): <ul>   <li> <p>For RSA key pairs, the key fingerprint is the MD5 public key fingerprint as specified in section 4 of RFC 4716.</p> </li>   <li> <p>For ED25519 key pairs, the key fingerprint is the base64-encoded SHA-256 digest, which is the default for OpenSSH, starting with <a href="http://www.openssh.com/txt/release-6.8">OpenSSH 6.8</a>.</p> </li>  </ul>
    ///   - [`key_name(Option<String>)`](crate::output::ImportKeyPairOutput::key_name): <p>The key pair name that you provided.</p>
    ///   - [`key_pair_id(Option<String>)`](crate::output::ImportKeyPairOutput::key_pair_id): <p>The ID of the resulting key pair.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::ImportKeyPairOutput::tags): <p>The tags applied to the imported key pair.</p>
    /// - On failure, responds with [`SdkError<ImportKeyPairError>`](crate::error::ImportKeyPairError)
    pub fn import_key_pair(&self) -> fluent_builders::ImportKeyPair {
        fluent_builders::ImportKeyPair::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ImportSnapshot`](crate::client::fluent_builders::ImportSnapshot) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_data(ClientData)`](crate::client::fluent_builders::ImportSnapshot::client_data) / [`set_client_data(Option<ClientData>)`](crate::client::fluent_builders::ImportSnapshot::set_client_data): <p>The client-specific data.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ImportSnapshot::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ImportSnapshot::set_client_token): <p>Token to enable idempotency for VM import requests.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ImportSnapshot::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ImportSnapshot::set_description): <p>The description string for the import snapshot task.</p>
    ///   - [`disk_container(SnapshotDiskContainer)`](crate::client::fluent_builders::ImportSnapshot::disk_container) / [`set_disk_container(Option<SnapshotDiskContainer>)`](crate::client::fluent_builders::ImportSnapshot::set_disk_container): <p>Information about the disk container.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ImportSnapshot::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ImportSnapshot::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`encrypted(bool)`](crate::client::fluent_builders::ImportSnapshot::encrypted) / [`set_encrypted(Option<bool>)`](crate::client::fluent_builders::ImportSnapshot::set_encrypted): <p>Specifies whether the destination snapshot of the imported image should be encrypted. The default KMS key for EBS is used unless you specify a non-default KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS Encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`kms_key_id(impl Into<String>)`](crate::client::fluent_builders::ImportSnapshot::kms_key_id) / [`set_kms_key_id(Option<String>)`](crate::client::fluent_builders::ImportSnapshot::set_kms_key_id): <p>An identifier for the symmetric KMS key to use when creating the encrypted snapshot. This parameter is only required if you want to use a non-default KMS key; if this parameter is not specified, the default KMS key for EBS is used. If a <code>KmsKeyId</code> is specified, the <code>Encrypted</code> flag must also be set. </p>  <p>The KMS key identifier may be provided in any of the following formats: </p>  <ul>   <li> <p>Key ID</p> </li>   <li> <p>Key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li>   <li> <p>ARN using key ID. The ID ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>key</code> namespace, and then the key ID. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li>   <li> <p>ARN using key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>. </p> </li>  </ul>  <p>Amazon Web Services parses <code>KmsKeyId</code> asynchronously, meaning that the action you call may appear to complete even though you provided an invalid identifier. This action will eventually report failure. </p>  <p>The specified KMS key must exist in the Region that the snapshot is being copied to.</p>  <p>Amazon EBS does not support asymmetric KMS keys.</p>
    ///   - [`role_name(impl Into<String>)`](crate::client::fluent_builders::ImportSnapshot::role_name) / [`set_role_name(Option<String>)`](crate::client::fluent_builders::ImportSnapshot::set_role_name): <p>The name of the role to use when not using the default role, 'vmimport'.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::ImportSnapshot::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::ImportSnapshot::set_tag_specifications): <p>The tags to apply to the import snapshot task during creation.</p>
    /// - On success, responds with [`ImportSnapshotOutput`](crate::output::ImportSnapshotOutput) with field(s):
    ///   - [`description(Option<String>)`](crate::output::ImportSnapshotOutput::description): <p>A description of the import snapshot task.</p>
    ///   - [`import_task_id(Option<String>)`](crate::output::ImportSnapshotOutput::import_task_id): <p>The ID of the import snapshot task.</p>
    ///   - [`snapshot_task_detail(Option<SnapshotTaskDetail>)`](crate::output::ImportSnapshotOutput::snapshot_task_detail): <p>Information about the import snapshot task.</p>
    ///   - [`tags(Option<Vec<Tag>>)`](crate::output::ImportSnapshotOutput::tags): <p>Any tags assigned to the import snapshot task.</p>
    /// - On failure, responds with [`SdkError<ImportSnapshotError>`](crate::error::ImportSnapshotError)
    pub fn import_snapshot(&self) -> fluent_builders::ImportSnapshot {
        fluent_builders::ImportSnapshot::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ImportVolume`](crate::client::fluent_builders::ImportVolume) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`availability_zone(impl Into<String>)`](crate::client::fluent_builders::ImportVolume::availability_zone) / [`set_availability_zone(Option<String>)`](crate::client::fluent_builders::ImportVolume::set_availability_zone): <p>The Availability Zone for the resulting EBS volume.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ImportVolume::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ImportVolume::set_description): <p>A description of the volume.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ImportVolume::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ImportVolume::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`image(DiskImageDetail)`](crate::client::fluent_builders::ImportVolume::image) / [`set_image(Option<DiskImageDetail>)`](crate::client::fluent_builders::ImportVolume::set_image): <p>The disk image.</p>
    ///   - [`volume(VolumeDetail)`](crate::client::fluent_builders::ImportVolume::volume) / [`set_volume(Option<VolumeDetail>)`](crate::client::fluent_builders::ImportVolume::set_volume): <p>The volume size.</p>
    /// - On success, responds with [`ImportVolumeOutput`](crate::output::ImportVolumeOutput) with field(s):
    ///   - [`conversion_task(Option<ConversionTask>)`](crate::output::ImportVolumeOutput::conversion_task): <p>Information about the conversion task.</p>
    /// - On failure, responds with [`SdkError<ImportVolumeError>`](crate::error::ImportVolumeError)
    pub fn import_volume(&self) -> fluent_builders::ImportVolume {
        fluent_builders::ImportVolume::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListImagesInRecycleBin`](crate::client::fluent_builders::ListImagesInRecycleBin) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListImagesInRecycleBin::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_ids(Vec<String>)`](crate::client::fluent_builders::ListImagesInRecycleBin::image_ids) / [`set_image_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ListImagesInRecycleBin::set_image_ids): <p>The IDs of the AMIs to list. Omit this parameter to list all of the AMIs that are in the Recycle Bin. You can specify up to 20 IDs in a single request.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListImagesInRecycleBin::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListImagesInRecycleBin::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListImagesInRecycleBin::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListImagesInRecycleBin::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>  <p>If you do not specify a value for <i>MaxResults</i>, the request returns 1,000 items per page by default. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination"> Pagination</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ListImagesInRecycleBin::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ListImagesInRecycleBin::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ListImagesInRecycleBinOutput`](crate::output::ListImagesInRecycleBinOutput) with field(s):
    ///   - [`images(Option<Vec<ImageRecycleBinInfo>>)`](crate::output::ListImagesInRecycleBinOutput::images): <p>Information about the AMIs.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListImagesInRecycleBinOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<ListImagesInRecycleBinError>`](crate::error::ListImagesInRecycleBinError)
    pub fn list_images_in_recycle_bin(&self) -> fluent_builders::ListImagesInRecycleBin {
        fluent_builders::ListImagesInRecycleBin::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListSnapshotsInRecycleBin`](crate::client::fluent_builders::ListSnapshotsInRecycleBin) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`snapshot_ids(Vec<String>)`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::snapshot_ids) / [`set_snapshot_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::set_snapshot_ids): <p>The IDs of the snapshots to list. Omit this parameter to list all of the snapshots that are in the Recycle Bin.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ListSnapshotsInRecycleBin::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ListSnapshotsInRecycleBinOutput`](crate::output::ListSnapshotsInRecycleBinOutput) with field(s):
    ///   - [`snapshots(Option<Vec<SnapshotRecycleBinInfo>>)`](crate::output::ListSnapshotsInRecycleBinOutput::snapshots): <p>Information about the snapshots.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListSnapshotsInRecycleBinOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<ListSnapshotsInRecycleBinError>`](crate::error::ListSnapshotsInRecycleBinError)
    pub fn list_snapshots_in_recycle_bin(&self) -> fluent_builders::ListSnapshotsInRecycleBin {
        fluent_builders::ListSnapshotsInRecycleBin::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyAddressAttribute`](crate::client::fluent_builders::ModifyAddressAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_id(impl Into<String>)`](crate::client::fluent_builders::ModifyAddressAttribute::allocation_id) / [`set_allocation_id(Option<String>)`](crate::client::fluent_builders::ModifyAddressAttribute::set_allocation_id): <p>[EC2-VPC] The allocation ID.</p>
    ///   - [`domain_name(impl Into<String>)`](crate::client::fluent_builders::ModifyAddressAttribute::domain_name) / [`set_domain_name(Option<String>)`](crate::client::fluent_builders::ModifyAddressAttribute::set_domain_name): <p>The domain name to modify for the IP address.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyAddressAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyAddressAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyAddressAttributeOutput`](crate::output::ModifyAddressAttributeOutput) with field(s):
    ///   - [`address(Option<AddressAttribute>)`](crate::output::ModifyAddressAttributeOutput::address): <p>Information about the Elastic IP address.</p>
    /// - On failure, responds with [`SdkError<ModifyAddressAttributeError>`](crate::error::ModifyAddressAttributeError)
    pub fn modify_address_attribute(&self) -> fluent_builders::ModifyAddressAttribute {
        fluent_builders::ModifyAddressAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyAvailabilityZoneGroup`](crate::client::fluent_builders::ModifyAvailabilityZoneGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::ModifyAvailabilityZoneGroup::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::ModifyAvailabilityZoneGroup::set_group_name): <p>The name of the Availability Zone group, Local Zone group, or Wavelength Zone group.</p>
    ///   - [`opt_in_status(ModifyAvailabilityZoneOptInStatus)`](crate::client::fluent_builders::ModifyAvailabilityZoneGroup::opt_in_status) / [`set_opt_in_status(Option<ModifyAvailabilityZoneOptInStatus>)`](crate::client::fluent_builders::ModifyAvailabilityZoneGroup::set_opt_in_status): <p>Indicates whether you are opted in to the Local Zone group or Wavelength Zone group. The only valid value is <code>opted-in</code>. You must contact <a href="https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services">Amazon Web Services Support</a> to opt out of a Local Zone or Wavelength Zone group.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyAvailabilityZoneGroup::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyAvailabilityZoneGroup::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyAvailabilityZoneGroupOutput`](crate::output::ModifyAvailabilityZoneGroupOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyAvailabilityZoneGroupOutput::return): <p>Is <code>true</code> if the request succeeds, and an error otherwise.</p>
    /// - On failure, responds with [`SdkError<ModifyAvailabilityZoneGroupError>`](crate::error::ModifyAvailabilityZoneGroupError)
    pub fn modify_availability_zone_group(&self) -> fluent_builders::ModifyAvailabilityZoneGroup {
        fluent_builders::ModifyAvailabilityZoneGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyCapacityReservation`](crate::client::fluent_builders::ModifyCapacityReservation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`capacity_reservation_id(impl Into<String>)`](crate::client::fluent_builders::ModifyCapacityReservation::capacity_reservation_id) / [`set_capacity_reservation_id(Option<String>)`](crate::client::fluent_builders::ModifyCapacityReservation::set_capacity_reservation_id): <p>The ID of the Capacity Reservation.</p>
    ///   - [`instance_count(i32)`](crate::client::fluent_builders::ModifyCapacityReservation::instance_count) / [`set_instance_count(Option<i32>)`](crate::client::fluent_builders::ModifyCapacityReservation::set_instance_count): <p>The number of instances for which to reserve capacity. The number of instances can't be increased or decreased by more than <code>1000</code> in a single request.</p>
    ///   - [`end_date(DateTime)`](crate::client::fluent_builders::ModifyCapacityReservation::end_date) / [`set_end_date(Option<DateTime>)`](crate::client::fluent_builders::ModifyCapacityReservation::set_end_date): <p>The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to <code>expired</code> when it reaches its end date and time.</p>  <p>The Capacity Reservation is cancelled within an hour from the specified time. For example, if you specify 5/31/2019, 13:30:55, the Capacity Reservation is guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019.</p>  <p>You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>. Omit <code>EndDate</code> if <code>EndDateType</code> is <code>unlimited</code>.</p>
    ///   - [`end_date_type(EndDateType)`](crate::client::fluent_builders::ModifyCapacityReservation::end_date_type) / [`set_end_date_type(Option<EndDateType>)`](crate::client::fluent_builders::ModifyCapacityReservation::set_end_date_type): <p>Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>  <ul>   <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it. Do not provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>unlimited</code>.</p> </li>   <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time. You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>.</p> </li>  </ul>
    ///   - [`accept(bool)`](crate::client::fluent_builders::ModifyCapacityReservation::accept) / [`set_accept(Option<bool>)`](crate::client::fluent_builders::ModifyCapacityReservation::set_accept): <p>Reserved. Capacity Reservations you have created are accepted by default.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyCapacityReservation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyCapacityReservation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`additional_info(impl Into<String>)`](crate::client::fluent_builders::ModifyCapacityReservation::additional_info) / [`set_additional_info(Option<String>)`](crate::client::fluent_builders::ModifyCapacityReservation::set_additional_info): <p>Reserved for future use.</p>
    /// - On success, responds with [`ModifyCapacityReservationOutput`](crate::output::ModifyCapacityReservationOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyCapacityReservationOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyCapacityReservationError>`](crate::error::ModifyCapacityReservationError)
    pub fn modify_capacity_reservation(&self) -> fluent_builders::ModifyCapacityReservation {
        fluent_builders::ModifyCapacityReservation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyCapacityReservationFleet`](crate::client::fluent_builders::ModifyCapacityReservationFleet) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`capacity_reservation_fleet_id(impl Into<String>)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::capacity_reservation_fleet_id) / [`set_capacity_reservation_fleet_id(Option<String>)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::set_capacity_reservation_fleet_id): <p>The ID of the Capacity Reservation Fleet to modify.</p>
    ///   - [`total_target_capacity(i32)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::total_target_capacity) / [`set_total_target_capacity(Option<i32>)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::set_total_target_capacity): <p>The total number of capacity units to be reserved by the Capacity Reservation Fleet. This value, together with the instance type weights that you assign to each instance type used by the Fleet determine the number of instances for which the Fleet reserves capacity. Both values are based on units that make sense for your workload. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity">Total target capacity</a> in the Amazon EC2 User Guide.</p>
    ///   - [`end_date(DateTime)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::end_date) / [`set_end_date(Option<DateTime>)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::set_end_date): <p>The date and time at which the Capacity Reservation Fleet expires. When the Capacity Reservation Fleet expires, its state changes to <code>expired</code> and all of the Capacity Reservations in the Fleet expire.</p>  <p>The Capacity Reservation Fleet expires within an hour after the specified time. For example, if you specify <code>5/31/2019</code>, <code>13:30:55</code>, the Capacity Reservation Fleet is guaranteed to expire between <code>13:30:55</code> and <code>14:30:55</code> on <code>5/31/2019</code>.</p>  <p>You can't specify <b>EndDate</b> and <b> RemoveEndDate</b> in the same request.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`remove_end_date(bool)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::remove_end_date) / [`set_remove_end_date(Option<bool>)`](crate::client::fluent_builders::ModifyCapacityReservationFleet::set_remove_end_date): <p>Indicates whether to remove the end date from the Capacity Reservation Fleet. If you remove the end date, the Capacity Reservation Fleet does not expire and it remains active until you explicitly cancel it using the <b>CancelCapacityReservationFleet</b> action.</p>  <p>You can't specify <b>RemoveEndDate</b> and <b> EndDate</b> in the same request.</p>
    /// - On success, responds with [`ModifyCapacityReservationFleetOutput`](crate::output::ModifyCapacityReservationFleetOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyCapacityReservationFleetOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyCapacityReservationFleetError>`](crate::error::ModifyCapacityReservationFleetError)
    pub fn modify_capacity_reservation_fleet(
        &self,
    ) -> fluent_builders::ModifyCapacityReservationFleet {
        fluent_builders::ModifyCapacityReservationFleet::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyClientVpnEndpoint`](crate::client::fluent_builders::ModifyClientVpnEndpoint) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint to modify.</p>
    ///   - [`server_certificate_arn(impl Into<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::server_certificate_arn) / [`set_server_certificate_arn(Option<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_server_certificate_arn): <p>The ARN of the server certificate to be used. The server certificate must be provisioned in Certificate Manager (ACM).</p>
    ///   - [`connection_log_options(ConnectionLogOptions)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::connection_log_options) / [`set_connection_log_options(Option<ConnectionLogOptions>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_connection_log_options): <p>Information about the client connection logging options.</p>  <p>If you enable client connection logging, data about client connections is sent to a Cloudwatch Logs log stream. The following information is logged:</p>  <ul>   <li> <p>Client connection requests</p> </li>   <li> <p>Client connection results (successful and unsuccessful)</p> </li>   <li> <p>Reasons for unsuccessful client connection requests</p> </li>   <li> <p>Client connection termination time</p> </li>  </ul>
    ///   - [`dns_servers(DnsServersOptionsModifyStructure)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::dns_servers) / [`set_dns_servers(Option<DnsServersOptionsModifyStructure>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_dns_servers): <p>Information about the DNS servers to be used by Client VPN connections. A Client VPN endpoint can have up to two DNS servers.</p>
    ///   - [`vpn_port(i32)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::vpn_port) / [`set_vpn_port(Option<i32>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_vpn_port): <p>The port number to assign to the Client VPN endpoint for TCP and UDP traffic.</p>  <p>Valid Values: <code>443</code> | <code>1194</code> </p>  <p>Default Value: <code>443</code> </p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_description): <p>A brief description of the Client VPN endpoint.</p>
    ///   - [`split_tunnel(bool)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::split_tunnel) / [`set_split_tunnel(Option<bool>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_split_tunnel): <p>Indicates whether the VPN is split-tunnel.</p>  <p>For information about split-tunnel VPN endpoints, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html">Split-tunnel Client VPN endpoint</a> in the <i>Client VPN Administrator Guide</i>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`security_group_ids(Vec<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::security_group_ids) / [`set_security_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_security_group_ids): <p>The IDs of one or more security groups to apply to the target network.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_vpc_id): <p>The ID of the VPC to associate with the Client VPN endpoint.</p>
    ///   - [`self_service_portal(SelfServicePortal)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::self_service_portal) / [`set_self_service_portal(Option<SelfServicePortal>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_self_service_portal): <p>Specify whether to enable the self-service portal for the Client VPN endpoint.</p>
    ///   - [`client_connect_options(ClientConnectOptions)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::client_connect_options) / [`set_client_connect_options(Option<ClientConnectOptions>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_client_connect_options): <p>The options for managing connection authorization for new client connections.</p>
    ///   - [`session_timeout_hours(i32)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::session_timeout_hours) / [`set_session_timeout_hours(Option<i32>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_session_timeout_hours): <p>The maximum VPN session duration time in hours.</p>  <p>Valid values: <code>8 | 10 | 12 | 24</code> </p>  <p>Default value: <code>24</code> </p>
    ///   - [`client_login_banner_options(ClientLoginBannerOptions)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::client_login_banner_options) / [`set_client_login_banner_options(Option<ClientLoginBannerOptions>)`](crate::client::fluent_builders::ModifyClientVpnEndpoint::set_client_login_banner_options): <p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>
    /// - On success, responds with [`ModifyClientVpnEndpointOutput`](crate::output::ModifyClientVpnEndpointOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyClientVpnEndpointOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyClientVpnEndpointError>`](crate::error::ModifyClientVpnEndpointError)
    pub fn modify_client_vpn_endpoint(&self) -> fluent_builders::ModifyClientVpnEndpoint {
        fluent_builders::ModifyClientVpnEndpoint::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyDefaultCreditSpecification`](crate::client::fluent_builders::ModifyDefaultCreditSpecification) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyDefaultCreditSpecification::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyDefaultCreditSpecification::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_family(UnlimitedSupportedInstanceFamily)`](crate::client::fluent_builders::ModifyDefaultCreditSpecification::instance_family) / [`set_instance_family(Option<UnlimitedSupportedInstanceFamily>)`](crate::client::fluent_builders::ModifyDefaultCreditSpecification::set_instance_family): <p>The instance family.</p>
    ///   - [`cpu_credits(impl Into<String>)`](crate::client::fluent_builders::ModifyDefaultCreditSpecification::cpu_credits) / [`set_cpu_credits(Option<String>)`](crate::client::fluent_builders::ModifyDefaultCreditSpecification::set_cpu_credits): <p>The credit option for CPU usage of the instance family.</p>  <p>Valid Values: <code>standard</code> | <code>unlimited</code> </p>
    /// - On success, responds with [`ModifyDefaultCreditSpecificationOutput`](crate::output::ModifyDefaultCreditSpecificationOutput) with field(s):
    ///   - [`instance_family_credit_specification(Option<InstanceFamilyCreditSpecification>)`](crate::output::ModifyDefaultCreditSpecificationOutput::instance_family_credit_specification): <p>The default credit option for CPU usage of the instance family.</p>
    /// - On failure, responds with [`SdkError<ModifyDefaultCreditSpecificationError>`](crate::error::ModifyDefaultCreditSpecificationError)
    pub fn modify_default_credit_specification(
        &self,
    ) -> fluent_builders::ModifyDefaultCreditSpecification {
        fluent_builders::ModifyDefaultCreditSpecification::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyEbsDefaultKmsKeyId`](crate::client::fluent_builders::ModifyEbsDefaultKmsKeyId) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`kms_key_id(impl Into<String>)`](crate::client::fluent_builders::ModifyEbsDefaultKmsKeyId::kms_key_id) / [`set_kms_key_id(Option<String>)`](crate::client::fluent_builders::ModifyEbsDefaultKmsKeyId::set_kms_key_id): <p>The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>  <p>You can specify the KMS key using any of the following:</p>  <ul>   <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>   <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>   <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>   <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>  </ul>  <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>  <p>Amazon EBS does not support asymmetric KMS keys.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyEbsDefaultKmsKeyId::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyEbsDefaultKmsKeyId::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyEbsDefaultKmsKeyIdOutput`](crate::output::ModifyEbsDefaultKmsKeyIdOutput) with field(s):
    ///   - [`kms_key_id(Option<String>)`](crate::output::ModifyEbsDefaultKmsKeyIdOutput::kms_key_id): <p>The Amazon Resource Name (ARN) of the default KMS key for encryption by default.</p>
    /// - On failure, responds with [`SdkError<ModifyEbsDefaultKmsKeyIdError>`](crate::error::ModifyEbsDefaultKmsKeyIdError)
    pub fn modify_ebs_default_kms_key_id(&self) -> fluent_builders::ModifyEbsDefaultKmsKeyId {
        fluent_builders::ModifyEbsDefaultKmsKeyId::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyFleet`](crate::client::fluent_builders::ModifyFleet) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyFleet::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyFleet::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`excess_capacity_termination_policy(FleetExcessCapacityTerminationPolicy)`](crate::client::fluent_builders::ModifyFleet::excess_capacity_termination_policy) / [`set_excess_capacity_termination_policy(Option<FleetExcessCapacityTerminationPolicy>)`](crate::client::fluent_builders::ModifyFleet::set_excess_capacity_termination_policy): <p>Indicates whether running instances should be terminated if the total target capacity of the EC2 Fleet is decreased below the current size of the EC2 Fleet.</p>
    ///   - [`launch_template_configs(Vec<FleetLaunchTemplateConfigRequest>)`](crate::client::fluent_builders::ModifyFleet::launch_template_configs) / [`set_launch_template_configs(Option<Vec<FleetLaunchTemplateConfigRequest>>)`](crate::client::fluent_builders::ModifyFleet::set_launch_template_configs): <p>The launch template and overrides.</p>
    ///   - [`fleet_id(impl Into<String>)`](crate::client::fluent_builders::ModifyFleet::fleet_id) / [`set_fleet_id(Option<String>)`](crate::client::fluent_builders::ModifyFleet::set_fleet_id): <p>The ID of the EC2 Fleet.</p>
    ///   - [`target_capacity_specification(TargetCapacitySpecificationRequest)`](crate::client::fluent_builders::ModifyFleet::target_capacity_specification) / [`set_target_capacity_specification(Option<TargetCapacitySpecificationRequest>)`](crate::client::fluent_builders::ModifyFleet::set_target_capacity_specification): <p>The size of the EC2 Fleet.</p>
    ///   - [`context(impl Into<String>)`](crate::client::fluent_builders::ModifyFleet::context) / [`set_context(Option<String>)`](crate::client::fluent_builders::ModifyFleet::set_context): <p>Reserved.</p>
    /// - On success, responds with [`ModifyFleetOutput`](crate::output::ModifyFleetOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyFleetOutput::return): <p>If the request succeeds, the response returns <code>true</code>. If the request fails, no response is returned, and instead an error message is returned.</p>
    /// - On failure, responds with [`SdkError<ModifyFleetError>`](crate::error::ModifyFleetError)
    pub fn modify_fleet(&self) -> fluent_builders::ModifyFleet {
        fluent_builders::ModifyFleet::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyFpgaImageAttribute`](crate::client::fluent_builders::ModifyFpgaImageAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`fpga_image_id(impl Into<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::fpga_image_id) / [`set_fpga_image_id(Option<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_fpga_image_id): <p>The ID of the AFI.</p>
    ///   - [`attribute(FpgaImageAttributeName)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::attribute) / [`set_attribute(Option<FpgaImageAttributeName>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_attribute): <p>The name of the attribute.</p>
    ///   - [`operation_type(OperationType)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::operation_type) / [`set_operation_type(Option<OperationType>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_operation_type): <p>The operation type.</p>
    ///   - [`user_ids(Vec<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::user_ids) / [`set_user_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_user_ids): <p>The Amazon Web Services account IDs. This parameter is valid only when modifying the <code>loadPermission</code> attribute.</p>
    ///   - [`user_groups(Vec<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::user_groups) / [`set_user_groups(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_user_groups): <p>The user groups. This parameter is valid only when modifying the <code>loadPermission</code> attribute.</p>
    ///   - [`product_codes(Vec<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::product_codes) / [`set_product_codes(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_product_codes): <p>The product codes. After you add a product code to an AFI, it can't be removed. This parameter is valid only when modifying the <code>productCodes</code> attribute.</p>
    ///   - [`load_permission(LoadPermissionModifications)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::load_permission) / [`set_load_permission(Option<LoadPermissionModifications>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_load_permission): <p>The load permission for the AFI.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_description): <p>A description for the AFI.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::ModifyFpgaImageAttribute::set_name): <p>A name for the AFI.</p>
    /// - On success, responds with [`ModifyFpgaImageAttributeOutput`](crate::output::ModifyFpgaImageAttributeOutput) with field(s):
    ///   - [`fpga_image_attribute(Option<FpgaImageAttribute>)`](crate::output::ModifyFpgaImageAttributeOutput::fpga_image_attribute): <p>Information about the attribute.</p>
    /// - On failure, responds with [`SdkError<ModifyFpgaImageAttributeError>`](crate::error::ModifyFpgaImageAttributeError)
    pub fn modify_fpga_image_attribute(&self) -> fluent_builders::ModifyFpgaImageAttribute {
        fluent_builders::ModifyFpgaImageAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyHosts`](crate::client::fluent_builders::ModifyHosts) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`auto_placement(AutoPlacement)`](crate::client::fluent_builders::ModifyHosts::auto_placement) / [`set_auto_placement(Option<AutoPlacement>)`](crate::client::fluent_builders::ModifyHosts::set_auto_placement): <p>Specify whether to enable or disable auto-placement.</p>
    ///   - [`host_ids(Vec<String>)`](crate::client::fluent_builders::ModifyHosts::host_ids) / [`set_host_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyHosts::set_host_ids): <p>The IDs of the Dedicated Hosts to modify.</p>
    ///   - [`host_recovery(HostRecovery)`](crate::client::fluent_builders::ModifyHosts::host_recovery) / [`set_host_recovery(Option<HostRecovery>)`](crate::client::fluent_builders::ModifyHosts::set_host_recovery): <p>Indicates whether to enable or disable host recovery for the Dedicated Host. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html"> Host recovery</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`instance_type(impl Into<String>)`](crate::client::fluent_builders::ModifyHosts::instance_type) / [`set_instance_type(Option<String>)`](crate::client::fluent_builders::ModifyHosts::set_instance_type): <p>Specifies the instance type to be supported by the Dedicated Host. Specify this parameter to modify a Dedicated Host to support only a specific instance type.</p>  <p>If you want to modify a Dedicated Host to support multiple instance types in its current instance family, omit this parameter and specify <b>InstanceFamily</b> instead. You cannot specify <b>InstanceType</b> and <b>InstanceFamily</b> in the same request.</p>
    ///   - [`instance_family(impl Into<String>)`](crate::client::fluent_builders::ModifyHosts::instance_family) / [`set_instance_family(Option<String>)`](crate::client::fluent_builders::ModifyHosts::set_instance_family): <p>Specifies the instance family to be supported by the Dedicated Host. Specify this parameter to modify a Dedicated Host to support multiple instance types within its current instance family.</p>  <p>If you want to modify a Dedicated Host to support a specific instance type only, omit this parameter and specify <b>InstanceType</b> instead. You cannot specify <b>InstanceFamily</b> and <b>InstanceType</b> in the same request.</p>
    /// - On success, responds with [`ModifyHostsOutput`](crate::output::ModifyHostsOutput) with field(s):
    ///   - [`successful(Option<Vec<String>>)`](crate::output::ModifyHostsOutput::successful): <p>The IDs of the Dedicated Hosts that were successfully modified.</p>
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::ModifyHostsOutput::unsuccessful): <p>The IDs of the Dedicated Hosts that could not be modified. Check whether the setting you requested can be used.</p>
    /// - On failure, responds with [`SdkError<ModifyHostsError>`](crate::error::ModifyHostsError)
    pub fn modify_hosts(&self) -> fluent_builders::ModifyHosts {
        fluent_builders::ModifyHosts::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyIdentityIdFormat`](crate::client::fluent_builders::ModifyIdentityIdFormat) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`principal_arn(impl Into<String>)`](crate::client::fluent_builders::ModifyIdentityIdFormat::principal_arn) / [`set_principal_arn(Option<String>)`](crate::client::fluent_builders::ModifyIdentityIdFormat::set_principal_arn): <p>The ARN of the principal, which can be an IAM user, IAM role, or the root user. Specify <code>all</code> to modify the ID format for all IAM users, IAM roles, and the root user of the account.</p>
    ///   - [`resource(impl Into<String>)`](crate::client::fluent_builders::ModifyIdentityIdFormat::resource) / [`set_resource(Option<String>)`](crate::client::fluent_builders::ModifyIdentityIdFormat::set_resource): <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>.</p>  <p>Alternatively, use the <code>all-current</code> option to include all resource types that are currently within their opt-in period for longer IDs.</p>
    ///   - [`use_long_ids(bool)`](crate::client::fluent_builders::ModifyIdentityIdFormat::use_long_ids) / [`set_use_long_ids(Option<bool>)`](crate::client::fluent_builders::ModifyIdentityIdFormat::set_use_long_ids): <p>Indicates whether the resource should use longer IDs (17-character IDs)</p>
    /// - On success, responds with [`ModifyIdentityIdFormatOutput`](crate::output::ModifyIdentityIdFormatOutput)

    /// - On failure, responds with [`SdkError<ModifyIdentityIdFormatError>`](crate::error::ModifyIdentityIdFormatError)
    pub fn modify_identity_id_format(&self) -> fluent_builders::ModifyIdentityIdFormat {
        fluent_builders::ModifyIdentityIdFormat::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyIdFormat`](crate::client::fluent_builders::ModifyIdFormat) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`resource(impl Into<String>)`](crate::client::fluent_builders::ModifyIdFormat::resource) / [`set_resource(Option<String>)`](crate::client::fluent_builders::ModifyIdFormat::set_resource): <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>.</p>  <p>Alternatively, use the <code>all-current</code> option to include all resource types that are currently within their opt-in period for longer IDs.</p>
    ///   - [`use_long_ids(bool)`](crate::client::fluent_builders::ModifyIdFormat::use_long_ids) / [`set_use_long_ids(Option<bool>)`](crate::client::fluent_builders::ModifyIdFormat::set_use_long_ids): <p>Indicate whether the resource should use longer IDs (17-character IDs).</p>
    /// - On success, responds with [`ModifyIdFormatOutput`](crate::output::ModifyIdFormatOutput)

    /// - On failure, responds with [`SdkError<ModifyIdFormatError>`](crate::error::ModifyIdFormatError)
    pub fn modify_id_format(&self) -> fluent_builders::ModifyIdFormat {
        fluent_builders::ModifyIdFormat::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyImageAttribute`](crate::client::fluent_builders::ModifyImageAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(impl Into<String>)`](crate::client::fluent_builders::ModifyImageAttribute::attribute) / [`set_attribute(Option<String>)`](crate::client::fluent_builders::ModifyImageAttribute::set_attribute): <p>The name of the attribute to modify.</p>  <p>Valid values: <code>description</code> | <code>launchPermission</code> </p>
    ///   - [`description(AttributeValue)`](crate::client::fluent_builders::ModifyImageAttribute::description) / [`set_description(Option<AttributeValue>)`](crate::client::fluent_builders::ModifyImageAttribute::set_description): <p>A new description for the AMI.</p>
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::ModifyImageAttribute::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::ModifyImageAttribute::set_image_id): <p>The ID of the AMI.</p>
    ///   - [`launch_permission(LaunchPermissionModifications)`](crate::client::fluent_builders::ModifyImageAttribute::launch_permission) / [`set_launch_permission(Option<LaunchPermissionModifications>)`](crate::client::fluent_builders::ModifyImageAttribute::set_launch_permission): <p>A new launch permission for the AMI.</p>
    ///   - [`operation_type(OperationType)`](crate::client::fluent_builders::ModifyImageAttribute::operation_type) / [`set_operation_type(Option<OperationType>)`](crate::client::fluent_builders::ModifyImageAttribute::set_operation_type): <p>The operation type. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
    ///   - [`product_codes(Vec<String>)`](crate::client::fluent_builders::ModifyImageAttribute::product_codes) / [`set_product_codes(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyImageAttribute::set_product_codes): <p>Not supported.</p>
    ///   - [`user_groups(Vec<String>)`](crate::client::fluent_builders::ModifyImageAttribute::user_groups) / [`set_user_groups(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyImageAttribute::set_user_groups): <p>The user groups. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
    ///   - [`user_ids(Vec<String>)`](crate::client::fluent_builders::ModifyImageAttribute::user_ids) / [`set_user_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyImageAttribute::set_user_ids): <p>The Amazon Web Services account IDs. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
    ///   - [`value(impl Into<String>)`](crate::client::fluent_builders::ModifyImageAttribute::value) / [`set_value(Option<String>)`](crate::client::fluent_builders::ModifyImageAttribute::set_value): <p>The value of the attribute being modified. This parameter can be used only when the <code>Attribute</code> parameter is <code>description</code>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyImageAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyImageAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`organization_arns(Vec<String>)`](crate::client::fluent_builders::ModifyImageAttribute::organization_arns) / [`set_organization_arns(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyImageAttribute::set_organization_arns): <p>The Amazon Resource Name (ARN) of an organization. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
    ///   - [`organizational_unit_arns(Vec<String>)`](crate::client::fluent_builders::ModifyImageAttribute::organizational_unit_arns) / [`set_organizational_unit_arns(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyImageAttribute::set_organizational_unit_arns): <p>The Amazon Resource Name (ARN) of an organizational unit (OU). This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
    /// - On success, responds with [`ModifyImageAttributeOutput`](crate::output::ModifyImageAttributeOutput)

    /// - On failure, responds with [`SdkError<ModifyImageAttributeError>`](crate::error::ModifyImageAttributeError)
    pub fn modify_image_attribute(&self) -> fluent_builders::ModifyImageAttribute {
        fluent_builders::ModifyImageAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyInstanceAttribute`](crate::client::fluent_builders::ModifyInstanceAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`source_dest_check(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::source_dest_check) / [`set_source_dest_check(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_source_dest_check): <p>Enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. If the value is <code>true</code>, source/destination checks are enabled; otherwise, they are disabled. The default value is <code>true</code>. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.</p>
    ///   - [`attribute(InstanceAttributeName)`](crate::client::fluent_builders::ModifyInstanceAttribute::attribute) / [`set_attribute(Option<InstanceAttributeName>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_attribute): <p>The name of the attribute to modify.</p> <important>   <p>You can modify the following attributes only: <code>disableApiTermination</code> | <code>instanceType</code> | <code>kernel</code> | <code>ramdisk</code> | <code>instanceInitiatedShutdownBehavior</code> | <code>blockDeviceMapping</code> | <code>userData</code> | <code>sourceDestCheck</code> | <code>groupSet</code> | <code>ebsOptimized</code> | <code>sriovNetSupport</code> | <code>enaSupport</code> | <code>nvmeSupport</code> | <code>disableApiStop</code> | <code>enclaveOptions</code> </p>  </important>
    ///   - [`block_device_mappings(Vec<InstanceBlockDeviceMappingSpecification>)`](crate::client::fluent_builders::ModifyInstanceAttribute::block_device_mappings) / [`set_block_device_mappings(Option<Vec<InstanceBlockDeviceMappingSpecification>>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_block_device_mappings): <p>Modifies the <code>DeleteOnTermination</code> attribute for volumes that are currently attached. The volume must be owned by the caller. If no value is specified for <code>DeleteOnTermination</code>, the default is <code>true</code> and the volume is deleted when the instance is terminated.</p>  <p>To add instance store volumes to an Amazon EBS-backed instance, you must add them when you launch the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM">Update the block device mapping when launching an instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`disable_api_termination(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::disable_api_termination) / [`set_disable_api_termination(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_disable_api_termination): <p>If the value is <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this parameter for Spot Instances.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyInstanceAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ebs_optimized(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::ebs_optimized) / [`set_ebs_optimized(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_ebs_optimized): <p>Specifies whether the instance is optimized for Amazon EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance.</p>
    ///   - [`ena_support(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::ena_support) / [`set_ena_support(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_ena_support): <p>Set to <code>true</code> to enable enhanced networking with ENA for the instance.</p>  <p>This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.</p>
    ///   - [`groups(Vec<String>)`](crate::client::fluent_builders::ModifyInstanceAttribute::groups) / [`set_groups(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_groups): <p>[EC2-VPC] Replaces the security groups of the instance with the specified security groups. You must specify at least one security group, even if it's just the default security group for the VPC. You must specify the security group ID, not the security group name.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceAttribute::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`instance_initiated_shutdown_behavior(AttributeValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::instance_initiated_shutdown_behavior) / [`set_instance_initiated_shutdown_behavior(Option<AttributeValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_instance_initiated_shutdown_behavior): <p>Specifies whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).</p>
    ///   - [`instance_type(AttributeValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::instance_type) / [`set_instance_type(Option<AttributeValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_instance_type): <p>Changes the instance type to the specified value. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>. If the instance type is not valid, the error returned is <code>InvalidInstanceAttributeValue</code>.</p>
    ///   - [`kernel(AttributeValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::kernel) / [`set_kernel(Option<AttributeValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_kernel): <p>Changes the instance's kernel to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html">PV-GRUB</a>.</p>
    ///   - [`ramdisk(AttributeValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::ramdisk) / [`set_ramdisk(Option<AttributeValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_ramdisk): <p>Changes the instance's RAM disk to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html">PV-GRUB</a>.</p>
    ///   - [`sriov_net_support(AttributeValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::sriov_net_support) / [`set_sriov_net_support(Option<AttributeValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_sriov_net_support): <p>Set to <code>simple</code> to enable enhanced networking with the Intel 82599 Virtual Function interface for the instance.</p>  <p>There is no way to disable enhanced networking with the Intel 82599 Virtual Function interface at this time.</p>  <p>This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.</p>
    ///   - [`user_data(BlobAttributeValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::user_data) / [`set_user_data(Option<BlobAttributeValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_user_data): <p>Changes the instance's user data to the specified value. If you are using an Amazon Web Services SDK or command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text.</p>
    ///   - [`value(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceAttribute::value) / [`set_value(Option<String>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_value): <p>A new value for the attribute. Use only with the <code>kernel</code>, <code>ramdisk</code>, <code>userData</code>, <code>disableApiTermination</code>, or <code>instanceInitiatedShutdownBehavior</code> attribute.</p>
    ///   - [`disable_api_stop(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyInstanceAttribute::disable_api_stop) / [`set_disable_api_stop(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyInstanceAttribute::set_disable_api_stop): <p>Indicates whether an instance is enabled for stop protection. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection">Stop Protection</a>.</p>  <p></p>
    /// - On success, responds with [`ModifyInstanceAttributeOutput`](crate::output::ModifyInstanceAttributeOutput)

    /// - On failure, responds with [`SdkError<ModifyInstanceAttributeError>`](crate::error::ModifyInstanceAttributeError)
    pub fn modify_instance_attribute(&self) -> fluent_builders::ModifyInstanceAttribute {
        fluent_builders::ModifyInstanceAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyInstanceCapacityReservationAttributes`](crate::client::fluent_builders::ModifyInstanceCapacityReservationAttributes) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceCapacityReservationAttributes::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyInstanceCapacityReservationAttributes::set_instance_id): <p>The ID of the instance to be modified.</p>
    ///   - [`capacity_reservation_specification(CapacityReservationSpecification)`](crate::client::fluent_builders::ModifyInstanceCapacityReservationAttributes::capacity_reservation_specification) / [`set_capacity_reservation_specification(Option<CapacityReservationSpecification>)`](crate::client::fluent_builders::ModifyInstanceCapacityReservationAttributes::set_capacity_reservation_specification): <p>Information about the Capacity Reservation targeting option.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyInstanceCapacityReservationAttributes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyInstanceCapacityReservationAttributes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyInstanceCapacityReservationAttributesOutput`](crate::output::ModifyInstanceCapacityReservationAttributesOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyInstanceCapacityReservationAttributesOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyInstanceCapacityReservationAttributesError>`](crate::error::ModifyInstanceCapacityReservationAttributesError)
    pub fn modify_instance_capacity_reservation_attributes(
        &self,
    ) -> fluent_builders::ModifyInstanceCapacityReservationAttributes {
        fluent_builders::ModifyInstanceCapacityReservationAttributes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyInstanceCreditSpecification`](crate::client::fluent_builders::ModifyInstanceCreditSpecification) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyInstanceCreditSpecification::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyInstanceCreditSpecification::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceCreditSpecification::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyInstanceCreditSpecification::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`instance_credit_specifications(Vec<InstanceCreditSpecificationRequest>)`](crate::client::fluent_builders::ModifyInstanceCreditSpecification::instance_credit_specifications) / [`set_instance_credit_specifications(Option<Vec<InstanceCreditSpecificationRequest>>)`](crate::client::fluent_builders::ModifyInstanceCreditSpecification::set_instance_credit_specifications): <p>Information about the credit option for CPU usage.</p>
    /// - On success, responds with [`ModifyInstanceCreditSpecificationOutput`](crate::output::ModifyInstanceCreditSpecificationOutput) with field(s):
    ///   - [`successful_instance_credit_specifications(Option<Vec<SuccessfulInstanceCreditSpecificationItem>>)`](crate::output::ModifyInstanceCreditSpecificationOutput::successful_instance_credit_specifications): <p>Information about the instances whose credit option for CPU usage was successfully modified.</p>
    ///   - [`unsuccessful_instance_credit_specifications(Option<Vec<UnsuccessfulInstanceCreditSpecificationItem>>)`](crate::output::ModifyInstanceCreditSpecificationOutput::unsuccessful_instance_credit_specifications): <p>Information about the instances whose credit option for CPU usage was not modified.</p>
    /// - On failure, responds with [`SdkError<ModifyInstanceCreditSpecificationError>`](crate::error::ModifyInstanceCreditSpecificationError)
    pub fn modify_instance_credit_specification(
        &self,
    ) -> fluent_builders::ModifyInstanceCreditSpecification {
        fluent_builders::ModifyInstanceCreditSpecification::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyInstanceEventStartTime`](crate::client::fluent_builders::ModifyInstanceEventStartTime) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyInstanceEventStartTime::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyInstanceEventStartTime::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceEventStartTime::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyInstanceEventStartTime::set_instance_id): <p>The ID of the instance with the scheduled event.</p>
    ///   - [`instance_event_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceEventStartTime::instance_event_id) / [`set_instance_event_id(Option<String>)`](crate::client::fluent_builders::ModifyInstanceEventStartTime::set_instance_event_id): <p>The ID of the event whose date and time you are modifying.</p>
    ///   - [`not_before(DateTime)`](crate::client::fluent_builders::ModifyInstanceEventStartTime::not_before) / [`set_not_before(Option<DateTime>)`](crate::client::fluent_builders::ModifyInstanceEventStartTime::set_not_before): <p>The new date and time when the event will take place.</p>
    /// - On success, responds with [`ModifyInstanceEventStartTimeOutput`](crate::output::ModifyInstanceEventStartTimeOutput) with field(s):
    ///   - [`event(Option<InstanceStatusEvent>)`](crate::output::ModifyInstanceEventStartTimeOutput::event): <p>Information about the event.</p>
    /// - On failure, responds with [`SdkError<ModifyInstanceEventStartTimeError>`](crate::error::ModifyInstanceEventStartTimeError)
    pub fn modify_instance_event_start_time(
        &self,
    ) -> fluent_builders::ModifyInstanceEventStartTime {
        fluent_builders::ModifyInstanceEventStartTime::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyInstanceEventWindow`](crate::client::fluent_builders::ModifyInstanceEventWindow) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyInstanceEventWindow::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::set_name): <p>The name of the event window.</p>
    ///   - [`instance_event_window_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::instance_event_window_id) / [`set_instance_event_window_id(Option<String>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::set_instance_event_window_id): <p>The ID of the event window.</p>
    ///   - [`time_ranges(Vec<InstanceEventWindowTimeRangeRequest>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::time_ranges) / [`set_time_ranges(Option<Vec<InstanceEventWindowTimeRangeRequest>>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::set_time_ranges): <p>The time ranges of the event window.</p>
    ///   - [`cron_expression(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::cron_expression) / [`set_cron_expression(Option<String>)`](crate::client::fluent_builders::ModifyInstanceEventWindow::set_cron_expression): <p>The cron expression of the event window, for example, <code>* 0-4,20-23 * * 1,5</code>.</p>  <p>Constraints:</p>  <ul>   <li> <p>Only hour and day of the week values are supported.</p> </li>   <li> <p>For day of the week values, you can specify either integers <code>0</code> through <code>6</code>, or alternative single values <code>SUN</code> through <code>SAT</code>.</p> </li>   <li> <p>The minute, month, and year must be specified by <code>*</code>.</p> </li>   <li> <p>The hour value must be one or a multiple range, for example, <code>0-4</code> or <code>0-4,20-23</code>.</p> </li>   <li> <p>Each hour range must be &gt;= 2 hours, for example, <code>0-2</code> or <code>20-23</code>.</p> </li>   <li> <p>The event window must be &gt;= 4 hours. The combined total time ranges in the event window must be &gt;= 4 hours.</p> </li>  </ul>  <p>For more information about cron expressions, see <a href="https://en.wikipedia.org/wiki/Cron">cron</a> on the <i>Wikipedia website</i>.</p>
    /// - On success, responds with [`ModifyInstanceEventWindowOutput`](crate::output::ModifyInstanceEventWindowOutput) with field(s):
    ///   - [`instance_event_window(Option<InstanceEventWindow>)`](crate::output::ModifyInstanceEventWindowOutput::instance_event_window): <p>Information about the event window.</p>
    /// - On failure, responds with [`SdkError<ModifyInstanceEventWindowError>`](crate::error::ModifyInstanceEventWindowError)
    pub fn modify_instance_event_window(&self) -> fluent_builders::ModifyInstanceEventWindow {
        fluent_builders::ModifyInstanceEventWindow::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyInstanceMaintenanceOptions`](crate::client::fluent_builders::ModifyInstanceMaintenanceOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceMaintenanceOptions::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyInstanceMaintenanceOptions::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`auto_recovery(InstanceAutoRecoveryState)`](crate::client::fluent_builders::ModifyInstanceMaintenanceOptions::auto_recovery) / [`set_auto_recovery(Option<InstanceAutoRecoveryState>)`](crate::client::fluent_builders::ModifyInstanceMaintenanceOptions::set_auto_recovery): <p>Disables the automatic recovery behavior of your instance or sets it to default.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyInstanceMaintenanceOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyInstanceMaintenanceOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyInstanceMaintenanceOptionsOutput`](crate::output::ModifyInstanceMaintenanceOptionsOutput) with field(s):
    ///   - [`instance_id(Option<String>)`](crate::output::ModifyInstanceMaintenanceOptionsOutput::instance_id): <p>The ID of the instance.</p>
    ///   - [`auto_recovery(Option<InstanceAutoRecoveryState>)`](crate::output::ModifyInstanceMaintenanceOptionsOutput::auto_recovery): <p>Provides information on the current automatic recovery behavior of your instance.</p>
    /// - On failure, responds with [`SdkError<ModifyInstanceMaintenanceOptionsError>`](crate::error::ModifyInstanceMaintenanceOptionsError)
    pub fn modify_instance_maintenance_options(
        &self,
    ) -> fluent_builders::ModifyInstanceMaintenanceOptions {
        fluent_builders::ModifyInstanceMaintenanceOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyInstanceMetadataOptions`](crate::client::fluent_builders::ModifyInstanceMetadataOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`http_tokens(HttpTokensState)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::http_tokens) / [`set_http_tokens(Option<HttpTokensState>)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::set_http_tokens): <p>IMDSv2 uses token-backed sessions. Set the use of HTTP tokens to <code>optional</code> (in other words, set the use of IMDSv2 to <code>optional</code>) or <code>required</code> (in other words, set the use of IMDSv2 to <code>required</code>).</p>  <ul>   <li> <p> <code>optional</code> - When IMDSv2 is optional, you can choose to retrieve instance metadata with or without a session token in your request. If you retrieve the IAM role credentials without a token, the IMDSv1 role credentials are returned. If you retrieve the IAM role credentials using a valid session token, the IMDSv2 role credentials are returned.</p> </li>   <li> <p> <code>required</code> - When IMDSv2 is required, you must send a session token with any instance metadata retrieval requests. In this state, retrieving the IAM role credentials always returns IMDSv2 credentials; IMDSv1 credentials are not available.</p> </li>  </ul>  <p>Default: <code>optional</code> </p>
    ///   - [`http_put_response_hop_limit(i32)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::http_put_response_hop_limit) / [`set_http_put_response_hop_limit(Option<i32>)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::set_http_put_response_hop_limit): <p>The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel. If no parameter is specified, the existing state is maintained.</p>  <p>Possible values: Integers from 1 to 64</p>
    ///   - [`http_endpoint(InstanceMetadataEndpointState)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::http_endpoint) / [`set_http_endpoint(Option<InstanceMetadataEndpointState>)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::set_http_endpoint): <p>Enables or disables the HTTP metadata endpoint on your instances. If this parameter is not specified, the existing state is maintained.</p>  <p>If you specify a value of <code>disabled</code>, you cannot access your instance metadata.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`http_protocol_ipv6(InstanceMetadataProtocolState)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::http_protocol_ipv6) / [`set_http_protocol_ipv6(Option<InstanceMetadataProtocolState>)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::set_http_protocol_ipv6): <p>Enables or disables the IPv6 endpoint for the instance metadata service. This setting applies only if you have enabled the HTTP metadata endpoint.</p>
    ///   - [`instance_metadata_tags(InstanceMetadataTagsState)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::instance_metadata_tags) / [`set_instance_metadata_tags(Option<InstanceMetadataTagsState>)`](crate::client::fluent_builders::ModifyInstanceMetadataOptions::set_instance_metadata_tags): <p>Set to <code>enabled</code> to allow access to instance tags from the instance metadata. Set to <code>disabled</code> to turn off access to instance tags from the instance metadata. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS">Work with instance tags using the instance metadata</a>.</p>  <p>Default: <code>disabled</code> </p>
    /// - On success, responds with [`ModifyInstanceMetadataOptionsOutput`](crate::output::ModifyInstanceMetadataOptionsOutput) with field(s):
    ///   - [`instance_id(Option<String>)`](crate::output::ModifyInstanceMetadataOptionsOutput::instance_id): <p>The ID of the instance.</p>
    ///   - [`instance_metadata_options(Option<InstanceMetadataOptionsResponse>)`](crate::output::ModifyInstanceMetadataOptionsOutput::instance_metadata_options): <p>The metadata options for the instance.</p>
    /// - On failure, responds with [`SdkError<ModifyInstanceMetadataOptionsError>`](crate::error::ModifyInstanceMetadataOptionsError)
    pub fn modify_instance_metadata_options(
        &self,
    ) -> fluent_builders::ModifyInstanceMetadataOptions {
        fluent_builders::ModifyInstanceMetadataOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyInstancePlacement`](crate::client::fluent_builders::ModifyInstancePlacement) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`affinity(Affinity)`](crate::client::fluent_builders::ModifyInstancePlacement::affinity) / [`set_affinity(Option<Affinity>)`](crate::client::fluent_builders::ModifyInstancePlacement::set_affinity): <p>The affinity setting for the instance.</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::set_group_name): <p>The name of the placement group in which to place the instance. For spread placement groups, the instance must have a tenancy of <code>default</code>. For cluster and partition placement groups, the instance must have a tenancy of <code>default</code> or <code>dedicated</code>.</p>  <p>To remove an instance from a placement group, specify an empty string ("").</p>
    ///   - [`host_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::host_id) / [`set_host_id(Option<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::set_host_id): <p>The ID of the Dedicated Host with which to associate the instance.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::set_instance_id): <p>The ID of the instance that you are modifying.</p>
    ///   - [`tenancy(HostTenancy)`](crate::client::fluent_builders::ModifyInstancePlacement::tenancy) / [`set_tenancy(Option<HostTenancy>)`](crate::client::fluent_builders::ModifyInstancePlacement::set_tenancy): <p>The tenancy for the instance.</p> <note>   <p>For T3 instances, you can't change the tenancy from <code>dedicated</code> to <code>host</code>, or from <code>host</code> to <code>dedicated</code>. Attempting to make one of these unsupported tenancy changes results in the <code>InvalidTenancy</code> error code.</p>  </note>
    ///   - [`partition_number(i32)`](crate::client::fluent_builders::ModifyInstancePlacement::partition_number) / [`set_partition_number(Option<i32>)`](crate::client::fluent_builders::ModifyInstancePlacement::set_partition_number): <p>The number of the partition in which to place the instance. Valid only if the placement group strategy is set to <code>partition</code>.</p>
    ///   - [`host_resource_group_arn(impl Into<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::host_resource_group_arn) / [`set_host_resource_group_arn(Option<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::set_host_resource_group_arn): <p>The ARN of the host resource group in which to place the instance.</p>
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::ModifyInstancePlacement::set_group_id): <p>The Group Id of a placement group. You must specify the Placement Group <b>Group Id</b> to launch an instance in a shared placement group.</p>
    /// - On success, responds with [`ModifyInstancePlacementOutput`](crate::output::ModifyInstancePlacementOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyInstancePlacementOutput::return): <p>Is <code>true</code> if the request succeeds, and an error otherwise.</p>
    /// - On failure, responds with [`SdkError<ModifyInstancePlacementError>`](crate::error::ModifyInstancePlacementError)
    pub fn modify_instance_placement(&self) -> fluent_builders::ModifyInstancePlacement {
        fluent_builders::ModifyInstancePlacement::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyIpam`](crate::client::fluent_builders::ModifyIpam) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyIpam::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyIpam::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_id(impl Into<String>)`](crate::client::fluent_builders::ModifyIpam::ipam_id) / [`set_ipam_id(Option<String>)`](crate::client::fluent_builders::ModifyIpam::set_ipam_id): <p>The ID of the IPAM you want to modify.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyIpam::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyIpam::set_description): <p>The description of the IPAM you want to modify.</p>
    ///   - [`add_operating_regions(Vec<AddIpamOperatingRegion>)`](crate::client::fluent_builders::ModifyIpam::add_operating_regions) / [`set_add_operating_regions(Option<Vec<AddIpamOperatingRegion>>)`](crate::client::fluent_builders::ModifyIpam::set_add_operating_regions): <p>Choose the operating Regions for the IPAM. Operating Regions are Amazon Web Services Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only discovers and monitors resources in the Amazon Web Services Regions you select as operating Regions.</p>  <p>For more information about operating Regions, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html">Create an IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    ///   - [`remove_operating_regions(Vec<RemoveIpamOperatingRegion>)`](crate::client::fluent_builders::ModifyIpam::remove_operating_regions) / [`set_remove_operating_regions(Option<Vec<RemoveIpamOperatingRegion>>)`](crate::client::fluent_builders::ModifyIpam::set_remove_operating_regions): <p>The operating Regions to remove.</p>
    /// - On success, responds with [`ModifyIpamOutput`](crate::output::ModifyIpamOutput) with field(s):
    ///   - [`ipam(Option<Ipam>)`](crate::output::ModifyIpamOutput::ipam): <p>The results of the modification.</p>
    /// - On failure, responds with [`SdkError<ModifyIpamError>`](crate::error::ModifyIpamError)
    pub fn modify_ipam(&self) -> fluent_builders::ModifyIpam {
        fluent_builders::ModifyIpam::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyIpamPool`](crate::client::fluent_builders::ModifyIpamPool) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyIpamPool::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyIpamPool::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamPool::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::ModifyIpamPool::set_ipam_pool_id): <p>The ID of the IPAM pool you want to modify.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamPool::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyIpamPool::set_description): <p>The description of the IPAM pool you want to modify.</p>
    ///   - [`auto_import(bool)`](crate::client::fluent_builders::ModifyIpamPool::auto_import) / [`set_auto_import(Option<bool>)`](crate::client::fluent_builders::ModifyIpamPool::set_auto_import): <p>If true, IPAM will continuously look for resources within the CIDR range of this pool and automatically import them as allocations into your IPAM. The CIDRs that will be allocated for these resources must not already be allocated to other resources in order for the import to succeed. IPAM will import a CIDR regardless of its compliance with the pool's allocation rules, so a resource might be imported and subsequently marked as noncompliant. If IPAM discovers multiple CIDRs that overlap, IPAM will import the largest CIDR only. If IPAM discovers multiple CIDRs with matching CIDRs, IPAM will randomly import one of them only. </p>  <p>A locale must be set on the pool for this feature to work.</p>
    ///   - [`allocation_min_netmask_length(i32)`](crate::client::fluent_builders::ModifyIpamPool::allocation_min_netmask_length) / [`set_allocation_min_netmask_length(Option<i32>)`](crate::client::fluent_builders::ModifyIpamPool::set_allocation_min_netmask_length): <p>The minimum netmask length required for CIDR allocations in this IPAM pool to be compliant. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128. The minimum netmask length must be less than the maximum netmask length.</p>
    ///   - [`allocation_max_netmask_length(i32)`](crate::client::fluent_builders::ModifyIpamPool::allocation_max_netmask_length) / [`set_allocation_max_netmask_length(Option<i32>)`](crate::client::fluent_builders::ModifyIpamPool::set_allocation_max_netmask_length): <p>The maximum netmask length possible for CIDR allocations in this IPAM pool to be compliant. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.The maximum netmask length must be greater than the minimum netmask length.</p>
    ///   - [`allocation_default_netmask_length(i32)`](crate::client::fluent_builders::ModifyIpamPool::allocation_default_netmask_length) / [`set_allocation_default_netmask_length(Option<i32>)`](crate::client::fluent_builders::ModifyIpamPool::set_allocation_default_netmask_length): <p>The default netmask length for allocations added to this pool. If, for example, the CIDR assigned to this pool is 10.0.0.0/8 and you enter 16 here, new allocations will default to 10.0.0.0/16.</p>
    ///   - [`clear_allocation_default_netmask_length(bool)`](crate::client::fluent_builders::ModifyIpamPool::clear_allocation_default_netmask_length) / [`set_clear_allocation_default_netmask_length(Option<bool>)`](crate::client::fluent_builders::ModifyIpamPool::set_clear_allocation_default_netmask_length): <p>Clear the default netmask length allocation rule for this pool.</p>
    ///   - [`add_allocation_resource_tags(Vec<RequestIpamResourceTag>)`](crate::client::fluent_builders::ModifyIpamPool::add_allocation_resource_tags) / [`set_add_allocation_resource_tags(Option<Vec<RequestIpamResourceTag>>)`](crate::client::fluent_builders::ModifyIpamPool::set_add_allocation_resource_tags): <p>Add tag allocation rules to a pool. For more information about allocation rules, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html">Create a top-level pool</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    ///   - [`remove_allocation_resource_tags(Vec<RequestIpamResourceTag>)`](crate::client::fluent_builders::ModifyIpamPool::remove_allocation_resource_tags) / [`set_remove_allocation_resource_tags(Option<Vec<RequestIpamResourceTag>>)`](crate::client::fluent_builders::ModifyIpamPool::set_remove_allocation_resource_tags): <p>Remove tag allocation rules from a pool.</p>
    /// - On success, responds with [`ModifyIpamPoolOutput`](crate::output::ModifyIpamPoolOutput) with field(s):
    ///   - [`ipam_pool(Option<IpamPool>)`](crate::output::ModifyIpamPoolOutput::ipam_pool): <p>The results of the modification.</p>
    /// - On failure, responds with [`SdkError<ModifyIpamPoolError>`](crate::error::ModifyIpamPoolError)
    pub fn modify_ipam_pool(&self) -> fluent_builders::ModifyIpamPool {
        fluent_builders::ModifyIpamPool::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyIpamResourceCidr`](crate::client::fluent_builders::ModifyIpamResourceCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyIpamResourceCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`resource_id(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::resource_id) / [`set_resource_id(Option<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::set_resource_id): <p>The ID of the resource you want to modify.</p>
    ///   - [`resource_cidr(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::resource_cidr) / [`set_resource_cidr(Option<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::set_resource_cidr): <p>The CIDR of the resource you want to modify.</p>
    ///   - [`resource_region(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::resource_region) / [`set_resource_region(Option<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::set_resource_region): <p>The Amazon Web Services Region of the resource you want to modify.</p>
    ///   - [`current_ipam_scope_id(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::current_ipam_scope_id) / [`set_current_ipam_scope_id(Option<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::set_current_ipam_scope_id): <p>The ID of the current scope that the resource CIDR is in.</p>
    ///   - [`destination_ipam_scope_id(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::destination_ipam_scope_id) / [`set_destination_ipam_scope_id(Option<String>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::set_destination_ipam_scope_id): <p>The ID of the scope you want to transfer the resource CIDR to.</p>
    ///   - [`monitored(bool)`](crate::client::fluent_builders::ModifyIpamResourceCidr::monitored) / [`set_monitored(Option<bool>)`](crate::client::fluent_builders::ModifyIpamResourceCidr::set_monitored): <p>Determines if the resource is monitored by IPAM. If a resource is monitored, the resource is discovered by IPAM and you can view details about the resource’s CIDR.</p>
    /// - On success, responds with [`ModifyIpamResourceCidrOutput`](crate::output::ModifyIpamResourceCidrOutput) with field(s):
    ///   - [`ipam_resource_cidr(Option<IpamResourceCidr>)`](crate::output::ModifyIpamResourceCidrOutput::ipam_resource_cidr): <p>The CIDR of the resource.</p>
    /// - On failure, responds with [`SdkError<ModifyIpamResourceCidrError>`](crate::error::ModifyIpamResourceCidrError)
    pub fn modify_ipam_resource_cidr(&self) -> fluent_builders::ModifyIpamResourceCidr {
        fluent_builders::ModifyIpamResourceCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyIpamScope`](crate::client::fluent_builders::ModifyIpamScope) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyIpamScope::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyIpamScope::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_scope_id(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamScope::ipam_scope_id) / [`set_ipam_scope_id(Option<String>)`](crate::client::fluent_builders::ModifyIpamScope::set_ipam_scope_id): <p>The ID of the scope you want to modify.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyIpamScope::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyIpamScope::set_description): <p>The description of the scope you want to modify.</p>
    /// - On success, responds with [`ModifyIpamScopeOutput`](crate::output::ModifyIpamScopeOutput) with field(s):
    ///   - [`ipam_scope(Option<IpamScope>)`](crate::output::ModifyIpamScopeOutput::ipam_scope): <p>The results of the modification.</p>
    /// - On failure, responds with [`SdkError<ModifyIpamScopeError>`](crate::error::ModifyIpamScopeError)
    pub fn modify_ipam_scope(&self) -> fluent_builders::ModifyIpamScope {
        fluent_builders::ModifyIpamScope::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyLaunchTemplate`](crate::client::fluent_builders::ModifyLaunchTemplate) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyLaunchTemplate::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyLaunchTemplate::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyLaunchTemplate::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyLaunchTemplate::set_client_token): <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>  <p>Constraint: Maximum 128 ASCII characters.</p>
    ///   - [`launch_template_id(impl Into<String>)`](crate::client::fluent_builders::ModifyLaunchTemplate::launch_template_id) / [`set_launch_template_id(Option<String>)`](crate::client::fluent_builders::ModifyLaunchTemplate::set_launch_template_id): <p>The ID of the launch template.</p>  <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
    ///   - [`launch_template_name(impl Into<String>)`](crate::client::fluent_builders::ModifyLaunchTemplate::launch_template_name) / [`set_launch_template_name(Option<String>)`](crate::client::fluent_builders::ModifyLaunchTemplate::set_launch_template_name): <p>The name of the launch template.</p>  <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
    ///   - [`default_version(impl Into<String>)`](crate::client::fluent_builders::ModifyLaunchTemplate::default_version) / [`set_default_version(Option<String>)`](crate::client::fluent_builders::ModifyLaunchTemplate::set_default_version): <p>The version number of the launch template to set as the default version.</p>
    /// - On success, responds with [`ModifyLaunchTemplateOutput`](crate::output::ModifyLaunchTemplateOutput) with field(s):
    ///   - [`launch_template(Option<LaunchTemplate>)`](crate::output::ModifyLaunchTemplateOutput::launch_template): <p>Information about the launch template.</p>
    /// - On failure, responds with [`SdkError<ModifyLaunchTemplateError>`](crate::error::ModifyLaunchTemplateError)
    pub fn modify_launch_template(&self) -> fluent_builders::ModifyLaunchTemplate {
        fluent_builders::ModifyLaunchTemplate::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyLocalGatewayRoute`](crate::client::fluent_builders::ModifyLocalGatewayRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::set_destination_cidr_block): <p>The CIDR block used for destination matches. The value that you provide must match the CIDR of an existing route in the table.</p>
    ///   - [`local_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::local_gateway_route_table_id) / [`set_local_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::set_local_gateway_route_table_id): <p>The ID of the local gateway route table.</p>
    ///   - [`local_gateway_virtual_interface_group_id(impl Into<String>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::local_gateway_virtual_interface_group_id) / [`set_local_gateway_virtual_interface_group_id(Option<String>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::set_local_gateway_virtual_interface_group_id): <p> The ID of the virtual interface group. </p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::set_network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyLocalGatewayRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyLocalGatewayRouteOutput`](crate::output::ModifyLocalGatewayRouteOutput) with field(s):
    ///   - [`route(Option<LocalGatewayRoute>)`](crate::output::ModifyLocalGatewayRouteOutput::route): <p>Information about the local gateway route table.</p>
    /// - On failure, responds with [`SdkError<ModifyLocalGatewayRouteError>`](crate::error::ModifyLocalGatewayRouteError)
    pub fn modify_local_gateway_route(&self) -> fluent_builders::ModifyLocalGatewayRoute {
        fluent_builders::ModifyLocalGatewayRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyManagedPrefixList`](crate::client::fluent_builders::ModifyManagedPrefixList) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyManagedPrefixList::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyManagedPrefixList::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::ModifyManagedPrefixList::prefix_list_id) / [`set_prefix_list_id(Option<String>)`](crate::client::fluent_builders::ModifyManagedPrefixList::set_prefix_list_id): <p>The ID of the prefix list.</p>
    ///   - [`current_version(i64)`](crate::client::fluent_builders::ModifyManagedPrefixList::current_version) / [`set_current_version(Option<i64>)`](crate::client::fluent_builders::ModifyManagedPrefixList::set_current_version): <p>The current version of the prefix list.</p>
    ///   - [`prefix_list_name(impl Into<String>)`](crate::client::fluent_builders::ModifyManagedPrefixList::prefix_list_name) / [`set_prefix_list_name(Option<String>)`](crate::client::fluent_builders::ModifyManagedPrefixList::set_prefix_list_name): <p>A name for the prefix list.</p>
    ///   - [`add_entries(Vec<AddPrefixListEntry>)`](crate::client::fluent_builders::ModifyManagedPrefixList::add_entries) / [`set_add_entries(Option<Vec<AddPrefixListEntry>>)`](crate::client::fluent_builders::ModifyManagedPrefixList::set_add_entries): <p>One or more entries to add to the prefix list.</p>
    ///   - [`remove_entries(Vec<RemovePrefixListEntry>)`](crate::client::fluent_builders::ModifyManagedPrefixList::remove_entries) / [`set_remove_entries(Option<Vec<RemovePrefixListEntry>>)`](crate::client::fluent_builders::ModifyManagedPrefixList::set_remove_entries): <p>One or more entries to remove from the prefix list.</p>
    ///   - [`max_entries(i32)`](crate::client::fluent_builders::ModifyManagedPrefixList::max_entries) / [`set_max_entries(Option<i32>)`](crate::client::fluent_builders::ModifyManagedPrefixList::set_max_entries): <p>The maximum number of entries for the prefix list. You cannot modify the entries of a prefix list and modify the size of a prefix list at the same time.</p>  <p>If any of the resources that reference the prefix list cannot support the new maximum size, the modify operation fails. Check the state message for the IDs of the first ten resources that do not support the new maximum size.</p>
    /// - On success, responds with [`ModifyManagedPrefixListOutput`](crate::output::ModifyManagedPrefixListOutput) with field(s):
    ///   - [`prefix_list(Option<ManagedPrefixList>)`](crate::output::ModifyManagedPrefixListOutput::prefix_list): <p>Information about the prefix list.</p>
    /// - On failure, responds with [`SdkError<ModifyManagedPrefixListError>`](crate::error::ModifyManagedPrefixListError)
    pub fn modify_managed_prefix_list(&self) -> fluent_builders::ModifyManagedPrefixList {
        fluent_builders::ModifyManagedPrefixList::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyNetworkInterfaceAttribute`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attachment(NetworkInterfaceAttachmentChanges)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::attachment) / [`set_attachment(Option<NetworkInterfaceAttachmentChanges>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::set_attachment): <p>Information about the interface attachment. If modifying the <code>delete on termination</code> attribute, you must specify the ID of the interface attachment.</p>
    ///   - [`description(AttributeValue)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::description) / [`set_description(Option<AttributeValue>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::set_description): <p>A description for the network interface.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`groups(Vec<String>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::groups) / [`set_groups(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::set_groups): <p>Changes the security groups for the network interface. The new set of groups you specify replaces the current set. You must specify at least one group, even if it's just the default security group in the VPC. You must specify the ID of the security group, not the name.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::set_network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`source_dest_check(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::source_dest_check) / [`set_source_dest_check(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::set_source_dest_check): <p>Enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. If the value is <code>true</code>, source/destination checks are enabled; otherwise, they are disabled. The default value is <code>true</code>. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.</p>
    ///   - [`ena_srd_specification(EnaSrdSpecification)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::ena_srd_specification) / [`set_ena_srd_specification(Option<EnaSrdSpecification>)`](crate::client::fluent_builders::ModifyNetworkInterfaceAttribute::set_ena_srd_specification): <p>Updates the ENA Express configuration for the network interface that’s attached to the instance.</p>
    /// - On success, responds with [`ModifyNetworkInterfaceAttributeOutput`](crate::output::ModifyNetworkInterfaceAttributeOutput)

    /// - On failure, responds with [`SdkError<ModifyNetworkInterfaceAttributeError>`](crate::error::ModifyNetworkInterfaceAttributeError)
    pub fn modify_network_interface_attribute(
        &self,
    ) -> fluent_builders::ModifyNetworkInterfaceAttribute {
        fluent_builders::ModifyNetworkInterfaceAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyPrivateDnsNameOptions`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`private_dns_hostname_type(HostnameType)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::private_dns_hostname_type) / [`set_private_dns_hostname_type(Option<HostnameType>)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::set_private_dns_hostname_type): <p>The type of hostname for EC2 instances. For IPv4 only subnets, an instance DNS name must be based on the instance IPv4 address. For IPv6 only subnets, an instance DNS name must be based on the instance ID. For dual-stack subnets, you can specify whether DNS names use the instance IPv4 address or the instance ID.</p>
    ///   - [`enable_resource_name_dns_a_record(bool)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::enable_resource_name_dns_a_record) / [`set_enable_resource_name_dns_a_record(Option<bool>)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::set_enable_resource_name_dns_a_record): <p>Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p>
    ///   - [`enable_resource_name_dns_aaaa_record(bool)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::enable_resource_name_dns_aaaa_record) / [`set_enable_resource_name_dns_aaaa_record(Option<bool>)`](crate::client::fluent_builders::ModifyPrivateDnsNameOptions::set_enable_resource_name_dns_aaaa_record): <p>Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p>
    /// - On success, responds with [`ModifyPrivateDnsNameOptionsOutput`](crate::output::ModifyPrivateDnsNameOptionsOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyPrivateDnsNameOptionsOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyPrivateDnsNameOptionsError>`](crate::error::ModifyPrivateDnsNameOptionsError)
    pub fn modify_private_dns_name_options(&self) -> fluent_builders::ModifyPrivateDnsNameOptions {
        fluent_builders::ModifyPrivateDnsNameOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyReservedInstances`](crate::client::fluent_builders::ModifyReservedInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`reserved_instances_ids(Vec<String>)`](crate::client::fluent_builders::ModifyReservedInstances::reserved_instances_ids) / [`set_reserved_instances_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyReservedInstances::set_reserved_instances_ids): <p>The IDs of the Reserved Instances to modify.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyReservedInstances::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyReservedInstances::set_client_token): <p>A unique, case-sensitive token you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`target_configurations(Vec<ReservedInstancesConfiguration>)`](crate::client::fluent_builders::ModifyReservedInstances::target_configurations) / [`set_target_configurations(Option<Vec<ReservedInstancesConfiguration>>)`](crate::client::fluent_builders::ModifyReservedInstances::set_target_configurations): <p>The configuration settings for the Reserved Instances to modify.</p>
    /// - On success, responds with [`ModifyReservedInstancesOutput`](crate::output::ModifyReservedInstancesOutput) with field(s):
    ///   - [`reserved_instances_modification_id(Option<String>)`](crate::output::ModifyReservedInstancesOutput::reserved_instances_modification_id): <p>The ID for the modification.</p>
    /// - On failure, responds with [`SdkError<ModifyReservedInstancesError>`](crate::error::ModifyReservedInstancesError)
    pub fn modify_reserved_instances(&self) -> fluent_builders::ModifyReservedInstances {
        fluent_builders::ModifyReservedInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifySecurityGroupRules`](crate::client::fluent_builders::ModifySecurityGroupRules) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::ModifySecurityGroupRules::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::ModifySecurityGroupRules::set_group_id): <p>The ID of the security group.</p>
    ///   - [`security_group_rules(Vec<SecurityGroupRuleUpdate>)`](crate::client::fluent_builders::ModifySecurityGroupRules::security_group_rules) / [`set_security_group_rules(Option<Vec<SecurityGroupRuleUpdate>>)`](crate::client::fluent_builders::ModifySecurityGroupRules::set_security_group_rules): <p>Information about the security group properties to update.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifySecurityGroupRules::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifySecurityGroupRules::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifySecurityGroupRulesOutput`](crate::output::ModifySecurityGroupRulesOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifySecurityGroupRulesOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifySecurityGroupRulesError>`](crate::error::ModifySecurityGroupRulesError)
    pub fn modify_security_group_rules(&self) -> fluent_builders::ModifySecurityGroupRules {
        fluent_builders::ModifySecurityGroupRules::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifySnapshotAttribute`](crate::client::fluent_builders::ModifySnapshotAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(SnapshotAttributeName)`](crate::client::fluent_builders::ModifySnapshotAttribute::attribute) / [`set_attribute(Option<SnapshotAttributeName>)`](crate::client::fluent_builders::ModifySnapshotAttribute::set_attribute): <p>The snapshot attribute to modify. Only volume creation permissions can be modified.</p>
    ///   - [`create_volume_permission(CreateVolumePermissionModifications)`](crate::client::fluent_builders::ModifySnapshotAttribute::create_volume_permission) / [`set_create_volume_permission(Option<CreateVolumePermissionModifications>)`](crate::client::fluent_builders::ModifySnapshotAttribute::set_create_volume_permission): <p>A JSON representation of the snapshot attribute modification.</p>
    ///   - [`group_names(Vec<String>)`](crate::client::fluent_builders::ModifySnapshotAttribute::group_names) / [`set_group_names(Option<Vec<String>>)`](crate::client::fluent_builders::ModifySnapshotAttribute::set_group_names): <p>The group to modify for the snapshot.</p>
    ///   - [`operation_type(OperationType)`](crate::client::fluent_builders::ModifySnapshotAttribute::operation_type) / [`set_operation_type(Option<OperationType>)`](crate::client::fluent_builders::ModifySnapshotAttribute::set_operation_type): <p>The type of operation to perform to the attribute.</p>
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::ModifySnapshotAttribute::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::ModifySnapshotAttribute::set_snapshot_id): <p>The ID of the snapshot.</p>
    ///   - [`user_ids(Vec<String>)`](crate::client::fluent_builders::ModifySnapshotAttribute::user_ids) / [`set_user_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifySnapshotAttribute::set_user_ids): <p>The account ID to modify for the snapshot.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifySnapshotAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifySnapshotAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifySnapshotAttributeOutput`](crate::output::ModifySnapshotAttributeOutput)

    /// - On failure, responds with [`SdkError<ModifySnapshotAttributeError>`](crate::error::ModifySnapshotAttributeError)
    pub fn modify_snapshot_attribute(&self) -> fluent_builders::ModifySnapshotAttribute {
        fluent_builders::ModifySnapshotAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifySnapshotTier`](crate::client::fluent_builders::ModifySnapshotTier) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::ModifySnapshotTier::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::ModifySnapshotTier::set_snapshot_id): <p>The ID of the snapshot.</p>
    ///   - [`storage_tier(TargetStorageTier)`](crate::client::fluent_builders::ModifySnapshotTier::storage_tier) / [`set_storage_tier(Option<TargetStorageTier>)`](crate::client::fluent_builders::ModifySnapshotTier::set_storage_tier): <p>The name of the storage tier. You must specify <code>archive</code>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifySnapshotTier::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifySnapshotTier::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifySnapshotTierOutput`](crate::output::ModifySnapshotTierOutput) with field(s):
    ///   - [`snapshot_id(Option<String>)`](crate::output::ModifySnapshotTierOutput::snapshot_id): <p>The ID of the snapshot.</p>
    ///   - [`tiering_start_time(Option<DateTime>)`](crate::output::ModifySnapshotTierOutput::tiering_start_time): <p>The date and time when the archive process was started.</p>
    /// - On failure, responds with [`SdkError<ModifySnapshotTierError>`](crate::error::ModifySnapshotTierError)
    pub fn modify_snapshot_tier(&self) -> fluent_builders::ModifySnapshotTier {
        fluent_builders::ModifySnapshotTier::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifySpotFleetRequest`](crate::client::fluent_builders::ModifySpotFleetRequest) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`excess_capacity_termination_policy(ExcessCapacityTerminationPolicy)`](crate::client::fluent_builders::ModifySpotFleetRequest::excess_capacity_termination_policy) / [`set_excess_capacity_termination_policy(Option<ExcessCapacityTerminationPolicy>)`](crate::client::fluent_builders::ModifySpotFleetRequest::set_excess_capacity_termination_policy): <p>Indicates whether running Spot Instances should be terminated if the target capacity of the Spot Fleet request is decreased below the current size of the Spot Fleet.</p>
    ///   - [`launch_template_configs(Vec<LaunchTemplateConfig>)`](crate::client::fluent_builders::ModifySpotFleetRequest::launch_template_configs) / [`set_launch_template_configs(Option<Vec<LaunchTemplateConfig>>)`](crate::client::fluent_builders::ModifySpotFleetRequest::set_launch_template_configs): <p>The launch template and overrides. You can only use this parameter if you specified a launch template (<code>LaunchTemplateConfigs</code>) in your Spot Fleet request. If you specified <code>LaunchSpecifications</code> in your Spot Fleet request, then omit this parameter.</p>
    ///   - [`spot_fleet_request_id(impl Into<String>)`](crate::client::fluent_builders::ModifySpotFleetRequest::spot_fleet_request_id) / [`set_spot_fleet_request_id(Option<String>)`](crate::client::fluent_builders::ModifySpotFleetRequest::set_spot_fleet_request_id): <p>The ID of the Spot Fleet request.</p>
    ///   - [`target_capacity(i32)`](crate::client::fluent_builders::ModifySpotFleetRequest::target_capacity) / [`set_target_capacity(Option<i32>)`](crate::client::fluent_builders::ModifySpotFleetRequest::set_target_capacity): <p>The size of the fleet.</p>
    ///   - [`on_demand_target_capacity(i32)`](crate::client::fluent_builders::ModifySpotFleetRequest::on_demand_target_capacity) / [`set_on_demand_target_capacity(Option<i32>)`](crate::client::fluent_builders::ModifySpotFleetRequest::set_on_demand_target_capacity): <p>The number of On-Demand Instances in the fleet.</p>
    ///   - [`context(impl Into<String>)`](crate::client::fluent_builders::ModifySpotFleetRequest::context) / [`set_context(Option<String>)`](crate::client::fluent_builders::ModifySpotFleetRequest::set_context): <p>Reserved.</p>
    /// - On success, responds with [`ModifySpotFleetRequestOutput`](crate::output::ModifySpotFleetRequestOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifySpotFleetRequestOutput::return): <p>If the request succeeds, the response returns <code>true</code>. If the request fails, no response is returned, and instead an error message is returned.</p>
    /// - On failure, responds with [`SdkError<ModifySpotFleetRequestError>`](crate::error::ModifySpotFleetRequestError)
    pub fn modify_spot_fleet_request(&self) -> fluent_builders::ModifySpotFleetRequest {
        fluent_builders::ModifySpotFleetRequest::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifySubnetAttribute`](crate::client::fluent_builders::ModifySubnetAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`assign_ipv6_address_on_creation(AttributeBooleanValue)`](crate::client::fluent_builders::ModifySubnetAttribute::assign_ipv6_address_on_creation) / [`set_assign_ipv6_address_on_creation(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_assign_ipv6_address_on_creation): <p>Specify <code>true</code> to indicate that network interfaces created in the specified subnet should be assigned an IPv6 address. This includes a network interface that's created when launching an instance into the subnet (the instance therefore receives an IPv6 address). </p>  <p>If you enable the IPv6 addressing feature for your subnet, your network interface or instance only receives an IPv6 address if it's created using version <code>2016-11-15</code> or later of the Amazon EC2 API.</p>
    ///   - [`map_public_ip_on_launch(AttributeBooleanValue)`](crate::client::fluent_builders::ModifySubnetAttribute::map_public_ip_on_launch) / [`set_map_public_ip_on_launch(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_map_public_ip_on_launch): <p>Specify <code>true</code> to indicate that network interfaces attached to instances created in the specified subnet should be assigned a public IPv4 address.</p>
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::ModifySubnetAttribute::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_subnet_id): <p>The ID of the subnet.</p>
    ///   - [`map_customer_owned_ip_on_launch(AttributeBooleanValue)`](crate::client::fluent_builders::ModifySubnetAttribute::map_customer_owned_ip_on_launch) / [`set_map_customer_owned_ip_on_launch(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_map_customer_owned_ip_on_launch): <p>Specify <code>true</code> to indicate that network interfaces attached to instances created in the specified subnet should be assigned a customer-owned IPv4 address.</p>  <p>When this value is <code>true</code>, you must specify the customer-owned IP pool using <code>CustomerOwnedIpv4Pool</code>.</p>
    ///   - [`customer_owned_ipv4_pool(impl Into<String>)`](crate::client::fluent_builders::ModifySubnetAttribute::customer_owned_ipv4_pool) / [`set_customer_owned_ipv4_pool(Option<String>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_customer_owned_ipv4_pool): <p>The customer-owned IPv4 address pool associated with the subnet.</p>  <p>You must set this value when you specify <code>true</code> for <code>MapCustomerOwnedIpOnLaunch</code>.</p>
    ///   - [`enable_dns64(AttributeBooleanValue)`](crate::client::fluent_builders::ModifySubnetAttribute::enable_dns64) / [`set_enable_dns64(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_enable_dns64): <p>Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this subnet should return synthetic IPv6 addresses for IPv4-only destinations.</p>
    ///   - [`private_dns_hostname_type_on_launch(HostnameType)`](crate::client::fluent_builders::ModifySubnetAttribute::private_dns_hostname_type_on_launch) / [`set_private_dns_hostname_type_on_launch(Option<HostnameType>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_private_dns_hostname_type_on_launch): <p>The type of hostname to assign to instances in the subnet at launch. For IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name can be based on the instance IPv4 address (ip-name) or the instance ID (resource-name). For IPv6 only subnets, an instance DNS name must be based on the instance ID (resource-name).</p>
    ///   - [`enable_resource_name_dns_a_record_on_launch(AttributeBooleanValue)`](crate::client::fluent_builders::ModifySubnetAttribute::enable_resource_name_dns_a_record_on_launch) / [`set_enable_resource_name_dns_a_record_on_launch(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_enable_resource_name_dns_a_record_on_launch): <p>Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p>
    ///   - [`enable_resource_name_dns_aaaa_record_on_launch(AttributeBooleanValue)`](crate::client::fluent_builders::ModifySubnetAttribute::enable_resource_name_dns_aaaa_record_on_launch) / [`set_enable_resource_name_dns_aaaa_record_on_launch(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_enable_resource_name_dns_aaaa_record_on_launch): <p>Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p>
    ///   - [`enable_lni_at_device_index(i32)`](crate::client::fluent_builders::ModifySubnetAttribute::enable_lni_at_device_index) / [`set_enable_lni_at_device_index(Option<i32>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_enable_lni_at_device_index): <p> Indicates the device position for local network interfaces in this subnet. For example, <code>1</code> indicates local network interfaces in this subnet are the secondary network interface (eth1). A local network interface cannot be the primary network interface (eth0). </p>
    ///   - [`disable_lni_at_device_index(AttributeBooleanValue)`](crate::client::fluent_builders::ModifySubnetAttribute::disable_lni_at_device_index) / [`set_disable_lni_at_device_index(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifySubnetAttribute::set_disable_lni_at_device_index): <p> Specify <code>true</code> to indicate that local network interfaces at the current position should be disabled. </p>
    /// - On success, responds with [`ModifySubnetAttributeOutput`](crate::output::ModifySubnetAttributeOutput)

    /// - On failure, responds with [`SdkError<ModifySubnetAttributeError>`](crate::error::ModifySubnetAttributeError)
    pub fn modify_subnet_attribute(&self) -> fluent_builders::ModifySubnetAttribute {
        fluent_builders::ModifySubnetAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyTrafficMirrorFilterNetworkServices`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_filter_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices::traffic_mirror_filter_id) / [`set_traffic_mirror_filter_id(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices::set_traffic_mirror_filter_id): <p>The ID of the Traffic Mirror filter.</p>
    ///   - [`add_network_services(Vec<TrafficMirrorNetworkService>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices::add_network_services) / [`set_add_network_services(Option<Vec<TrafficMirrorNetworkService>>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices::set_add_network_services): <p>The network service, for example Amazon DNS, that you want to mirror.</p>
    ///   - [`remove_network_services(Vec<TrafficMirrorNetworkService>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices::remove_network_services) / [`set_remove_network_services(Option<Vec<TrafficMirrorNetworkService>>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices::set_remove_network_services): <p>The network service, for example Amazon DNS, that you no longer want to mirror.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterNetworkServices::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyTrafficMirrorFilterNetworkServicesOutput`](crate::output::ModifyTrafficMirrorFilterNetworkServicesOutput) with field(s):
    ///   - [`traffic_mirror_filter(Option<TrafficMirrorFilter>)`](crate::output::ModifyTrafficMirrorFilterNetworkServicesOutput::traffic_mirror_filter): <p>The Traffic Mirror filter that the network service is associated with.</p>
    /// - On failure, responds with [`SdkError<ModifyTrafficMirrorFilterNetworkServicesError>`](crate::error::ModifyTrafficMirrorFilterNetworkServicesError)
    pub fn modify_traffic_mirror_filter_network_services(
        &self,
    ) -> fluent_builders::ModifyTrafficMirrorFilterNetworkServices {
        fluent_builders::ModifyTrafficMirrorFilterNetworkServices::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyTrafficMirrorFilterRule`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_filter_rule_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::traffic_mirror_filter_rule_id) / [`set_traffic_mirror_filter_rule_id(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_traffic_mirror_filter_rule_id): <p>The ID of the Traffic Mirror rule.</p>
    ///   - [`traffic_direction(TrafficDirection)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::traffic_direction) / [`set_traffic_direction(Option<TrafficDirection>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_traffic_direction): <p>The type of traffic to assign to the rule.</p>
    ///   - [`rule_number(i32)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::rule_number) / [`set_rule_number(Option<i32>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_rule_number): <p>The number of the Traffic Mirror rule. This number must be unique for each Traffic Mirror rule in a given direction. The rules are processed in ascending order by rule number.</p>
    ///   - [`rule_action(TrafficMirrorRuleAction)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::rule_action) / [`set_rule_action(Option<TrafficMirrorRuleAction>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_rule_action): <p>The action to assign to the rule.</p>
    ///   - [`destination_port_range(TrafficMirrorPortRangeRequest)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::destination_port_range) / [`set_destination_port_range(Option<TrafficMirrorPortRangeRequest>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_destination_port_range): <p>The destination ports that are associated with the Traffic Mirror rule.</p>
    ///   - [`source_port_range(TrafficMirrorPortRangeRequest)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::source_port_range) / [`set_source_port_range(Option<TrafficMirrorPortRangeRequest>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_source_port_range): <p>The port range to assign to the Traffic Mirror rule.</p>
    ///   - [`protocol(i32)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::protocol) / [`set_protocol(Option<i32>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_protocol): <p>The protocol, for example TCP, to assign to the Traffic Mirror rule.</p>
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_destination_cidr_block): <p>The destination CIDR block to assign to the Traffic Mirror rule.</p>
    ///   - [`source_cidr_block(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::source_cidr_block) / [`set_source_cidr_block(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_source_cidr_block): <p>The source CIDR block to assign to the Traffic Mirror rule.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_description): <p>The description to assign to the Traffic Mirror rule.</p>
    ///   - [`remove_fields(Vec<TrafficMirrorFilterRuleField>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::remove_fields) / [`set_remove_fields(Option<Vec<TrafficMirrorFilterRuleField>>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_remove_fields): <p>The properties that you want to remove from the Traffic Mirror filter rule.</p>  <p>When you remove a property from a Traffic Mirror filter rule, the property is set to the default.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyTrafficMirrorFilterRule::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyTrafficMirrorFilterRuleOutput`](crate::output::ModifyTrafficMirrorFilterRuleOutput) with field(s):
    ///   - [`traffic_mirror_filter_rule(Option<TrafficMirrorFilterRule>)`](crate::output::ModifyTrafficMirrorFilterRuleOutput::traffic_mirror_filter_rule): <p>Modifies a Traffic Mirror rule.</p>
    /// - On failure, responds with [`SdkError<ModifyTrafficMirrorFilterRuleError>`](crate::error::ModifyTrafficMirrorFilterRuleError)
    pub fn modify_traffic_mirror_filter_rule(
        &self,
    ) -> fluent_builders::ModifyTrafficMirrorFilterRule {
        fluent_builders::ModifyTrafficMirrorFilterRule::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyTrafficMirrorSession`](crate::client::fluent_builders::ModifyTrafficMirrorSession) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`traffic_mirror_session_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::traffic_mirror_session_id) / [`set_traffic_mirror_session_id(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_traffic_mirror_session_id): <p>The ID of the Traffic Mirror session.</p>
    ///   - [`traffic_mirror_target_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::traffic_mirror_target_id) / [`set_traffic_mirror_target_id(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_traffic_mirror_target_id): <p>The Traffic Mirror target. The target must be in the same VPC as the source, or have a VPC peering connection with the source.</p>
    ///   - [`traffic_mirror_filter_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::traffic_mirror_filter_id) / [`set_traffic_mirror_filter_id(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_traffic_mirror_filter_id): <p>The ID of the Traffic Mirror filter.</p>
    ///   - [`packet_length(i32)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::packet_length) / [`set_packet_length(Option<i32>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_packet_length): <p>The number of bytes in each packet to mirror. These are bytes after the VXLAN header. To mirror a subset, set this to the length (in bytes) to mirror. For example, if you set this value to 100, then the first 100 bytes that meet the filter criteria are copied to the target. Do not specify this parameter when you want to mirror the entire packet.</p>
    ///   - [`session_number(i32)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::session_number) / [`set_session_number(Option<i32>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_session_number): <p>The session number determines the order in which sessions are evaluated when an interface is used by multiple sessions. The first session with a matching filter is the one that mirrors the packets.</p>  <p>Valid values are 1-32766.</p>
    ///   - [`virtual_network_id(i32)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::virtual_network_id) / [`set_virtual_network_id(Option<i32>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_virtual_network_id): <p>The virtual network ID of the Traffic Mirror session.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_description): <p>The description to assign to the Traffic Mirror session.</p>
    ///   - [`remove_fields(Vec<TrafficMirrorSessionField>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::remove_fields) / [`set_remove_fields(Option<Vec<TrafficMirrorSessionField>>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_remove_fields): <p>The properties that you want to remove from the Traffic Mirror session.</p>  <p>When you remove a property from a Traffic Mirror session, the property is set to the default.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyTrafficMirrorSession::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyTrafficMirrorSessionOutput`](crate::output::ModifyTrafficMirrorSessionOutput) with field(s):
    ///   - [`traffic_mirror_session(Option<TrafficMirrorSession>)`](crate::output::ModifyTrafficMirrorSessionOutput::traffic_mirror_session): <p>Information about the Traffic Mirror session.</p>
    /// - On failure, responds with [`SdkError<ModifyTrafficMirrorSessionError>`](crate::error::ModifyTrafficMirrorSessionError)
    pub fn modify_traffic_mirror_session(&self) -> fluent_builders::ModifyTrafficMirrorSession {
        fluent_builders::ModifyTrafficMirrorSession::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyTransitGateway`](crate::client::fluent_builders::ModifyTransitGateway) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTransitGateway::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::ModifyTransitGateway::set_transit_gateway_id): <p>The ID of the transit gateway.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyTransitGateway::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyTransitGateway::set_description): <p>The description for the transit gateway.</p>
    ///   - [`options(ModifyTransitGatewayOptions)`](crate::client::fluent_builders::ModifyTransitGateway::options) / [`set_options(Option<ModifyTransitGatewayOptions>)`](crate::client::fluent_builders::ModifyTransitGateway::set_options): <p>The options to modify.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyTransitGateway::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyTransitGateway::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyTransitGatewayOutput`](crate::output::ModifyTransitGatewayOutput) with field(s):
    ///   - [`transit_gateway(Option<TransitGateway>)`](crate::output::ModifyTransitGatewayOutput::transit_gateway): <p>Information about the transit gateway.</p>
    /// - On failure, responds with [`SdkError<ModifyTransitGatewayError>`](crate::error::ModifyTransitGatewayError)
    pub fn modify_transit_gateway(&self) -> fluent_builders::ModifyTransitGateway {
        fluent_builders::ModifyTransitGateway::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyTransitGatewayPrefixListReference`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::prefix_list_id) / [`set_prefix_list_id(Option<String>)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::set_prefix_list_id): <p>The ID of the prefix list.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::set_transit_gateway_attachment_id): <p>The ID of the attachment to which traffic is routed.</p>
    ///   - [`blackhole(bool)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::blackhole) / [`set_blackhole(Option<bool>)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::set_blackhole): <p>Indicates whether to drop traffic that matches this route.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyTransitGatewayPrefixListReference::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyTransitGatewayPrefixListReferenceOutput`](crate::output::ModifyTransitGatewayPrefixListReferenceOutput) with field(s):
    ///   - [`transit_gateway_prefix_list_reference(Option<TransitGatewayPrefixListReference>)`](crate::output::ModifyTransitGatewayPrefixListReferenceOutput::transit_gateway_prefix_list_reference): <p>Information about the prefix list reference.</p>
    /// - On failure, responds with [`SdkError<ModifyTransitGatewayPrefixListReferenceError>`](crate::error::ModifyTransitGatewayPrefixListReferenceError)
    pub fn modify_transit_gateway_prefix_list_reference(
        &self,
    ) -> fluent_builders::ModifyTransitGatewayPrefixListReference {
        fluent_builders::ModifyTransitGatewayPrefixListReference::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyTransitGatewayVpcAttachment`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`add_subnet_ids(Vec<String>)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::add_subnet_ids) / [`set_add_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::set_add_subnet_ids): <p>The IDs of one or more subnets to add. You can specify at most one subnet per Availability Zone.</p>
    ///   - [`remove_subnet_ids(Vec<String>)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::remove_subnet_ids) / [`set_remove_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::set_remove_subnet_ids): <p>The IDs of one or more subnets to remove.</p>
    ///   - [`options(ModifyTransitGatewayVpcAttachmentRequestOptions)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::options) / [`set_options(Option<ModifyTransitGatewayVpcAttachmentRequestOptions>)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::set_options): <p>The new VPC attachment options.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyTransitGatewayVpcAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyTransitGatewayVpcAttachmentOutput`](crate::output::ModifyTransitGatewayVpcAttachmentOutput) with field(s):
    ///   - [`transit_gateway_vpc_attachment(Option<TransitGatewayVpcAttachment>)`](crate::output::ModifyTransitGatewayVpcAttachmentOutput::transit_gateway_vpc_attachment): <p>Information about the modified attachment.</p>
    /// - On failure, responds with [`SdkError<ModifyTransitGatewayVpcAttachmentError>`](crate::error::ModifyTransitGatewayVpcAttachmentError)
    pub fn modify_transit_gateway_vpc_attachment(
        &self,
    ) -> fluent_builders::ModifyTransitGatewayVpcAttachment {
        fluent_builders::ModifyTransitGatewayVpcAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVerifiedAccessEndpoint`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::verified_access_endpoint_id) / [`set_verified_access_endpoint_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::set_verified_access_endpoint_id): <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`verified_access_group_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::verified_access_group_id) / [`set_verified_access_group_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::set_verified_access_group_id): <p>The ID of the Amazon Web Services Verified Access group.</p>
    ///   - [`load_balancer_options(ModifyVerifiedAccessEndpointLoadBalancerOptions)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::load_balancer_options) / [`set_load_balancer_options(Option<ModifyVerifiedAccessEndpointLoadBalancerOptions>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::set_load_balancer_options): <p>The load balancer details if creating the Amazon Web Services Verified Access endpoint as <code>load-balancer</code>type.</p>
    ///   - [`network_interface_options(ModifyVerifiedAccessEndpointEniOptions)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::network_interface_options) / [`set_network_interface_options(Option<ModifyVerifiedAccessEndpointEniOptions>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::set_network_interface_options): <p>The network interface options.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::set_description): <p>A description for the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpoint::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVerifiedAccessEndpointOutput`](crate::output::ModifyVerifiedAccessEndpointOutput) with field(s):
    ///   - [`verified_access_endpoint(Option<VerifiedAccessEndpoint>)`](crate::output::ModifyVerifiedAccessEndpointOutput::verified_access_endpoint): <p>The Amazon Web Services Verified Access endpoint details.</p>
    /// - On failure, responds with [`SdkError<ModifyVerifiedAccessEndpointError>`](crate::error::ModifyVerifiedAccessEndpointError)
    pub fn modify_verified_access_endpoint(&self) -> fluent_builders::ModifyVerifiedAccessEndpoint {
        fluent_builders::ModifyVerifiedAccessEndpoint::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVerifiedAccessEndpointPolicy`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::verified_access_endpoint_id) / [`set_verified_access_endpoint_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::set_verified_access_endpoint_id): <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
    ///   - [`policy_enabled(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::policy_enabled) / [`set_policy_enabled(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::set_policy_enabled): <p>The status of the Verified Access policy.</p>
    ///   - [`policy_document(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::policy_document) / [`set_policy_document(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::set_policy_document): <p>The Amazon Web Services Verified Access policy document.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessEndpointPolicy::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVerifiedAccessEndpointPolicyOutput`](crate::output::ModifyVerifiedAccessEndpointPolicyOutput) with field(s):
    ///   - [`policy_enabled(Option<bool>)`](crate::output::ModifyVerifiedAccessEndpointPolicyOutput::policy_enabled): <p>The status of the Verified Access policy.</p>
    ///   - [`policy_document(Option<String>)`](crate::output::ModifyVerifiedAccessEndpointPolicyOutput::policy_document): <p>The Amazon Web Services Verified Access policy document.</p>
    /// - On failure, responds with [`SdkError<ModifyVerifiedAccessEndpointPolicyError>`](crate::error::ModifyVerifiedAccessEndpointPolicyError)
    pub fn modify_verified_access_endpoint_policy(
        &self,
    ) -> fluent_builders::ModifyVerifiedAccessEndpointPolicy {
        fluent_builders::ModifyVerifiedAccessEndpointPolicy::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVerifiedAccessGroup`](crate::client::fluent_builders::ModifyVerifiedAccessGroup) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_group_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::verified_access_group_id) / [`set_verified_access_group_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::set_verified_access_group_id): <p>The ID of the Amazon Web Services Verified Access group.</p>
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::set_description): <p>A description for the Amazon Web Services Verified Access group.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroup::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVerifiedAccessGroupOutput`](crate::output::ModifyVerifiedAccessGroupOutput) with field(s):
    ///   - [`verified_access_group(Option<VerifiedAccessGroup>)`](crate::output::ModifyVerifiedAccessGroupOutput::verified_access_group): <p>Details of Amazon Web Services Verified Access group.</p>
    /// - On failure, responds with [`SdkError<ModifyVerifiedAccessGroupError>`](crate::error::ModifyVerifiedAccessGroupError)
    pub fn modify_verified_access_group(&self) -> fluent_builders::ModifyVerifiedAccessGroup {
        fluent_builders::ModifyVerifiedAccessGroup::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVerifiedAccessGroupPolicy`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_group_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::verified_access_group_id) / [`set_verified_access_group_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::set_verified_access_group_id): <p>The ID of the Amazon Web Services Verified Access group.</p>
    ///   - [`policy_enabled(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::policy_enabled) / [`set_policy_enabled(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::set_policy_enabled): <p>The status of the Verified Access policy.</p>
    ///   - [`policy_document(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::policy_document) / [`set_policy_document(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::set_policy_document): <p>The Amazon Web Services Verified Access policy document.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessGroupPolicy::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVerifiedAccessGroupPolicyOutput`](crate::output::ModifyVerifiedAccessGroupPolicyOutput) with field(s):
    ///   - [`policy_enabled(Option<bool>)`](crate::output::ModifyVerifiedAccessGroupPolicyOutput::policy_enabled): <p>The status of the Verified Access policy.</p>
    ///   - [`policy_document(Option<String>)`](crate::output::ModifyVerifiedAccessGroupPolicyOutput::policy_document): <p>The Amazon Web Services Verified Access policy document.</p>
    /// - On failure, responds with [`SdkError<ModifyVerifiedAccessGroupPolicyError>`](crate::error::ModifyVerifiedAccessGroupPolicyError)
    pub fn modify_verified_access_group_policy(
        &self,
    ) -> fluent_builders::ModifyVerifiedAccessGroupPolicy {
        fluent_builders::ModifyVerifiedAccessGroupPolicy::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVerifiedAccessInstance`](crate::client::fluent_builders::ModifyVerifiedAccessInstance) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstance::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstance::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstance::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstance::set_description): <p>A description for the Amazon Web Services Verified Access instance.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessInstance::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstance::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstance::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstance::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    /// - On success, responds with [`ModifyVerifiedAccessInstanceOutput`](crate::output::ModifyVerifiedAccessInstanceOutput) with field(s):
    ///   - [`verified_access_instance(Option<VerifiedAccessInstance>)`](crate::output::ModifyVerifiedAccessInstanceOutput::verified_access_instance): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    /// - On failure, responds with [`SdkError<ModifyVerifiedAccessInstanceError>`](crate::error::ModifyVerifiedAccessInstanceError)
    pub fn modify_verified_access_instance(&self) -> fluent_builders::ModifyVerifiedAccessInstance {
        fluent_builders::ModifyVerifiedAccessInstance::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVerifiedAccessInstanceLoggingConfiguration`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_instance_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::verified_access_instance_id) / [`set_verified_access_instance_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::set_verified_access_instance_id): <p>The ID of the Amazon Web Services Verified Access instance.</p>
    ///   - [`access_logs(VerifiedAccessLogOptions)`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::access_logs) / [`set_access_logs(Option<VerifiedAccessLogOptions>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::set_access_logs): <p>The configuration options for Amazon Web Services Verified Access instances.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    /// - On success, responds with [`ModifyVerifiedAccessInstanceLoggingConfigurationOutput`](crate::output::ModifyVerifiedAccessInstanceLoggingConfigurationOutput) with field(s):
    ///   - [`logging_configuration(Option<VerifiedAccessInstanceLoggingConfiguration>)`](crate::output::ModifyVerifiedAccessInstanceLoggingConfigurationOutput::logging_configuration): <p>The logging configuration for Amazon Web Services Verified Access instance.</p>
    /// - On failure, responds with [`SdkError<ModifyVerifiedAccessInstanceLoggingConfigurationError>`](crate::error::ModifyVerifiedAccessInstanceLoggingConfigurationError)
    pub fn modify_verified_access_instance_logging_configuration(
        &self,
    ) -> fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration {
        fluent_builders::ModifyVerifiedAccessInstanceLoggingConfiguration::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVerifiedAccessTrustProvider`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`verified_access_trust_provider_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::verified_access_trust_provider_id) / [`set_verified_access_trust_provider_id(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::set_verified_access_trust_provider_id): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`oidc_options(ModifyVerifiedAccessTrustProviderOidcOptions)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::oidc_options) / [`set_oidc_options(Option<ModifyVerifiedAccessTrustProviderOidcOptions>)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::set_oidc_options): <p>The OpenID Connect details for an <code>oidc</code>-type, user-identity based trust provider.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::set_description): <p>A description for the Amazon Web Services Verified Access trust provider.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::ModifyVerifiedAccessTrustProvider::set_client_token): <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    /// - On success, responds with [`ModifyVerifiedAccessTrustProviderOutput`](crate::output::ModifyVerifiedAccessTrustProviderOutput) with field(s):
    ///   - [`verified_access_trust_provider(Option<VerifiedAccessTrustProvider>)`](crate::output::ModifyVerifiedAccessTrustProviderOutput::verified_access_trust_provider): <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
    /// - On failure, responds with [`SdkError<ModifyVerifiedAccessTrustProviderError>`](crate::error::ModifyVerifiedAccessTrustProviderError)
    pub fn modify_verified_access_trust_provider(
        &self,
    ) -> fluent_builders::ModifyVerifiedAccessTrustProvider {
        fluent_builders::ModifyVerifiedAccessTrustProvider::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVolume`](crate::client::fluent_builders::ModifyVolume) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVolume::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVolume::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`volume_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVolume::volume_id) / [`set_volume_id(Option<String>)`](crate::client::fluent_builders::ModifyVolume::set_volume_id): <p>The ID of the volume.</p>
    ///   - [`size(i32)`](crate::client::fluent_builders::ModifyVolume::size) / [`set_size(Option<i32>)`](crate::client::fluent_builders::ModifyVolume::set_size): <p>The target size of the volume, in GiB. The target volume size must be greater than or equal to the existing size of the volume.</p>  <p>The following are the supported volumes sizes for each volume type:</p>  <ul>   <li> <p> <code>gp2</code> and <code>gp3</code>: 1-16,384</p> </li>   <li> <p> <code>io1</code> and <code>io2</code>: 4-16,384</p> </li>   <li> <p> <code>st1</code> and <code>sc1</code>: 125-16,384</p> </li>   <li> <p> <code>standard</code>: 1-1,024</p> </li>  </ul>  <p>Default: The existing size is retained.</p>
    ///   - [`volume_type(VolumeType)`](crate::client::fluent_builders::ModifyVolume::volume_type) / [`set_volume_type(Option<VolumeType>)`](crate::client::fluent_builders::ModifyVolume::set_volume_type): <p>The target EBS volume type of the volume. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html">Amazon EBS volume types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>  <p>Default: The existing type is retained.</p>
    ///   - [`iops(i32)`](crate::client::fluent_builders::ModifyVolume::iops) / [`set_iops(Option<i32>)`](crate::client::fluent_builders::ModifyVolume::set_iops): <p>The target IOPS rate of the volume. This parameter is valid only for <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes.</p>  <p>The following are the supported values for each volume type:</p>  <ul>   <li> <p> <code>gp3</code>: 3,000-16,000 IOPS</p> </li>   <li> <p> <code>io1</code>: 100-64,000 IOPS</p> </li>   <li> <p> <code>io2</code>: 100-64,000 IOPS</p> </li>  </ul>  <p>Default: The existing value is retained if you keep the same volume type. If you change the volume type to <code>io1</code>, <code>io2</code>, or <code>gp3</code>, the default is 3,000.</p>
    ///   - [`throughput(i32)`](crate::client::fluent_builders::ModifyVolume::throughput) / [`set_throughput(Option<i32>)`](crate::client::fluent_builders::ModifyVolume::set_throughput): <p>The target throughput of the volume, in MiB/s. This parameter is valid only for <code>gp3</code> volumes. The maximum value is 1,000.</p>  <p>Default: The existing value is retained if the source and target volume type is <code>gp3</code>. Otherwise, the default value is 125.</p>  <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>
    ///   - [`multi_attach_enabled(bool)`](crate::client::fluent_builders::ModifyVolume::multi_attach_enabled) / [`set_multi_attach_enabled(Option<bool>)`](crate::client::fluent_builders::ModifyVolume::set_multi_attach_enabled): <p>Specifies whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances"> Nitro-based instances</a> in the same Availability Zone. This parameter is supported with <code>io1</code> and <code>io2</code> volumes only. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html"> Amazon EBS Multi-Attach</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// - On success, responds with [`ModifyVolumeOutput`](crate::output::ModifyVolumeOutput) with field(s):
    ///   - [`volume_modification(Option<VolumeModification>)`](crate::output::ModifyVolumeOutput::volume_modification): <p>Information about the volume modification.</p>
    /// - On failure, responds with [`SdkError<ModifyVolumeError>`](crate::error::ModifyVolumeError)
    pub fn modify_volume(&self) -> fluent_builders::ModifyVolume {
        fluent_builders::ModifyVolume::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVolumeAttribute`](crate::client::fluent_builders::ModifyVolumeAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`auto_enable_io(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyVolumeAttribute::auto_enable_io) / [`set_auto_enable_io(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyVolumeAttribute::set_auto_enable_io): <p>Indicates whether the volume should be auto-enabled for I/O operations.</p>
    ///   - [`volume_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVolumeAttribute::volume_id) / [`set_volume_id(Option<String>)`](crate::client::fluent_builders::ModifyVolumeAttribute::set_volume_id): <p>The ID of the volume.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVolumeAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVolumeAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVolumeAttributeOutput`](crate::output::ModifyVolumeAttributeOutput)

    /// - On failure, responds with [`SdkError<ModifyVolumeAttributeError>`](crate::error::ModifyVolumeAttributeError)
    pub fn modify_volume_attribute(&self) -> fluent_builders::ModifyVolumeAttribute {
        fluent_builders::ModifyVolumeAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpcAttribute`](crate::client::fluent_builders::ModifyVpcAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`enable_dns_hostnames(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyVpcAttribute::enable_dns_hostnames) / [`set_enable_dns_hostnames(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyVpcAttribute::set_enable_dns_hostnames): <p>Indicates whether the instances launched in the VPC get DNS hostnames. If enabled, instances in the VPC get DNS hostnames; otherwise, they do not.</p>  <p>You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute. You can only enable DNS hostnames if you've enabled DNS support.</p>
    ///   - [`enable_dns_support(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyVpcAttribute::enable_dns_support) / [`set_enable_dns_support(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyVpcAttribute::set_enable_dns_support): <p>Indicates whether the DNS resolution is supported for the VPC. If enabled, queries to the Amazon provided DNS server at the 169.254.169.253 IP address, or the reserved IP address at the base of the VPC network range "plus two" succeed. If disabled, the Amazon provided DNS service in the VPC that resolves public DNS hostnames to IP addresses is not enabled.</p>  <p>You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute.</p>
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcAttribute::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::ModifyVpcAttribute::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`enable_network_address_usage_metrics(AttributeBooleanValue)`](crate::client::fluent_builders::ModifyVpcAttribute::enable_network_address_usage_metrics) / [`set_enable_network_address_usage_metrics(Option<AttributeBooleanValue>)`](crate::client::fluent_builders::ModifyVpcAttribute::set_enable_network_address_usage_metrics): <p>Indicates whether Network Address Usage metrics are enabled for your VPC.</p>
    /// - On success, responds with [`ModifyVpcAttributeOutput`](crate::output::ModifyVpcAttributeOutput)

    /// - On failure, responds with [`SdkError<ModifyVpcAttributeError>`](crate::error::ModifyVpcAttributeError)
    pub fn modify_vpc_attribute(&self) -> fluent_builders::ModifyVpcAttribute {
        fluent_builders::ModifyVpcAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpcEndpoint`](crate::client::fluent_builders::ModifyVpcEndpoint) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpcEndpoint::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::vpc_endpoint_id) / [`set_vpc_endpoint_id(Option<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_vpc_endpoint_id): <p>The ID of the endpoint.</p>
    ///   - [`reset_policy(bool)`](crate::client::fluent_builders::ModifyVpcEndpoint::reset_policy) / [`set_reset_policy(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_reset_policy): <p>(Gateway endpoint) Specify <code>true</code> to reset the policy document to the default policy. The default policy allows full access to the service.</p>
    ///   - [`policy_document(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::policy_document) / [`set_policy_document(Option<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_policy_document): <p>(Interface and gateway endpoints) A policy to attach to the endpoint that controls access to the service. The policy must be in valid JSON format.</p>
    ///   - [`add_route_table_ids(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::add_route_table_ids) / [`set_add_route_table_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_add_route_table_ids): <p>(Gateway endpoint) The IDs of the route tables to associate with the endpoint.</p>
    ///   - [`remove_route_table_ids(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::remove_route_table_ids) / [`set_remove_route_table_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_remove_route_table_ids): <p>(Gateway endpoint) The IDs of the route tables to disassociate from the endpoint.</p>
    ///   - [`add_subnet_ids(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::add_subnet_ids) / [`set_add_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_add_subnet_ids): <p>(Interface and Gateway Load Balancer endpoints) The IDs of the subnets in which to serve the endpoint. For a Gateway Load Balancer endpoint, you can specify only one subnet.</p>
    ///   - [`remove_subnet_ids(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::remove_subnet_ids) / [`set_remove_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_remove_subnet_ids): <p>(Interface endpoint) The IDs of the subnets from which to remove the endpoint.</p>
    ///   - [`add_security_group_ids(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::add_security_group_ids) / [`set_add_security_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_add_security_group_ids): <p>(Interface endpoint) The IDs of the security groups to associate with the network interface.</p>
    ///   - [`remove_security_group_ids(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpoint::remove_security_group_ids) / [`set_remove_security_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_remove_security_group_ids): <p>(Interface endpoint) The IDs of the security groups to disassociate from the network interface.</p>
    ///   - [`ip_address_type(IpAddressType)`](crate::client::fluent_builders::ModifyVpcEndpoint::ip_address_type) / [`set_ip_address_type(Option<IpAddressType>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_ip_address_type): <p>The IP address type for the endpoint.</p>
    ///   - [`dns_options(DnsOptionsSpecification)`](crate::client::fluent_builders::ModifyVpcEndpoint::dns_options) / [`set_dns_options(Option<DnsOptionsSpecification>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_dns_options): <p>The DNS options for the endpoint.</p>
    ///   - [`private_dns_enabled(bool)`](crate::client::fluent_builders::ModifyVpcEndpoint::private_dns_enabled) / [`set_private_dns_enabled(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpoint::set_private_dns_enabled): <p>(Interface endpoint) Indicates whether a private hosted zone is associated with the VPC.</p>
    /// - On success, responds with [`ModifyVpcEndpointOutput`](crate::output::ModifyVpcEndpointOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyVpcEndpointOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyVpcEndpointError>`](crate::error::ModifyVpcEndpointError)
    pub fn modify_vpc_endpoint(&self) -> fluent_builders::ModifyVpcEndpoint {
        fluent_builders::ModifyVpcEndpoint::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpcEndpointConnectionNotification`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`connection_notification_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification::connection_notification_id) / [`set_connection_notification_id(Option<String>)`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification::set_connection_notification_id): <p>The ID of the notification.</p>
    ///   - [`connection_notification_arn(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification::connection_notification_arn) / [`set_connection_notification_arn(Option<String>)`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification::set_connection_notification_arn): <p>The ARN for the SNS topic for the notification.</p>
    ///   - [`connection_events(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification::connection_events) / [`set_connection_events(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointConnectionNotification::set_connection_events): <p>The events for the endpoint. Valid values are <code>Accept</code>, <code>Connect</code>, <code>Delete</code>, and <code>Reject</code>.</p>
    /// - On success, responds with [`ModifyVpcEndpointConnectionNotificationOutput`](crate::output::ModifyVpcEndpointConnectionNotificationOutput) with field(s):
    ///   - [`return_value(Option<bool>)`](crate::output::ModifyVpcEndpointConnectionNotificationOutput::return_value): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyVpcEndpointConnectionNotificationError>`](crate::error::ModifyVpcEndpointConnectionNotificationError)
    pub fn modify_vpc_endpoint_connection_notification(
        &self,
    ) -> fluent_builders::ModifyVpcEndpointConnectionNotification {
        fluent_builders::ModifyVpcEndpointConnectionNotification::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpcEndpointServiceConfiguration`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::service_id) / [`set_service_id(Option<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_service_id): <p>The ID of the service.</p>
    ///   - [`private_dns_name(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::private_dns_name) / [`set_private_dns_name(Option<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_private_dns_name): <p>(Interface endpoint configuration) The private DNS name to assign to the endpoint service.</p>
    ///   - [`remove_private_dns_name(bool)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::remove_private_dns_name) / [`set_remove_private_dns_name(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_remove_private_dns_name): <p>(Interface endpoint configuration) Removes the private DNS name of the endpoint service.</p>
    ///   - [`acceptance_required(bool)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::acceptance_required) / [`set_acceptance_required(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_acceptance_required): <p>Indicates whether requests to create an endpoint to your service must be accepted.</p>
    ///   - [`add_network_load_balancer_arns(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::add_network_load_balancer_arns) / [`set_add_network_load_balancer_arns(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_add_network_load_balancer_arns): <p>The Amazon Resource Names (ARNs) of Network Load Balancers to add to your service configuration.</p>
    ///   - [`remove_network_load_balancer_arns(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::remove_network_load_balancer_arns) / [`set_remove_network_load_balancer_arns(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_remove_network_load_balancer_arns): <p>The Amazon Resource Names (ARNs) of Network Load Balancers to remove from your service configuration.</p>
    ///   - [`add_gateway_load_balancer_arns(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::add_gateway_load_balancer_arns) / [`set_add_gateway_load_balancer_arns(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_add_gateway_load_balancer_arns): <p>The Amazon Resource Names (ARNs) of Gateway Load Balancers to add to your service configuration.</p>
    ///   - [`remove_gateway_load_balancer_arns(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::remove_gateway_load_balancer_arns) / [`set_remove_gateway_load_balancer_arns(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_remove_gateway_load_balancer_arns): <p>The Amazon Resource Names (ARNs) of Gateway Load Balancers to remove from your service configuration.</p>
    ///   - [`add_supported_ip_address_types(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::add_supported_ip_address_types) / [`set_add_supported_ip_address_types(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_add_supported_ip_address_types): <p>The IP address types to add to your service configuration.</p>
    ///   - [`remove_supported_ip_address_types(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::remove_supported_ip_address_types) / [`set_remove_supported_ip_address_types(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointServiceConfiguration::set_remove_supported_ip_address_types): <p>The IP address types to remove from your service configuration.</p>
    /// - On success, responds with [`ModifyVpcEndpointServiceConfigurationOutput`](crate::output::ModifyVpcEndpointServiceConfigurationOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ModifyVpcEndpointServiceConfigurationOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyVpcEndpointServiceConfigurationError>`](crate::error::ModifyVpcEndpointServiceConfigurationError)
    pub fn modify_vpc_endpoint_service_configuration(
        &self,
    ) -> fluent_builders::ModifyVpcEndpointServiceConfiguration {
        fluent_builders::ModifyVpcEndpointServiceConfiguration::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpcEndpointServicePayerResponsibility`](crate::client::fluent_builders::ModifyVpcEndpointServicePayerResponsibility) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpcEndpointServicePayerResponsibility::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePayerResponsibility::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePayerResponsibility::service_id) / [`set_service_id(Option<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePayerResponsibility::set_service_id): <p>The ID of the service.</p>
    ///   - [`payer_responsibility(PayerResponsibility)`](crate::client::fluent_builders::ModifyVpcEndpointServicePayerResponsibility::payer_responsibility) / [`set_payer_responsibility(Option<PayerResponsibility>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePayerResponsibility::set_payer_responsibility): <p>The entity that is responsible for the endpoint costs. The default is the endpoint owner. If you set the payer responsibility to the service owner, you cannot set it back to the endpoint owner.</p>
    /// - On success, responds with [`ModifyVpcEndpointServicePayerResponsibilityOutput`](crate::output::ModifyVpcEndpointServicePayerResponsibilityOutput) with field(s):
    ///   - [`return_value(Option<bool>)`](crate::output::ModifyVpcEndpointServicePayerResponsibilityOutput::return_value): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyVpcEndpointServicePayerResponsibilityError>`](crate::error::ModifyVpcEndpointServicePayerResponsibilityError)
    pub fn modify_vpc_endpoint_service_payer_responsibility(
        &self,
    ) -> fluent_builders::ModifyVpcEndpointServicePayerResponsibility {
        fluent_builders::ModifyVpcEndpointServicePayerResponsibility::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpcEndpointServicePermissions`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions::service_id) / [`set_service_id(Option<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions::set_service_id): <p>The ID of the service.</p>
    ///   - [`add_allowed_principals(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions::add_allowed_principals) / [`set_add_allowed_principals(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions::set_add_allowed_principals): <p>The Amazon Resource Names (ARN) of the principals. Permissions are granted to the principals in this list. To grant permissions to all principals, specify an asterisk (*).</p>
    ///   - [`remove_allowed_principals(Vec<String>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions::remove_allowed_principals) / [`set_remove_allowed_principals(Option<Vec<String>>)`](crate::client::fluent_builders::ModifyVpcEndpointServicePermissions::set_remove_allowed_principals): <p>The Amazon Resource Names (ARN) of the principals. Permissions are revoked for principals in this list.</p>
    /// - On success, responds with [`ModifyVpcEndpointServicePermissionsOutput`](crate::output::ModifyVpcEndpointServicePermissionsOutput) with field(s):
    ///   - [`added_principals(Option<Vec<AddedPrincipal>>)`](crate::output::ModifyVpcEndpointServicePermissionsOutput::added_principals): <p>Information about the added principals.</p>
    ///   - [`return_value(Option<bool>)`](crate::output::ModifyVpcEndpointServicePermissionsOutput::return_value): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyVpcEndpointServicePermissionsError>`](crate::error::ModifyVpcEndpointServicePermissionsError)
    pub fn modify_vpc_endpoint_service_permissions(
        &self,
    ) -> fluent_builders::ModifyVpcEndpointServicePermissions {
        fluent_builders::ModifyVpcEndpointServicePermissions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpcPeeringConnectionOptions`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`accepter_peering_connection_options(PeeringConnectionOptionsRequest)`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions::accepter_peering_connection_options) / [`set_accepter_peering_connection_options(Option<PeeringConnectionOptionsRequest>)`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions::set_accepter_peering_connection_options): <p>The VPC peering connection options for the accepter VPC.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`requester_peering_connection_options(PeeringConnectionOptionsRequest)`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions::requester_peering_connection_options) / [`set_requester_peering_connection_options(Option<PeeringConnectionOptionsRequest>)`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions::set_requester_peering_connection_options): <p>The VPC peering connection options for the requester VPC.</p>
    ///   - [`vpc_peering_connection_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions::vpc_peering_connection_id) / [`set_vpc_peering_connection_id(Option<String>)`](crate::client::fluent_builders::ModifyVpcPeeringConnectionOptions::set_vpc_peering_connection_id): <p>The ID of the VPC peering connection.</p>
    /// - On success, responds with [`ModifyVpcPeeringConnectionOptionsOutput`](crate::output::ModifyVpcPeeringConnectionOptionsOutput) with field(s):
    ///   - [`accepter_peering_connection_options(Option<PeeringConnectionOptions>)`](crate::output::ModifyVpcPeeringConnectionOptionsOutput::accepter_peering_connection_options): <p>Information about the VPC peering connection options for the accepter VPC.</p>
    ///   - [`requester_peering_connection_options(Option<PeeringConnectionOptions>)`](crate::output::ModifyVpcPeeringConnectionOptionsOutput::requester_peering_connection_options): <p>Information about the VPC peering connection options for the requester VPC.</p>
    /// - On failure, responds with [`SdkError<ModifyVpcPeeringConnectionOptionsError>`](crate::error::ModifyVpcPeeringConnectionOptionsError)
    pub fn modify_vpc_peering_connection_options(
        &self,
    ) -> fluent_builders::ModifyVpcPeeringConnectionOptions {
        fluent_builders::ModifyVpcPeeringConnectionOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpcTenancy`](crate::client::fluent_builders::ModifyVpcTenancy) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpc_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpcTenancy::vpc_id) / [`set_vpc_id(Option<String>)`](crate::client::fluent_builders::ModifyVpcTenancy::set_vpc_id): <p>The ID of the VPC.</p>
    ///   - [`instance_tenancy(VpcTenancy)`](crate::client::fluent_builders::ModifyVpcTenancy::instance_tenancy) / [`set_instance_tenancy(Option<VpcTenancy>)`](crate::client::fluent_builders::ModifyVpcTenancy::set_instance_tenancy): <p>The instance tenancy attribute for the VPC. </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpcTenancy::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpcTenancy::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVpcTenancyOutput`](crate::output::ModifyVpcTenancyOutput) with field(s):
    ///   - [`return_value(Option<bool>)`](crate::output::ModifyVpcTenancyOutput::return_value): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    /// - On failure, responds with [`SdkError<ModifyVpcTenancyError>`](crate::error::ModifyVpcTenancyError)
    pub fn modify_vpc_tenancy(&self) -> fluent_builders::ModifyVpcTenancy {
        fluent_builders::ModifyVpcTenancy::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpnConnection`](crate::client::fluent_builders::ModifyVpnConnection) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpn_connection_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnection::vpn_connection_id) / [`set_vpn_connection_id(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnection::set_vpn_connection_id): <p>The ID of the VPN connection.</p>
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnection::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnection::set_transit_gateway_id): <p>The ID of the transit gateway.</p>
    ///   - [`customer_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnection::customer_gateway_id) / [`set_customer_gateway_id(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnection::set_customer_gateway_id): <p>The ID of the customer gateway at your end of the VPN connection.</p>
    ///   - [`vpn_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnection::vpn_gateway_id) / [`set_vpn_gateway_id(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnection::set_vpn_gateway_id): <p>The ID of the virtual private gateway at the Amazon Web Services side of the VPN connection.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpnConnection::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpnConnection::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVpnConnectionOutput`](crate::output::ModifyVpnConnectionOutput) with field(s):
    ///   - [`vpn_connection(Option<VpnConnection>)`](crate::output::ModifyVpnConnectionOutput::vpn_connection): <p>Information about the VPN connection.</p>
    /// - On failure, responds with [`SdkError<ModifyVpnConnectionError>`](crate::error::ModifyVpnConnectionError)
    pub fn modify_vpn_connection(&self) -> fluent_builders::ModifyVpnConnection {
        fluent_builders::ModifyVpnConnection::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpnConnectionOptions`](crate::client::fluent_builders::ModifyVpnConnectionOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpn_connection_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::vpn_connection_id) / [`set_vpn_connection_id(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::set_vpn_connection_id): <p>The ID of the Site-to-Site VPN connection. </p>
    ///   - [`local_ipv4_network_cidr(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::local_ipv4_network_cidr) / [`set_local_ipv4_network_cidr(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::set_local_ipv4_network_cidr): <p>The IPv4 CIDR on the customer gateway (on-premises) side of the VPN connection.</p>  <p>Default: <code>0.0.0.0/0</code> </p>
    ///   - [`remote_ipv4_network_cidr(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::remote_ipv4_network_cidr) / [`set_remote_ipv4_network_cidr(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::set_remote_ipv4_network_cidr): <p>The IPv4 CIDR on the Amazon Web Services side of the VPN connection.</p>  <p>Default: <code>0.0.0.0/0</code> </p>
    ///   - [`local_ipv6_network_cidr(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::local_ipv6_network_cidr) / [`set_local_ipv6_network_cidr(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::set_local_ipv6_network_cidr): <p>The IPv6 CIDR on the customer gateway (on-premises) side of the VPN connection.</p>  <p>Default: <code>::/0</code> </p>
    ///   - [`remote_ipv6_network_cidr(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::remote_ipv6_network_cidr) / [`set_remote_ipv6_network_cidr(Option<String>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::set_remote_ipv6_network_cidr): <p>The IPv6 CIDR on the Amazon Web Services side of the VPN connection.</p>  <p>Default: <code>::/0</code> </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpnConnectionOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVpnConnectionOptionsOutput`](crate::output::ModifyVpnConnectionOptionsOutput) with field(s):
    ///   - [`vpn_connection(Option<VpnConnection>)`](crate::output::ModifyVpnConnectionOptionsOutput::vpn_connection): <p>Information about the VPN connection.</p>
    /// - On failure, responds with [`SdkError<ModifyVpnConnectionOptionsError>`](crate::error::ModifyVpnConnectionOptionsError)
    pub fn modify_vpn_connection_options(&self) -> fluent_builders::ModifyVpnConnectionOptions {
        fluent_builders::ModifyVpnConnectionOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpnTunnelCertificate`](crate::client::fluent_builders::ModifyVpnTunnelCertificate) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpn_connection_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnTunnelCertificate::vpn_connection_id) / [`set_vpn_connection_id(Option<String>)`](crate::client::fluent_builders::ModifyVpnTunnelCertificate::set_vpn_connection_id): <p>The ID of the Amazon Web Services Site-to-Site VPN connection.</p>
    ///   - [`vpn_tunnel_outside_ip_address(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnTunnelCertificate::vpn_tunnel_outside_ip_address) / [`set_vpn_tunnel_outside_ip_address(Option<String>)`](crate::client::fluent_builders::ModifyVpnTunnelCertificate::set_vpn_tunnel_outside_ip_address): <p>The external IP address of the VPN tunnel.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpnTunnelCertificate::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpnTunnelCertificate::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVpnTunnelCertificateOutput`](crate::output::ModifyVpnTunnelCertificateOutput) with field(s):
    ///   - [`vpn_connection(Option<VpnConnection>)`](crate::output::ModifyVpnTunnelCertificateOutput::vpn_connection): <p>Information about the VPN connection.</p>
    /// - On failure, responds with [`SdkError<ModifyVpnTunnelCertificateError>`](crate::error::ModifyVpnTunnelCertificateError)
    pub fn modify_vpn_tunnel_certificate(&self) -> fluent_builders::ModifyVpnTunnelCertificate {
        fluent_builders::ModifyVpnTunnelCertificate::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ModifyVpnTunnelOptions`](crate::client::fluent_builders::ModifyVpnTunnelOptions) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`vpn_connection_id(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnTunnelOptions::vpn_connection_id) / [`set_vpn_connection_id(Option<String>)`](crate::client::fluent_builders::ModifyVpnTunnelOptions::set_vpn_connection_id): <p>The ID of the Amazon Web Services Site-to-Site VPN connection.</p>
    ///   - [`vpn_tunnel_outside_ip_address(impl Into<String>)`](crate::client::fluent_builders::ModifyVpnTunnelOptions::vpn_tunnel_outside_ip_address) / [`set_vpn_tunnel_outside_ip_address(Option<String>)`](crate::client::fluent_builders::ModifyVpnTunnelOptions::set_vpn_tunnel_outside_ip_address): <p>The external IP address of the VPN tunnel.</p>
    ///   - [`tunnel_options(ModifyVpnTunnelOptionsSpecification)`](crate::client::fluent_builders::ModifyVpnTunnelOptions::tunnel_options) / [`set_tunnel_options(Option<ModifyVpnTunnelOptionsSpecification>)`](crate::client::fluent_builders::ModifyVpnTunnelOptions::set_tunnel_options): <p>The tunnel options to modify.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ModifyVpnTunnelOptions::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ModifyVpnTunnelOptions::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ModifyVpnTunnelOptionsOutput`](crate::output::ModifyVpnTunnelOptionsOutput) with field(s):
    ///   - [`vpn_connection(Option<VpnConnection>)`](crate::output::ModifyVpnTunnelOptionsOutput::vpn_connection): <p>Information about the VPN connection.</p>
    /// - On failure, responds with [`SdkError<ModifyVpnTunnelOptionsError>`](crate::error::ModifyVpnTunnelOptionsError)
    pub fn modify_vpn_tunnel_options(&self) -> fluent_builders::ModifyVpnTunnelOptions {
        fluent_builders::ModifyVpnTunnelOptions::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`MonitorInstances`](crate::client::fluent_builders::MonitorInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::MonitorInstances::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::MonitorInstances::set_instance_ids): <p>The IDs of the instances.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::MonitorInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::MonitorInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`MonitorInstancesOutput`](crate::output::MonitorInstancesOutput) with field(s):
    ///   - [`instance_monitorings(Option<Vec<InstanceMonitoring>>)`](crate::output::MonitorInstancesOutput::instance_monitorings): <p>The monitoring information.</p>
    /// - On failure, responds with [`SdkError<MonitorInstancesError>`](crate::error::MonitorInstancesError)
    pub fn monitor_instances(&self) -> fluent_builders::MonitorInstances {
        fluent_builders::MonitorInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`MoveAddressToVpc`](crate::client::fluent_builders::MoveAddressToVpc) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::MoveAddressToVpc::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::MoveAddressToVpc::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`public_ip(impl Into<String>)`](crate::client::fluent_builders::MoveAddressToVpc::public_ip) / [`set_public_ip(Option<String>)`](crate::client::fluent_builders::MoveAddressToVpc::set_public_ip): <p>The Elastic IP address.</p>
    /// - On success, responds with [`MoveAddressToVpcOutput`](crate::output::MoveAddressToVpcOutput) with field(s):
    ///   - [`allocation_id(Option<String>)`](crate::output::MoveAddressToVpcOutput::allocation_id): <p>The allocation ID for the Elastic IP address.</p>
    ///   - [`status(Option<Status>)`](crate::output::MoveAddressToVpcOutput::status): <p>The status of the move of the IP address.</p>
    /// - On failure, responds with [`SdkError<MoveAddressToVpcError>`](crate::error::MoveAddressToVpcError)
    pub fn move_address_to_vpc(&self) -> fluent_builders::MoveAddressToVpc {
        fluent_builders::MoveAddressToVpc::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`MoveByoipCidrToIpam`](crate::client::fluent_builders::MoveByoipCidrToIpam) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::MoveByoipCidrToIpam::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::MoveByoipCidrToIpam::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::MoveByoipCidrToIpam::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::MoveByoipCidrToIpam::set_cidr): <p>The BYOIP CIDR.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::MoveByoipCidrToIpam::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::MoveByoipCidrToIpam::set_ipam_pool_id): <p>The IPAM pool ID.</p>
    ///   - [`ipam_pool_owner(impl Into<String>)`](crate::client::fluent_builders::MoveByoipCidrToIpam::ipam_pool_owner) / [`set_ipam_pool_owner(Option<String>)`](crate::client::fluent_builders::MoveByoipCidrToIpam::set_ipam_pool_owner): <p>The Amazon Web Services account ID of the owner of the IPAM pool.</p>
    /// - On success, responds with [`MoveByoipCidrToIpamOutput`](crate::output::MoveByoipCidrToIpamOutput) with field(s):
    ///   - [`byoip_cidr(Option<ByoipCidr>)`](crate::output::MoveByoipCidrToIpamOutput::byoip_cidr): <p>The BYOIP CIDR.</p>
    /// - On failure, responds with [`SdkError<MoveByoipCidrToIpamError>`](crate::error::MoveByoipCidrToIpamError)
    pub fn move_byoip_cidr_to_ipam(&self) -> fluent_builders::MoveByoipCidrToIpam {
        fluent_builders::MoveByoipCidrToIpam::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ProvisionByoipCidr`](crate::client::fluent_builders::ProvisionByoipCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::ProvisionByoipCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::ProvisionByoipCidr::set_cidr): <p>The public IPv4 or IPv6 address range, in CIDR notation. The most specific IPv4 prefix that you can specify is /24. The most specific IPv6 prefix you can specify is /56. The address range cannot overlap with another address range that you've brought to this or another Region.</p>
    ///   - [`cidr_authorization_context(CidrAuthorizationContext)`](crate::client::fluent_builders::ProvisionByoipCidr::cidr_authorization_context) / [`set_cidr_authorization_context(Option<CidrAuthorizationContext>)`](crate::client::fluent_builders::ProvisionByoipCidr::set_cidr_authorization_context): <p>A signed document that proves that you are authorized to bring the specified IP address range to Amazon using BYOIP.</p>
    ///   - [`publicly_advertisable(bool)`](crate::client::fluent_builders::ProvisionByoipCidr::publicly_advertisable) / [`set_publicly_advertisable(Option<bool>)`](crate::client::fluent_builders::ProvisionByoipCidr::set_publicly_advertisable): <p>(IPv6 only) Indicate whether the address range will be publicly advertised to the internet.</p>  <p>Default: true</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ProvisionByoipCidr::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ProvisionByoipCidr::set_description): <p>A description for the address range and the address pool.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ProvisionByoipCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ProvisionByoipCidr::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`pool_tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::ProvisionByoipCidr::pool_tag_specifications) / [`set_pool_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::ProvisionByoipCidr::set_pool_tag_specifications): <p>The tags to apply to the address pool.</p>
    ///   - [`multi_region(bool)`](crate::client::fluent_builders::ProvisionByoipCidr::multi_region) / [`set_multi_region(Option<bool>)`](crate::client::fluent_builders::ProvisionByoipCidr::set_multi_region): <p>Reserved.</p>
    /// - On success, responds with [`ProvisionByoipCidrOutput`](crate::output::ProvisionByoipCidrOutput) with field(s):
    ///   - [`byoip_cidr(Option<ByoipCidr>)`](crate::output::ProvisionByoipCidrOutput::byoip_cidr): <p>Information about the address range.</p>
    /// - On failure, responds with [`SdkError<ProvisionByoipCidrError>`](crate::error::ProvisionByoipCidrError)
    pub fn provision_byoip_cidr(&self) -> fluent_builders::ProvisionByoipCidr {
        fluent_builders::ProvisionByoipCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ProvisionIpamPoolCidr`](crate::client::fluent_builders::ProvisionIpamPoolCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ProvisionIpamPoolCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ProvisionIpamPoolCidr::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::ProvisionIpamPoolCidr::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::ProvisionIpamPoolCidr::set_ipam_pool_id): <p>The ID of the IPAM pool to which you want to assign a CIDR.</p>
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::ProvisionIpamPoolCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::ProvisionIpamPoolCidr::set_cidr): <p>The CIDR you want to assign to the IPAM pool.</p>
    ///   - [`cidr_authorization_context(IpamCidrAuthorizationContext)`](crate::client::fluent_builders::ProvisionIpamPoolCidr::cidr_authorization_context) / [`set_cidr_authorization_context(Option<IpamCidrAuthorizationContext>)`](crate::client::fluent_builders::ProvisionIpamPoolCidr::set_cidr_authorization_context): <p>A signed document that proves that you are authorized to bring a specified IP address range to Amazon using BYOIP. This option applies to public pools only.</p>
    /// - On success, responds with [`ProvisionIpamPoolCidrOutput`](crate::output::ProvisionIpamPoolCidrOutput) with field(s):
    ///   - [`ipam_pool_cidr(Option<IpamPoolCidr>)`](crate::output::ProvisionIpamPoolCidrOutput::ipam_pool_cidr): <p>Information about the provisioned CIDR.</p>
    /// - On failure, responds with [`SdkError<ProvisionIpamPoolCidrError>`](crate::error::ProvisionIpamPoolCidrError)
    pub fn provision_ipam_pool_cidr(&self) -> fluent_builders::ProvisionIpamPoolCidr {
        fluent_builders::ProvisionIpamPoolCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ProvisionPublicIpv4PoolCidr`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr::set_ipam_pool_id): <p>The ID of the IPAM pool you would like to use to allocate this CIDR.</p>
    ///   - [`pool_id(impl Into<String>)`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr::pool_id) / [`set_pool_id(Option<String>)`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr::set_pool_id): <p>The ID of the public IPv4 pool you would like to use for this CIDR.</p>
    ///   - [`netmask_length(i32)`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr::netmask_length) / [`set_netmask_length(Option<i32>)`](crate::client::fluent_builders::ProvisionPublicIpv4PoolCidr::set_netmask_length): <p>The netmask length of the CIDR you would like to allocate to the public IPv4 pool.</p>
    /// - On success, responds with [`ProvisionPublicIpv4PoolCidrOutput`](crate::output::ProvisionPublicIpv4PoolCidrOutput) with field(s):
    ///   - [`pool_id(Option<String>)`](crate::output::ProvisionPublicIpv4PoolCidrOutput::pool_id): <p>The ID of the pool that you want to provision the CIDR to.</p>
    ///   - [`pool_address_range(Option<PublicIpv4PoolRange>)`](crate::output::ProvisionPublicIpv4PoolCidrOutput::pool_address_range): <p>Information about the address range of the public IPv4 pool.</p>
    /// - On failure, responds with [`SdkError<ProvisionPublicIpv4PoolCidrError>`](crate::error::ProvisionPublicIpv4PoolCidrError)
    pub fn provision_public_ipv4_pool_cidr(&self) -> fluent_builders::ProvisionPublicIpv4PoolCidr {
        fluent_builders::ProvisionPublicIpv4PoolCidr::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`PurchaseHostReservation`](crate::client::fluent_builders::PurchaseHostReservation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::PurchaseHostReservation::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::PurchaseHostReservation::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`currency_code(CurrencyCodeValues)`](crate::client::fluent_builders::PurchaseHostReservation::currency_code) / [`set_currency_code(Option<CurrencyCodeValues>)`](crate::client::fluent_builders::PurchaseHostReservation::set_currency_code): <p>The currency in which the <code>totalUpfrontPrice</code>, <code>LimitPrice</code>, and <code>totalHourlyPrice</code> amounts are specified. At this time, the only supported currency is <code>USD</code>.</p>
    ///   - [`host_id_set(Vec<String>)`](crate::client::fluent_builders::PurchaseHostReservation::host_id_set) / [`set_host_id_set(Option<Vec<String>>)`](crate::client::fluent_builders::PurchaseHostReservation::set_host_id_set): <p>The IDs of the Dedicated Hosts with which the reservation will be associated.</p>
    ///   - [`limit_price(impl Into<String>)`](crate::client::fluent_builders::PurchaseHostReservation::limit_price) / [`set_limit_price(Option<String>)`](crate::client::fluent_builders::PurchaseHostReservation::set_limit_price): <p>The specified limit is checked against the total upfront cost of the reservation (calculated as the offering's upfront cost multiplied by the host count). If the total upfront cost is greater than the specified price limit, the request fails. This is used to ensure that the purchase does not exceed the expected upfront cost of the purchase. At this time, the only supported currency is <code>USD</code>. For example, to indicate a limit price of USD 100, specify 100.00.</p>
    ///   - [`offering_id(impl Into<String>)`](crate::client::fluent_builders::PurchaseHostReservation::offering_id) / [`set_offering_id(Option<String>)`](crate::client::fluent_builders::PurchaseHostReservation::set_offering_id): <p>The ID of the offering.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::PurchaseHostReservation::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::PurchaseHostReservation::set_tag_specifications): <p>The tags to apply to the Dedicated Host Reservation during purchase.</p>
    /// - On success, responds with [`PurchaseHostReservationOutput`](crate::output::PurchaseHostReservationOutput) with field(s):
    ///   - [`client_token(Option<String>)`](crate::output::PurchaseHostReservationOutput::client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`currency_code(Option<CurrencyCodeValues>)`](crate::output::PurchaseHostReservationOutput::currency_code): <p>The currency in which the <code>totalUpfrontPrice</code> and <code>totalHourlyPrice</code> amounts are specified. At this time, the only supported currency is <code>USD</code>.</p>
    ///   - [`purchase(Option<Vec<Purchase>>)`](crate::output::PurchaseHostReservationOutput::purchase): <p>Describes the details of the purchase.</p>
    ///   - [`total_hourly_price(Option<String>)`](crate::output::PurchaseHostReservationOutput::total_hourly_price): <p>The total hourly price of the reservation calculated per hour.</p>
    ///   - [`total_upfront_price(Option<String>)`](crate::output::PurchaseHostReservationOutput::total_upfront_price): <p>The total amount charged to your account when you purchase the reservation.</p>
    /// - On failure, responds with [`SdkError<PurchaseHostReservationError>`](crate::error::PurchaseHostReservationError)
    pub fn purchase_host_reservation(&self) -> fluent_builders::PurchaseHostReservation {
        fluent_builders::PurchaseHostReservation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`PurchaseReservedInstancesOffering`](crate::client::fluent_builders::PurchaseReservedInstancesOffering) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_count(i32)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::instance_count) / [`set_instance_count(Option<i32>)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::set_instance_count): <p>The number of Reserved Instances to purchase.</p>
    ///   - [`reserved_instances_offering_id(impl Into<String>)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::reserved_instances_offering_id) / [`set_reserved_instances_offering_id(Option<String>)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::set_reserved_instances_offering_id): <p>The ID of the Reserved Instance offering to purchase.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`limit_price(ReservedInstanceLimitPrice)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::limit_price) / [`set_limit_price(Option<ReservedInstanceLimitPrice>)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::set_limit_price): <p>Specified for Reserved Instance Marketplace offerings to limit the total order and ensure that the Reserved Instances are not purchased at unexpected prices.</p>
    ///   - [`purchase_time(DateTime)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::purchase_time) / [`set_purchase_time(Option<DateTime>)`](crate::client::fluent_builders::PurchaseReservedInstancesOffering::set_purchase_time): <p>The time at which to purchase the Reserved Instance, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
    /// - On success, responds with [`PurchaseReservedInstancesOfferingOutput`](crate::output::PurchaseReservedInstancesOfferingOutput) with field(s):
    ///   - [`reserved_instances_id(Option<String>)`](crate::output::PurchaseReservedInstancesOfferingOutput::reserved_instances_id): <p>The IDs of the purchased Reserved Instances. If your purchase crosses into a discounted pricing tier, the final Reserved Instances IDs might change. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers">Crossing pricing tiers</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// - On failure, responds with [`SdkError<PurchaseReservedInstancesOfferingError>`](crate::error::PurchaseReservedInstancesOfferingError)
    pub fn purchase_reserved_instances_offering(
        &self,
    ) -> fluent_builders::PurchaseReservedInstancesOffering {
        fluent_builders::PurchaseReservedInstancesOffering::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`PurchaseScheduledInstances`](crate::client::fluent_builders::PurchaseScheduledInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::PurchaseScheduledInstances::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::PurchaseScheduledInstances::set_client_token): <p>Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::PurchaseScheduledInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::PurchaseScheduledInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`purchase_requests(Vec<PurchaseRequest>)`](crate::client::fluent_builders::PurchaseScheduledInstances::purchase_requests) / [`set_purchase_requests(Option<Vec<PurchaseRequest>>)`](crate::client::fluent_builders::PurchaseScheduledInstances::set_purchase_requests): <p>The purchase requests.</p>
    /// - On success, responds with [`PurchaseScheduledInstancesOutput`](crate::output::PurchaseScheduledInstancesOutput) with field(s):
    ///   - [`scheduled_instance_set(Option<Vec<ScheduledInstance>>)`](crate::output::PurchaseScheduledInstancesOutput::scheduled_instance_set): <p>Information about the Scheduled Instances.</p>
    /// - On failure, responds with [`SdkError<PurchaseScheduledInstancesError>`](crate::error::PurchaseScheduledInstancesError)
    pub fn purchase_scheduled_instances(&self) -> fluent_builders::PurchaseScheduledInstances {
        fluent_builders::PurchaseScheduledInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RebootInstances`](crate::client::fluent_builders::RebootInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::RebootInstances::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::RebootInstances::set_instance_ids): <p>The instance IDs.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RebootInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RebootInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RebootInstancesOutput`](crate::output::RebootInstancesOutput)

    /// - On failure, responds with [`SdkError<RebootInstancesError>`](crate::error::RebootInstancesError)
    pub fn reboot_instances(&self) -> fluent_builders::RebootInstances {
        fluent_builders::RebootInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RegisterImage`](crate::client::fluent_builders::RegisterImage) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_location(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::image_location) / [`set_image_location(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_image_location): <p>The full path to your AMI manifest in Amazon S3 storage. The specified bucket must have the <code>aws-exec-read</code> canned access control list (ACL) to ensure that it can be accessed by Amazon EC2. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl">Canned ACLs</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
    ///   - [`architecture(ArchitectureValues)`](crate::client::fluent_builders::RegisterImage::architecture) / [`set_architecture(Option<ArchitectureValues>)`](crate::client::fluent_builders::RegisterImage::set_architecture): <p>The architecture of the AMI.</p>  <p>Default: For Amazon EBS-backed AMIs, <code>i386</code>. For instance store-backed AMIs, the architecture specified in the manifest file.</p>
    ///   - [`block_device_mappings(Vec<BlockDeviceMapping>)`](crate::client::fluent_builders::RegisterImage::block_device_mappings) / [`set_block_device_mappings(Option<Vec<BlockDeviceMapping>>)`](crate::client::fluent_builders::RegisterImage::set_block_device_mappings): <p>The block device mapping entries.</p>  <p>If you specify an Amazon EBS volume using the ID of an Amazon EBS snapshot, you can't specify the encryption state of the volume.</p>  <p>If you create an AMI on an Outpost, then all backing snapshots must be on the same Outpost or in the Region of that Outpost. AMIs on an Outpost that include local snapshots can be used to launch instances on the same Outpost only. For more information, <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami">Amazon EBS local snapshots on Outposts</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_description): <p>A description for your AMI.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RegisterImage::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RegisterImage::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ena_support(bool)`](crate::client::fluent_builders::RegisterImage::ena_support) / [`set_ena_support(Option<bool>)`](crate::client::fluent_builders::RegisterImage::set_ena_support): <p>Set to <code>true</code> to enable enhanced networking with ENA for the AMI and any instances that you launch from the AMI.</p>  <p>This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.</p>
    ///   - [`kernel_id(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::kernel_id) / [`set_kernel_id(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_kernel_id): <p>The ID of the kernel.</p>
    ///   - [`name(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::name) / [`set_name(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_name): <p>A name for your AMI.</p>  <p>Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)</p>
    ///   - [`billing_products(Vec<String>)`](crate::client::fluent_builders::RegisterImage::billing_products) / [`set_billing_products(Option<Vec<String>>)`](crate::client::fluent_builders::RegisterImage::set_billing_products): <p>The billing product codes. Your account must be authorized to specify billing product codes.</p>  <p>If your account is not authorized to specify billing product codes, you can publish AMIs that include billable software and list them on the Amazon Web Services Marketplace. You must first register as a seller on the Amazon Web Services Marketplace. For more information, see <a href="https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html">Getting started as a seller</a> and <a href="https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html">AMI-based products</a> in the <i>Amazon Web Services Marketplace Seller Guide</i>.</p>
    ///   - [`ramdisk_id(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::ramdisk_id) / [`set_ramdisk_id(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_ramdisk_id): <p>The ID of the RAM disk.</p>
    ///   - [`root_device_name(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::root_device_name) / [`set_root_device_name(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_root_device_name): <p>The device name of the root device volume (for example, <code>/dev/sda1</code>).</p>
    ///   - [`sriov_net_support(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::sriov_net_support) / [`set_sriov_net_support(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_sriov_net_support): <p>Set to <code>simple</code> to enable enhanced networking with the Intel 82599 Virtual Function interface for the AMI and any instances that you launch from the AMI.</p>  <p>There is no way to disable <code>sriovNetSupport</code> at this time.</p>  <p>This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.</p>
    ///   - [`virtualization_type(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::virtualization_type) / [`set_virtualization_type(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_virtualization_type): <p>The type of virtualization (<code>hvm</code> | <code>paravirtual</code>).</p>  <p>Default: <code>paravirtual</code> </p>
    ///   - [`boot_mode(BootModeValues)`](crate::client::fluent_builders::RegisterImage::boot_mode) / [`set_boot_mode(Option<BootModeValues>)`](crate::client::fluent_builders::RegisterImage::set_boot_mode): <p>The boot mode of the AMI. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html">Boot modes</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`tpm_support(TpmSupportValues)`](crate::client::fluent_builders::RegisterImage::tpm_support) / [`set_tpm_support(Option<TpmSupportValues>)`](crate::client::fluent_builders::RegisterImage::set_tpm_support): <p>Set to <code>v2.0</code> to enable Trusted Platform Module (TPM) support. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html">NitroTPM</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`uefi_data(impl Into<String>)`](crate::client::fluent_builders::RegisterImage::uefi_data) / [`set_uefi_data(Option<String>)`](crate::client::fluent_builders::RegisterImage::set_uefi_data): <p>Base64 representation of the non-volatile UEFI variable store. To retrieve the UEFI data, use the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData">GetInstanceUefiData</a> command. You can inspect and modify the UEFI data by using the <a href="https://github.com/awslabs/python-uefivars">python-uefivars tool</a> on GitHub. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html">UEFI Secure Boot</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`imds_support(ImdsSupportValues)`](crate::client::fluent_builders::RegisterImage::imds_support) / [`set_imds_support(Option<ImdsSupportValues>)`](crate::client::fluent_builders::RegisterImage::set_imds_support): <p>Set to <code>v2.0</code> to indicate that IMDSv2 is specified in the AMI. Instances launched from this AMI will have <code>HttpTokens</code> automatically set to <code>required</code> so that, by default, the instance requires that IMDSv2 is used when requesting instance metadata. In addition, <code>HttpPutResponseHopLimit</code> is set to <code>2</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration">Configure the AMI</a> in the <i>Amazon EC2 User Guide</i>.</p> <note>   <p>If you set the value to <code>v2.0</code>, make sure that your AMI software can support IMDSv2.</p>  </note>
    /// - On success, responds with [`RegisterImageOutput`](crate::output::RegisterImageOutput) with field(s):
    ///   - [`image_id(Option<String>)`](crate::output::RegisterImageOutput::image_id): <p>The ID of the newly registered AMI.</p>
    /// - On failure, responds with [`SdkError<RegisterImageError>`](crate::error::RegisterImageError)
    pub fn register_image(&self) -> fluent_builders::RegisterImage {
        fluent_builders::RegisterImage::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RegisterInstanceEventNotificationAttributes`](crate::client::fluent_builders::RegisterInstanceEventNotificationAttributes) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RegisterInstanceEventNotificationAttributes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RegisterInstanceEventNotificationAttributes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_tag_attribute(RegisterInstanceTagAttributeRequest)`](crate::client::fluent_builders::RegisterInstanceEventNotificationAttributes::instance_tag_attribute) / [`set_instance_tag_attribute(Option<RegisterInstanceTagAttributeRequest>)`](crate::client::fluent_builders::RegisterInstanceEventNotificationAttributes::set_instance_tag_attribute): <p>Information about the tag keys to register.</p>
    /// - On success, responds with [`RegisterInstanceEventNotificationAttributesOutput`](crate::output::RegisterInstanceEventNotificationAttributesOutput) with field(s):
    ///   - [`instance_tag_attribute(Option<InstanceTagNotificationAttribute>)`](crate::output::RegisterInstanceEventNotificationAttributesOutput::instance_tag_attribute): <p>The resulting set of tag keys.</p>
    /// - On failure, responds with [`SdkError<RegisterInstanceEventNotificationAttributesError>`](crate::error::RegisterInstanceEventNotificationAttributesError)
    pub fn register_instance_event_notification_attributes(
        &self,
    ) -> fluent_builders::RegisterInstanceEventNotificationAttributes {
        fluent_builders::RegisterInstanceEventNotificationAttributes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RegisterTransitGatewayMulticastGroupMembers`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`group_ip_address(impl Into<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers::group_ip_address) / [`set_group_ip_address(Option<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers::set_group_ip_address): <p>The IP address assigned to the transit gateway multicast group.</p>
    ///   - [`network_interface_ids(Vec<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers::network_interface_ids) / [`set_network_interface_ids(Option<Vec<String>>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers::set_network_interface_ids): <p>The group members' network interface IDs to register with the transit gateway multicast group.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupMembers::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RegisterTransitGatewayMulticastGroupMembersOutput`](crate::output::RegisterTransitGatewayMulticastGroupMembersOutput) with field(s):
    ///   - [`registered_multicast_group_members(Option<TransitGatewayMulticastRegisteredGroupMembers>)`](crate::output::RegisterTransitGatewayMulticastGroupMembersOutput::registered_multicast_group_members): <p>Information about the registered transit gateway multicast group members.</p>
    /// - On failure, responds with [`SdkError<RegisterTransitGatewayMulticastGroupMembersError>`](crate::error::RegisterTransitGatewayMulticastGroupMembersError)
    pub fn register_transit_gateway_multicast_group_members(
        &self,
    ) -> fluent_builders::RegisterTransitGatewayMulticastGroupMembers {
        fluent_builders::RegisterTransitGatewayMulticastGroupMembers::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RegisterTransitGatewayMulticastGroupSources`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`group_ip_address(impl Into<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources::group_ip_address) / [`set_group_ip_address(Option<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources::set_group_ip_address): <p>The IP address assigned to the transit gateway multicast group.</p>
    ///   - [`network_interface_ids(Vec<String>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources::network_interface_ids) / [`set_network_interface_ids(Option<Vec<String>>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources::set_network_interface_ids): <p>The group sources' network interface IDs to register with the transit gateway multicast group.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RegisterTransitGatewayMulticastGroupSources::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RegisterTransitGatewayMulticastGroupSourcesOutput`](crate::output::RegisterTransitGatewayMulticastGroupSourcesOutput) with field(s):
    ///   - [`registered_multicast_group_sources(Option<TransitGatewayMulticastRegisteredGroupSources>)`](crate::output::RegisterTransitGatewayMulticastGroupSourcesOutput::registered_multicast_group_sources): <p>Information about the transit gateway multicast group sources.</p>
    /// - On failure, responds with [`SdkError<RegisterTransitGatewayMulticastGroupSourcesError>`](crate::error::RegisterTransitGatewayMulticastGroupSourcesError)
    pub fn register_transit_gateway_multicast_group_sources(
        &self,
    ) -> fluent_builders::RegisterTransitGatewayMulticastGroupSources {
        fluent_builders::RegisterTransitGatewayMulticastGroupSources::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RejectTransitGatewayMulticastDomainAssociations`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations::set_transit_gateway_attachment_id): <p>The ID of the transit gateway attachment.</p>
    ///   - [`subnet_ids(Vec<String>)`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations::subnet_ids) / [`set_subnet_ids(Option<Vec<String>>)`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations::set_subnet_ids): <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RejectTransitGatewayMulticastDomainAssociations::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RejectTransitGatewayMulticastDomainAssociationsOutput`](crate::output::RejectTransitGatewayMulticastDomainAssociationsOutput) with field(s):
    ///   - [`associations(Option<TransitGatewayMulticastDomainAssociations>)`](crate::output::RejectTransitGatewayMulticastDomainAssociationsOutput::associations): <p>Information about the multicast domain associations.</p>
    /// - On failure, responds with [`SdkError<RejectTransitGatewayMulticastDomainAssociationsError>`](crate::error::RejectTransitGatewayMulticastDomainAssociationsError)
    pub fn reject_transit_gateway_multicast_domain_associations(
        &self,
    ) -> fluent_builders::RejectTransitGatewayMulticastDomainAssociations {
        fluent_builders::RejectTransitGatewayMulticastDomainAssociations::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RejectTransitGatewayPeeringAttachment`](crate::client::fluent_builders::RejectTransitGatewayPeeringAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::RejectTransitGatewayPeeringAttachment::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::RejectTransitGatewayPeeringAttachment::set_transit_gateway_attachment_id): <p>The ID of the transit gateway peering attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RejectTransitGatewayPeeringAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RejectTransitGatewayPeeringAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RejectTransitGatewayPeeringAttachmentOutput`](crate::output::RejectTransitGatewayPeeringAttachmentOutput) with field(s):
    ///   - [`transit_gateway_peering_attachment(Option<TransitGatewayPeeringAttachment>)`](crate::output::RejectTransitGatewayPeeringAttachmentOutput::transit_gateway_peering_attachment): <p>The transit gateway peering attachment.</p>
    /// - On failure, responds with [`SdkError<RejectTransitGatewayPeeringAttachmentError>`](crate::error::RejectTransitGatewayPeeringAttachmentError)
    pub fn reject_transit_gateway_peering_attachment(
        &self,
    ) -> fluent_builders::RejectTransitGatewayPeeringAttachment {
        fluent_builders::RejectTransitGatewayPeeringAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RejectTransitGatewayVpcAttachment`](crate::client::fluent_builders::RejectTransitGatewayVpcAttachment) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::RejectTransitGatewayVpcAttachment::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::RejectTransitGatewayVpcAttachment::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RejectTransitGatewayVpcAttachment::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RejectTransitGatewayVpcAttachment::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RejectTransitGatewayVpcAttachmentOutput`](crate::output::RejectTransitGatewayVpcAttachmentOutput) with field(s):
    ///   - [`transit_gateway_vpc_attachment(Option<TransitGatewayVpcAttachment>)`](crate::output::RejectTransitGatewayVpcAttachmentOutput::transit_gateway_vpc_attachment): <p>Information about the attachment.</p>
    /// - On failure, responds with [`SdkError<RejectTransitGatewayVpcAttachmentError>`](crate::error::RejectTransitGatewayVpcAttachmentError)
    pub fn reject_transit_gateway_vpc_attachment(
        &self,
    ) -> fluent_builders::RejectTransitGatewayVpcAttachment {
        fluent_builders::RejectTransitGatewayVpcAttachment::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RejectVpcEndpointConnections`](crate::client::fluent_builders::RejectVpcEndpointConnections) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RejectVpcEndpointConnections::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RejectVpcEndpointConnections::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_id(impl Into<String>)`](crate::client::fluent_builders::RejectVpcEndpointConnections::service_id) / [`set_service_id(Option<String>)`](crate::client::fluent_builders::RejectVpcEndpointConnections::set_service_id): <p>The ID of the service.</p>
    ///   - [`vpc_endpoint_ids(Vec<String>)`](crate::client::fluent_builders::RejectVpcEndpointConnections::vpc_endpoint_ids) / [`set_vpc_endpoint_ids(Option<Vec<String>>)`](crate::client::fluent_builders::RejectVpcEndpointConnections::set_vpc_endpoint_ids): <p>The IDs of the VPC endpoints.</p>
    /// - On success, responds with [`RejectVpcEndpointConnectionsOutput`](crate::output::RejectVpcEndpointConnectionsOutput) with field(s):
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::RejectVpcEndpointConnectionsOutput::unsuccessful): <p>Information about the endpoints that were not rejected, if applicable.</p>
    /// - On failure, responds with [`SdkError<RejectVpcEndpointConnectionsError>`](crate::error::RejectVpcEndpointConnectionsError)
    pub fn reject_vpc_endpoint_connections(&self) -> fluent_builders::RejectVpcEndpointConnections {
        fluent_builders::RejectVpcEndpointConnections::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RejectVpcPeeringConnection`](crate::client::fluent_builders::RejectVpcPeeringConnection) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RejectVpcPeeringConnection::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RejectVpcPeeringConnection::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_peering_connection_id(impl Into<String>)`](crate::client::fluent_builders::RejectVpcPeeringConnection::vpc_peering_connection_id) / [`set_vpc_peering_connection_id(Option<String>)`](crate::client::fluent_builders::RejectVpcPeeringConnection::set_vpc_peering_connection_id): <p>The ID of the VPC peering connection.</p>
    /// - On success, responds with [`RejectVpcPeeringConnectionOutput`](crate::output::RejectVpcPeeringConnectionOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::RejectVpcPeeringConnectionOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<RejectVpcPeeringConnectionError>`](crate::error::RejectVpcPeeringConnectionError)
    pub fn reject_vpc_peering_connection(&self) -> fluent_builders::RejectVpcPeeringConnection {
        fluent_builders::RejectVpcPeeringConnection::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReleaseAddress`](crate::client::fluent_builders::ReleaseAddress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_id(impl Into<String>)`](crate::client::fluent_builders::ReleaseAddress::allocation_id) / [`set_allocation_id(Option<String>)`](crate::client::fluent_builders::ReleaseAddress::set_allocation_id): <p>[EC2-VPC] The allocation ID. Required for EC2-VPC.</p>
    ///   - [`public_ip(impl Into<String>)`](crate::client::fluent_builders::ReleaseAddress::public_ip) / [`set_public_ip(Option<String>)`](crate::client::fluent_builders::ReleaseAddress::set_public_ip): <p>[EC2-Classic] The Elastic IP address. Required for EC2-Classic.</p>
    ///   - [`network_border_group(impl Into<String>)`](crate::client::fluent_builders::ReleaseAddress::network_border_group) / [`set_network_border_group(Option<String>)`](crate::client::fluent_builders::ReleaseAddress::set_network_border_group): <p>The set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses.</p>  <p>If you provide an incorrect network border group, you receive an <code>InvalidAddress.NotFound</code> error.</p>  <p>You cannot use a network border group with EC2 Classic. If you attempt this operation on EC2 classic, you receive an <code>InvalidParameterCombination</code> error.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ReleaseAddress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ReleaseAddress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ReleaseAddressOutput`](crate::output::ReleaseAddressOutput)

    /// - On failure, responds with [`SdkError<ReleaseAddressError>`](crate::error::ReleaseAddressError)
    pub fn release_address(&self) -> fluent_builders::ReleaseAddress {
        fluent_builders::ReleaseAddress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReleaseHosts`](crate::client::fluent_builders::ReleaseHosts) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`host_ids(Vec<String>)`](crate::client::fluent_builders::ReleaseHosts::host_ids) / [`set_host_ids(Option<Vec<String>>)`](crate::client::fluent_builders::ReleaseHosts::set_host_ids): <p>The IDs of the Dedicated Hosts to release.</p>
    /// - On success, responds with [`ReleaseHostsOutput`](crate::output::ReleaseHostsOutput) with field(s):
    ///   - [`successful(Option<Vec<String>>)`](crate::output::ReleaseHostsOutput::successful): <p>The IDs of the Dedicated Hosts that were successfully released.</p>
    ///   - [`unsuccessful(Option<Vec<UnsuccessfulItem>>)`](crate::output::ReleaseHostsOutput::unsuccessful): <p>The IDs of the Dedicated Hosts that could not be released, including an error message.</p>
    /// - On failure, responds with [`SdkError<ReleaseHostsError>`](crate::error::ReleaseHostsError)
    pub fn release_hosts(&self) -> fluent_builders::ReleaseHosts {
        fluent_builders::ReleaseHosts::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReleaseIpamPoolAllocation`](crate::client::fluent_builders::ReleaseIpamPoolAllocation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ReleaseIpamPoolAllocation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ReleaseIpamPoolAllocation::set_dry_run): <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ipam_pool_id(impl Into<String>)`](crate::client::fluent_builders::ReleaseIpamPoolAllocation::ipam_pool_id) / [`set_ipam_pool_id(Option<String>)`](crate::client::fluent_builders::ReleaseIpamPoolAllocation::set_ipam_pool_id): <p>The ID of the IPAM pool which contains the allocation you want to release.</p>
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::ReleaseIpamPoolAllocation::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::ReleaseIpamPoolAllocation::set_cidr): <p>The CIDR of the allocation you want to release.</p>
    ///   - [`ipam_pool_allocation_id(impl Into<String>)`](crate::client::fluent_builders::ReleaseIpamPoolAllocation::ipam_pool_allocation_id) / [`set_ipam_pool_allocation_id(Option<String>)`](crate::client::fluent_builders::ReleaseIpamPoolAllocation::set_ipam_pool_allocation_id): <p>The ID of the allocation.</p>
    /// - On success, responds with [`ReleaseIpamPoolAllocationOutput`](crate::output::ReleaseIpamPoolAllocationOutput) with field(s):
    ///   - [`success(Option<bool>)`](crate::output::ReleaseIpamPoolAllocationOutput::success): <p>Indicates if the release was successful.</p>
    /// - On failure, responds with [`SdkError<ReleaseIpamPoolAllocationError>`](crate::error::ReleaseIpamPoolAllocationError)
    pub fn release_ipam_pool_allocation(&self) -> fluent_builders::ReleaseIpamPoolAllocation {
        fluent_builders::ReleaseIpamPoolAllocation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReplaceIamInstanceProfileAssociation`](crate::client::fluent_builders::ReplaceIamInstanceProfileAssociation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`iam_instance_profile(IamInstanceProfileSpecification)`](crate::client::fluent_builders::ReplaceIamInstanceProfileAssociation::iam_instance_profile) / [`set_iam_instance_profile(Option<IamInstanceProfileSpecification>)`](crate::client::fluent_builders::ReplaceIamInstanceProfileAssociation::set_iam_instance_profile): <p>The IAM instance profile.</p>
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceIamInstanceProfileAssociation::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::ReplaceIamInstanceProfileAssociation::set_association_id): <p>The ID of the existing IAM instance profile association.</p>
    /// - On success, responds with [`ReplaceIamInstanceProfileAssociationOutput`](crate::output::ReplaceIamInstanceProfileAssociationOutput) with field(s):
    ///   - [`iam_instance_profile_association(Option<IamInstanceProfileAssociation>)`](crate::output::ReplaceIamInstanceProfileAssociationOutput::iam_instance_profile_association): <p>Information about the IAM instance profile association.</p>
    /// - On failure, responds with [`SdkError<ReplaceIamInstanceProfileAssociationError>`](crate::error::ReplaceIamInstanceProfileAssociationError)
    pub fn replace_iam_instance_profile_association(
        &self,
    ) -> fluent_builders::ReplaceIamInstanceProfileAssociation {
        fluent_builders::ReplaceIamInstanceProfileAssociation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReplaceNetworkAclAssociation`](crate::client::fluent_builders::ReplaceNetworkAclAssociation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceNetworkAclAssociation::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::ReplaceNetworkAclAssociation::set_association_id): <p>The ID of the current association between the original network ACL and the subnet.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ReplaceNetworkAclAssociation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ReplaceNetworkAclAssociation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_acl_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceNetworkAclAssociation::network_acl_id) / [`set_network_acl_id(Option<String>)`](crate::client::fluent_builders::ReplaceNetworkAclAssociation::set_network_acl_id): <p>The ID of the new network ACL to associate with the subnet.</p>
    /// - On success, responds with [`ReplaceNetworkAclAssociationOutput`](crate::output::ReplaceNetworkAclAssociationOutput) with field(s):
    ///   - [`new_association_id(Option<String>)`](crate::output::ReplaceNetworkAclAssociationOutput::new_association_id): <p>The ID of the new association.</p>
    /// - On failure, responds with [`SdkError<ReplaceNetworkAclAssociationError>`](crate::error::ReplaceNetworkAclAssociationError)
    pub fn replace_network_acl_association(&self) -> fluent_builders::ReplaceNetworkAclAssociation {
        fluent_builders::ReplaceNetworkAclAssociation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReplaceNetworkAclEntry`](crate::client::fluent_builders::ReplaceNetworkAclEntry) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr_block(impl Into<String>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::cidr_block) / [`set_cidr_block(Option<String>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_cidr_block): <p>The IPv4 network range to allow or deny, in CIDR notation (for example <code>172.16.0.0/24</code>).</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`egress(bool)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::egress) / [`set_egress(Option<bool>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_egress): <p>Indicates whether to replace the egress rule.</p>  <p>Default: If no value is specified, we replace the ingress rule.</p>
    ///   - [`icmp_type_code(IcmpTypeCode)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::icmp_type_code) / [`set_icmp_type_code(Option<IcmpTypeCode>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_icmp_type_code): <p>ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.</p>
    ///   - [`ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::ipv6_cidr_block) / [`set_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_ipv6_cidr_block): <p>The IPv6 network range to allow or deny, in CIDR notation (for example <code>2001:bd8:1234:1a00::/64</code>).</p>
    ///   - [`network_acl_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::network_acl_id) / [`set_network_acl_id(Option<String>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_network_acl_id): <p>The ID of the ACL.</p>
    ///   - [`port_range(PortRange)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::port_range) / [`set_port_range(Option<PortRange>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_port_range): <p>TCP or UDP protocols: The range of ports the rule applies to. Required if specifying protocol 6 (TCP) or 17 (UDP).</p>
    ///   - [`protocol(impl Into<String>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::protocol) / [`set_protocol(Option<String>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_protocol): <p>The protocol number. A value of "-1" means all protocols. If you specify "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), traffic on all ports is allowed, regardless of any ports or ICMP types or codes that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.</p>
    ///   - [`rule_action(RuleAction)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::rule_action) / [`set_rule_action(Option<RuleAction>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_rule_action): <p>Indicates whether to allow or deny the traffic that matches the rule.</p>
    ///   - [`rule_number(i32)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::rule_number) / [`set_rule_number(Option<i32>)`](crate::client::fluent_builders::ReplaceNetworkAclEntry::set_rule_number): <p>The rule number of the entry to replace.</p>
    /// - On success, responds with [`ReplaceNetworkAclEntryOutput`](crate::output::ReplaceNetworkAclEntryOutput)

    /// - On failure, responds with [`SdkError<ReplaceNetworkAclEntryError>`](crate::error::ReplaceNetworkAclEntryError)
    pub fn replace_network_acl_entry(&self) -> fluent_builders::ReplaceNetworkAclEntry {
        fluent_builders::ReplaceNetworkAclEntry::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReplaceRoute`](crate::client::fluent_builders::ReplaceRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_destination_cidr_block): <p>The IPv4 CIDR address block used for the destination match. The value that you provide must match the CIDR of an existing route in the table.</p>
    ///   - [`destination_ipv6_cidr_block(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::destination_ipv6_cidr_block) / [`set_destination_ipv6_cidr_block(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_destination_ipv6_cidr_block): <p>The IPv6 CIDR address block used for the destination match. The value that you provide must match the CIDR of an existing route in the table.</p>
    ///   - [`destination_prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::destination_prefix_list_id) / [`set_destination_prefix_list_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_destination_prefix_list_id): <p>The ID of the prefix list for the route.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ReplaceRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ReplaceRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`vpc_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::vpc_endpoint_id) / [`set_vpc_endpoint_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_vpc_endpoint_id): <p>The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints only.</p>
    ///   - [`egress_only_internet_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::egress_only_internet_gateway_id) / [`set_egress_only_internet_gateway_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_egress_only_internet_gateway_id): <p>[IPv6 traffic only] The ID of an egress-only internet gateway.</p>
    ///   - [`gateway_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::gateway_id) / [`set_gateway_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_gateway_id): <p>The ID of an internet gateway or virtual private gateway.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_instance_id): <p>The ID of a NAT instance in your VPC.</p>
    ///   - [`local_target(bool)`](crate::client::fluent_builders::ReplaceRoute::local_target) / [`set_local_target(Option<bool>)`](crate::client::fluent_builders::ReplaceRoute::set_local_target): <p>Specifies whether to reset the local route to its default target (<code>local</code>).</p>
    ///   - [`nat_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::nat_gateway_id) / [`set_nat_gateway_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_nat_gateway_id): <p>[IPv4 traffic only] The ID of a NAT gateway.</p>
    ///   - [`transit_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::transit_gateway_id) / [`set_transit_gateway_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_transit_gateway_id): <p>The ID of a transit gateway.</p>
    ///   - [`local_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::local_gateway_id) / [`set_local_gateway_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_local_gateway_id): <p>The ID of the local gateway.</p>
    ///   - [`carrier_gateway_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::carrier_gateway_id) / [`set_carrier_gateway_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_carrier_gateway_id): <p>[IPv4 traffic only] The ID of a carrier gateway.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_network_interface_id): <p>The ID of a network interface.</p>
    ///   - [`route_table_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::route_table_id) / [`set_route_table_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_route_table_id): <p>The ID of the route table.</p>
    ///   - [`vpc_peering_connection_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::vpc_peering_connection_id) / [`set_vpc_peering_connection_id(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_vpc_peering_connection_id): <p>The ID of a VPC peering connection.</p>
    ///   - [`core_network_arn(impl Into<String>)`](crate::client::fluent_builders::ReplaceRoute::core_network_arn) / [`set_core_network_arn(Option<String>)`](crate::client::fluent_builders::ReplaceRoute::set_core_network_arn): <p>The Amazon Resource Name (ARN) of the core network.</p>
    /// - On success, responds with [`ReplaceRouteOutput`](crate::output::ReplaceRouteOutput)

    /// - On failure, responds with [`SdkError<ReplaceRouteError>`](crate::error::ReplaceRouteError)
    pub fn replace_route(&self) -> fluent_builders::ReplaceRoute {
        fluent_builders::ReplaceRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReplaceRouteTableAssociation`](crate::client::fluent_builders::ReplaceRouteTableAssociation) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`association_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRouteTableAssociation::association_id) / [`set_association_id(Option<String>)`](crate::client::fluent_builders::ReplaceRouteTableAssociation::set_association_id): <p>The association ID.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ReplaceRouteTableAssociation::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ReplaceRouteTableAssociation::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`route_table_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceRouteTableAssociation::route_table_id) / [`set_route_table_id(Option<String>)`](crate::client::fluent_builders::ReplaceRouteTableAssociation::set_route_table_id): <p>The ID of the new route table to associate with the subnet.</p>
    /// - On success, responds with [`ReplaceRouteTableAssociationOutput`](crate::output::ReplaceRouteTableAssociationOutput) with field(s):
    ///   - [`new_association_id(Option<String>)`](crate::output::ReplaceRouteTableAssociationOutput::new_association_id): <p>The ID of the new association.</p>
    ///   - [`association_state(Option<RouteTableAssociationState>)`](crate::output::ReplaceRouteTableAssociationOutput::association_state): <p>The state of the association.</p>
    /// - On failure, responds with [`SdkError<ReplaceRouteTableAssociationError>`](crate::error::ReplaceRouteTableAssociationError)
    pub fn replace_route_table_association(&self) -> fluent_builders::ReplaceRouteTableAssociation {
        fluent_builders::ReplaceRouteTableAssociation::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReplaceTransitGatewayRoute`](crate::client::fluent_builders::ReplaceTransitGatewayRoute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`destination_cidr_block(impl Into<String>)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::destination_cidr_block) / [`set_destination_cidr_block(Option<String>)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::set_destination_cidr_block): <p>The CIDR range used for the destination match. Routing decisions are based on the most specific match.</p>
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::set_transit_gateway_route_table_id): <p>The ID of the route table.</p>
    ///   - [`transit_gateway_attachment_id(impl Into<String>)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::transit_gateway_attachment_id) / [`set_transit_gateway_attachment_id(Option<String>)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::set_transit_gateway_attachment_id): <p>The ID of the attachment.</p>
    ///   - [`blackhole(bool)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::blackhole) / [`set_blackhole(Option<bool>)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::set_blackhole): <p>Indicates whether traffic matching this route is to be dropped.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ReplaceTransitGatewayRoute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ReplaceTransitGatewayRouteOutput`](crate::output::ReplaceTransitGatewayRouteOutput) with field(s):
    ///   - [`route(Option<TransitGatewayRoute>)`](crate::output::ReplaceTransitGatewayRouteOutput::route): <p>Information about the modified route.</p>
    /// - On failure, responds with [`SdkError<ReplaceTransitGatewayRouteError>`](crate::error::ReplaceTransitGatewayRouteError)
    pub fn replace_transit_gateway_route(&self) -> fluent_builders::ReplaceTransitGatewayRoute {
        fluent_builders::ReplaceTransitGatewayRoute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ReportInstanceStatus`](crate::client::fluent_builders::ReportInstanceStatus) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`description(impl Into<String>)`](crate::client::fluent_builders::ReportInstanceStatus::description) / [`set_description(Option<String>)`](crate::client::fluent_builders::ReportInstanceStatus::set_description): <p>Descriptive text about the health state of your instance.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ReportInstanceStatus::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ReportInstanceStatus::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`end_time(DateTime)`](crate::client::fluent_builders::ReportInstanceStatus::end_time) / [`set_end_time(Option<DateTime>)`](crate::client::fluent_builders::ReportInstanceStatus::set_end_time): <p>The time at which the reported instance health state ended.</p>
    ///   - [`instances(Vec<String>)`](crate::client::fluent_builders::ReportInstanceStatus::instances) / [`set_instances(Option<Vec<String>>)`](crate::client::fluent_builders::ReportInstanceStatus::set_instances): <p>The instances.</p>
    ///   - [`reason_codes(Vec<ReportInstanceReasonCodes>)`](crate::client::fluent_builders::ReportInstanceStatus::reason_codes) / [`set_reason_codes(Option<Vec<ReportInstanceReasonCodes>>)`](crate::client::fluent_builders::ReportInstanceStatus::set_reason_codes): <p>The reason codes that describe the health state of your instance.</p>  <ul>   <li> <p> <code>instance-stuck-in-state</code>: My instance is stuck in a state.</p> </li>   <li> <p> <code>unresponsive</code>: My instance is unresponsive.</p> </li>   <li> <p> <code>not-accepting-credentials</code>: My instance is not accepting my credentials.</p> </li>   <li> <p> <code>password-not-available</code>: A password is not available for my instance.</p> </li>   <li> <p> <code>performance-network</code>: My instance is experiencing performance problems that I believe are network related.</p> </li>   <li> <p> <code>performance-instance-store</code>: My instance is experiencing performance problems that I believe are related to the instance stores.</p> </li>   <li> <p> <code>performance-ebs-volume</code>: My instance is experiencing performance problems that I believe are related to an EBS volume.</p> </li>   <li> <p> <code>performance-other</code>: My instance is experiencing performance problems.</p> </li>   <li> <p> <code>other</code>: [explain using the description parameter]</p> </li>  </ul>
    ///   - [`start_time(DateTime)`](crate::client::fluent_builders::ReportInstanceStatus::start_time) / [`set_start_time(Option<DateTime>)`](crate::client::fluent_builders::ReportInstanceStatus::set_start_time): <p>The time at which the reported instance health state began.</p>
    ///   - [`status(ReportStatusType)`](crate::client::fluent_builders::ReportInstanceStatus::status) / [`set_status(Option<ReportStatusType>)`](crate::client::fluent_builders::ReportInstanceStatus::set_status): <p>The status of all instances listed.</p>
    /// - On success, responds with [`ReportInstanceStatusOutput`](crate::output::ReportInstanceStatusOutput)

    /// - On failure, responds with [`SdkError<ReportInstanceStatusError>`](crate::error::ReportInstanceStatusError)
    pub fn report_instance_status(&self) -> fluent_builders::ReportInstanceStatus {
        fluent_builders::ReportInstanceStatus::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RequestSpotFleet`](crate::client::fluent_builders::RequestSpotFleet) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RequestSpotFleet::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RequestSpotFleet::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`spot_fleet_request_config(SpotFleetRequestConfigData)`](crate::client::fluent_builders::RequestSpotFleet::spot_fleet_request_config) / [`set_spot_fleet_request_config(Option<SpotFleetRequestConfigData>)`](crate::client::fluent_builders::RequestSpotFleet::set_spot_fleet_request_config): <p>The configuration for the Spot Fleet request.</p>
    /// - On success, responds with [`RequestSpotFleetOutput`](crate::output::RequestSpotFleetOutput) with field(s):
    ///   - [`spot_fleet_request_id(Option<String>)`](crate::output::RequestSpotFleetOutput::spot_fleet_request_id): <p>The ID of the Spot Fleet request.</p>
    /// - On failure, responds with [`SdkError<RequestSpotFleetError>`](crate::error::RequestSpotFleetError)
    pub fn request_spot_fleet(&self) -> fluent_builders::RequestSpotFleet {
        fluent_builders::RequestSpotFleet::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RequestSpotInstances`](crate::client::fluent_builders::RequestSpotInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`availability_zone_group(impl Into<String>)`](crate::client::fluent_builders::RequestSpotInstances::availability_zone_group) / [`set_availability_zone_group(Option<String>)`](crate::client::fluent_builders::RequestSpotInstances::set_availability_zone_group): <p>The user-specified name for a logical grouping of requests.</p>  <p>When you specify an Availability Zone group in a Spot Instance request, all Spot Instances in the request are launched in the same Availability Zone. Instance proximity is maintained with this parameter, but the choice of Availability Zone is not. The group applies only to requests for Spot Instances of the same instance type. Any additional Spot Instance requests that are specified with the same Availability Zone group name are launched in that same Availability Zone, as long as at least one instance from the group is still active.</p>  <p>If there is no active instance running in the Availability Zone group that you specify for a new Spot Instance request (all instances are terminated, the request is expired, or the maximum price you specified falls below current Spot price), then Amazon EC2 launches the instance in any Availability Zone where the constraint can be met. Consequently, the subsequent set of Spot Instances could be placed in a different zone from the original request, even if you specified the same Availability Zone group.</p>  <p>Default: Instances are launched in any available Availability Zone.</p>
    ///   - [`block_duration_minutes(i32)`](crate::client::fluent_builders::RequestSpotInstances::block_duration_minutes) / [`set_block_duration_minutes(Option<i32>)`](crate::client::fluent_builders::RequestSpotInstances::set_block_duration_minutes): <p>Deprecated.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::RequestSpotInstances::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::RequestSpotInstances::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RequestSpotInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RequestSpotInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_count(i32)`](crate::client::fluent_builders::RequestSpotInstances::instance_count) / [`set_instance_count(Option<i32>)`](crate::client::fluent_builders::RequestSpotInstances::set_instance_count): <p>The maximum number of Spot Instances to launch.</p>  <p>Default: 1</p>
    ///   - [`launch_group(impl Into<String>)`](crate::client::fluent_builders::RequestSpotInstances::launch_group) / [`set_launch_group(Option<String>)`](crate::client::fluent_builders::RequestSpotInstances::set_launch_group): <p>The instance launch group. Launch groups are Spot Instances that launch together and terminate together.</p>  <p>Default: Instances are launched and terminated individually</p>
    ///   - [`launch_specification(RequestSpotLaunchSpecification)`](crate::client::fluent_builders::RequestSpotInstances::launch_specification) / [`set_launch_specification(Option<RequestSpotLaunchSpecification>)`](crate::client::fluent_builders::RequestSpotInstances::set_launch_specification): <p>The launch specification.</p>
    ///   - [`spot_price(impl Into<String>)`](crate::client::fluent_builders::RequestSpotInstances::spot_price) / [`set_spot_price(Option<String>)`](crate::client::fluent_builders::RequestSpotInstances::set_spot_price): <p>The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price.</p> <important>   <p>If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter.</p>  </important>
    ///   - [`r#type(SpotInstanceType)`](crate::client::fluent_builders::RequestSpotInstances::type) / [`set_type(Option<SpotInstanceType>)`](crate::client::fluent_builders::RequestSpotInstances::set_type): <p>The Spot Instance request type.</p>  <p>Default: <code>one-time</code> </p>
    ///   - [`valid_from(DateTime)`](crate::client::fluent_builders::RequestSpotInstances::valid_from) / [`set_valid_from(Option<DateTime>)`](crate::client::fluent_builders::RequestSpotInstances::set_valid_from): <p>The start date of the request. If this is a one-time request, the request becomes active at this date and time and remains active until all instances launch, the request expires, or the request is canceled. If the request is persistent, the request becomes active at this date and time and remains active until it expires or is canceled.</p>  <p>The specified start date and time cannot be equal to the current date and time. You must specify a start date and time that occurs after the current date and time.</p>
    ///   - [`valid_until(DateTime)`](crate::client::fluent_builders::RequestSpotInstances::valid_until) / [`set_valid_until(Option<DateTime>)`](crate::client::fluent_builders::RequestSpotInstances::set_valid_until): <p>The end date of the request, in UTC format (<i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>  <ul>   <li> <p>For a persistent request, the request remains active until the <code>ValidUntil</code> date and time is reached. Otherwise, the request remains active until you cancel it. </p> </li>   <li> <p>For a one-time request, the request remains active until all instances launch, the request is canceled, or the <code>ValidUntil</code> date and time is reached. By default, the request is valid for 7 days from the date the request was created.</p> </li>  </ul>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::RequestSpotInstances::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::RequestSpotInstances::set_tag_specifications): <p>The key-value pair for tagging the Spot Instance request on creation. The value for <code>ResourceType</code> must be <code>spot-instances-request</code>, otherwise the Spot Instance request fails. To tag the Spot Instance request after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>. </p>
    ///   - [`instance_interruption_behavior(InstanceInterruptionBehavior)`](crate::client::fluent_builders::RequestSpotInstances::instance_interruption_behavior) / [`set_instance_interruption_behavior(Option<InstanceInterruptionBehavior>)`](crate::client::fluent_builders::RequestSpotInstances::set_instance_interruption_behavior): <p>The behavior when a Spot Instance is interrupted. The default is <code>terminate</code>.</p>
    /// - On success, responds with [`RequestSpotInstancesOutput`](crate::output::RequestSpotInstancesOutput) with field(s):
    ///   - [`spot_instance_requests(Option<Vec<SpotInstanceRequest>>)`](crate::output::RequestSpotInstancesOutput::spot_instance_requests): <p>One or more Spot Instance requests.</p>
    /// - On failure, responds with [`SdkError<RequestSpotInstancesError>`](crate::error::RequestSpotInstancesError)
    pub fn request_spot_instances(&self) -> fluent_builders::RequestSpotInstances {
        fluent_builders::RequestSpotInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ResetAddressAttribute`](crate::client::fluent_builders::ResetAddressAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`allocation_id(impl Into<String>)`](crate::client::fluent_builders::ResetAddressAttribute::allocation_id) / [`set_allocation_id(Option<String>)`](crate::client::fluent_builders::ResetAddressAttribute::set_allocation_id): <p>[EC2-VPC] The allocation ID.</p>
    ///   - [`attribute(AddressAttributeName)`](crate::client::fluent_builders::ResetAddressAttribute::attribute) / [`set_attribute(Option<AddressAttributeName>)`](crate::client::fluent_builders::ResetAddressAttribute::set_attribute): <p>The attribute of the IP address.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ResetAddressAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ResetAddressAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ResetAddressAttributeOutput`](crate::output::ResetAddressAttributeOutput) with field(s):
    ///   - [`address(Option<AddressAttribute>)`](crate::output::ResetAddressAttributeOutput::address): <p>Information about the IP address.</p>
    /// - On failure, responds with [`SdkError<ResetAddressAttributeError>`](crate::error::ResetAddressAttributeError)
    pub fn reset_address_attribute(&self) -> fluent_builders::ResetAddressAttribute {
        fluent_builders::ResetAddressAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ResetEbsDefaultKmsKeyId`](crate::client::fluent_builders::ResetEbsDefaultKmsKeyId) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ResetEbsDefaultKmsKeyId::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ResetEbsDefaultKmsKeyId::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ResetEbsDefaultKmsKeyIdOutput`](crate::output::ResetEbsDefaultKmsKeyIdOutput) with field(s):
    ///   - [`kms_key_id(Option<String>)`](crate::output::ResetEbsDefaultKmsKeyIdOutput::kms_key_id): <p>The Amazon Resource Name (ARN) of the default KMS key for EBS encryption by default.</p>
    /// - On failure, responds with [`SdkError<ResetEbsDefaultKmsKeyIdError>`](crate::error::ResetEbsDefaultKmsKeyIdError)
    pub fn reset_ebs_default_kms_key_id(&self) -> fluent_builders::ResetEbsDefaultKmsKeyId {
        fluent_builders::ResetEbsDefaultKmsKeyId::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ResetFpgaImageAttribute`](crate::client::fluent_builders::ResetFpgaImageAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ResetFpgaImageAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ResetFpgaImageAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`fpga_image_id(impl Into<String>)`](crate::client::fluent_builders::ResetFpgaImageAttribute::fpga_image_id) / [`set_fpga_image_id(Option<String>)`](crate::client::fluent_builders::ResetFpgaImageAttribute::set_fpga_image_id): <p>The ID of the AFI.</p>
    ///   - [`attribute(ResetFpgaImageAttributeName)`](crate::client::fluent_builders::ResetFpgaImageAttribute::attribute) / [`set_attribute(Option<ResetFpgaImageAttributeName>)`](crate::client::fluent_builders::ResetFpgaImageAttribute::set_attribute): <p>The attribute.</p>
    /// - On success, responds with [`ResetFpgaImageAttributeOutput`](crate::output::ResetFpgaImageAttributeOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::ResetFpgaImageAttributeOutput::return): <p>Is <code>true</code> if the request succeeds, and an error otherwise.</p>
    /// - On failure, responds with [`SdkError<ResetFpgaImageAttributeError>`](crate::error::ResetFpgaImageAttributeError)
    pub fn reset_fpga_image_attribute(&self) -> fluent_builders::ResetFpgaImageAttribute {
        fluent_builders::ResetFpgaImageAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ResetImageAttribute`](crate::client::fluent_builders::ResetImageAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(ResetImageAttributeName)`](crate::client::fluent_builders::ResetImageAttribute::attribute) / [`set_attribute(Option<ResetImageAttributeName>)`](crate::client::fluent_builders::ResetImageAttribute::set_attribute): <p>The attribute to reset (currently you can only reset the launch permission attribute).</p>
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::ResetImageAttribute::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::ResetImageAttribute::set_image_id): <p>The ID of the AMI.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ResetImageAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ResetImageAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ResetImageAttributeOutput`](crate::output::ResetImageAttributeOutput)

    /// - On failure, responds with [`SdkError<ResetImageAttributeError>`](crate::error::ResetImageAttributeError)
    pub fn reset_image_attribute(&self) -> fluent_builders::ResetImageAttribute {
        fluent_builders::ResetImageAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ResetInstanceAttribute`](crate::client::fluent_builders::ResetInstanceAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(InstanceAttributeName)`](crate::client::fluent_builders::ResetInstanceAttribute::attribute) / [`set_attribute(Option<InstanceAttributeName>)`](crate::client::fluent_builders::ResetInstanceAttribute::set_attribute): <p>The attribute to reset.</p> <important>   <p>You can only reset the following attributes: <code>kernel</code> | <code>ramdisk</code> | <code>sourceDestCheck</code>.</p>  </important>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ResetInstanceAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ResetInstanceAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::ResetInstanceAttribute::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::ResetInstanceAttribute::set_instance_id): <p>The ID of the instance.</p>
    /// - On success, responds with [`ResetInstanceAttributeOutput`](crate::output::ResetInstanceAttributeOutput)

    /// - On failure, responds with [`SdkError<ResetInstanceAttributeError>`](crate::error::ResetInstanceAttributeError)
    pub fn reset_instance_attribute(&self) -> fluent_builders::ResetInstanceAttribute {
        fluent_builders::ResetInstanceAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ResetNetworkInterfaceAttribute`](crate::client::fluent_builders::ResetNetworkInterfaceAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ResetNetworkInterfaceAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ResetNetworkInterfaceAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::ResetNetworkInterfaceAttribute::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::ResetNetworkInterfaceAttribute::set_network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`source_dest_check(impl Into<String>)`](crate::client::fluent_builders::ResetNetworkInterfaceAttribute::source_dest_check) / [`set_source_dest_check(Option<String>)`](crate::client::fluent_builders::ResetNetworkInterfaceAttribute::set_source_dest_check): <p>The source/destination checking attribute. Resets the value to <code>true</code>.</p>
    /// - On success, responds with [`ResetNetworkInterfaceAttributeOutput`](crate::output::ResetNetworkInterfaceAttributeOutput)

    /// - On failure, responds with [`SdkError<ResetNetworkInterfaceAttributeError>`](crate::error::ResetNetworkInterfaceAttributeError)
    pub fn reset_network_interface_attribute(
        &self,
    ) -> fluent_builders::ResetNetworkInterfaceAttribute {
        fluent_builders::ResetNetworkInterfaceAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ResetSnapshotAttribute`](crate::client::fluent_builders::ResetSnapshotAttribute) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`attribute(SnapshotAttributeName)`](crate::client::fluent_builders::ResetSnapshotAttribute::attribute) / [`set_attribute(Option<SnapshotAttributeName>)`](crate::client::fluent_builders::ResetSnapshotAttribute::set_attribute): <p>The attribute to reset. Currently, only the attribute for permission to create volumes can be reset.</p>
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::ResetSnapshotAttribute::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::ResetSnapshotAttribute::set_snapshot_id): <p>The ID of the snapshot.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::ResetSnapshotAttribute::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::ResetSnapshotAttribute::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`ResetSnapshotAttributeOutput`](crate::output::ResetSnapshotAttributeOutput)

    /// - On failure, responds with [`SdkError<ResetSnapshotAttributeError>`](crate::error::ResetSnapshotAttributeError)
    pub fn reset_snapshot_attribute(&self) -> fluent_builders::ResetSnapshotAttribute {
        fluent_builders::ResetSnapshotAttribute::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RestoreAddressToClassic`](crate::client::fluent_builders::RestoreAddressToClassic) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RestoreAddressToClassic::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RestoreAddressToClassic::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`public_ip(impl Into<String>)`](crate::client::fluent_builders::RestoreAddressToClassic::public_ip) / [`set_public_ip(Option<String>)`](crate::client::fluent_builders::RestoreAddressToClassic::set_public_ip): <p>The Elastic IP address.</p>
    /// - On success, responds with [`RestoreAddressToClassicOutput`](crate::output::RestoreAddressToClassicOutput) with field(s):
    ///   - [`public_ip(Option<String>)`](crate::output::RestoreAddressToClassicOutput::public_ip): <p>The Elastic IP address.</p>
    ///   - [`status(Option<Status>)`](crate::output::RestoreAddressToClassicOutput::status): <p>The move status for the IP address.</p>
    /// - On failure, responds with [`SdkError<RestoreAddressToClassicError>`](crate::error::RestoreAddressToClassicError)
    pub fn restore_address_to_classic(&self) -> fluent_builders::RestoreAddressToClassic {
        fluent_builders::RestoreAddressToClassic::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RestoreImageFromRecycleBin`](crate::client::fluent_builders::RestoreImageFromRecycleBin) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::RestoreImageFromRecycleBin::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::RestoreImageFromRecycleBin::set_image_id): <p>The ID of the AMI to restore.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RestoreImageFromRecycleBin::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RestoreImageFromRecycleBin::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RestoreImageFromRecycleBinOutput`](crate::output::RestoreImageFromRecycleBinOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::RestoreImageFromRecycleBinOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<RestoreImageFromRecycleBinError>`](crate::error::RestoreImageFromRecycleBinError)
    pub fn restore_image_from_recycle_bin(&self) -> fluent_builders::RestoreImageFromRecycleBin {
        fluent_builders::RestoreImageFromRecycleBin::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RestoreManagedPrefixListVersion`](crate::client::fluent_builders::RestoreManagedPrefixListVersion) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RestoreManagedPrefixListVersion::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RestoreManagedPrefixListVersion::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`prefix_list_id(impl Into<String>)`](crate::client::fluent_builders::RestoreManagedPrefixListVersion::prefix_list_id) / [`set_prefix_list_id(Option<String>)`](crate::client::fluent_builders::RestoreManagedPrefixListVersion::set_prefix_list_id): <p>The ID of the prefix list.</p>
    ///   - [`previous_version(i64)`](crate::client::fluent_builders::RestoreManagedPrefixListVersion::previous_version) / [`set_previous_version(Option<i64>)`](crate::client::fluent_builders::RestoreManagedPrefixListVersion::set_previous_version): <p>The version to restore.</p>
    ///   - [`current_version(i64)`](crate::client::fluent_builders::RestoreManagedPrefixListVersion::current_version) / [`set_current_version(Option<i64>)`](crate::client::fluent_builders::RestoreManagedPrefixListVersion::set_current_version): <p>The current version number for the prefix list.</p>
    /// - On success, responds with [`RestoreManagedPrefixListVersionOutput`](crate::output::RestoreManagedPrefixListVersionOutput) with field(s):
    ///   - [`prefix_list(Option<ManagedPrefixList>)`](crate::output::RestoreManagedPrefixListVersionOutput::prefix_list): <p>Information about the prefix list.</p>
    /// - On failure, responds with [`SdkError<RestoreManagedPrefixListVersionError>`](crate::error::RestoreManagedPrefixListVersionError)
    pub fn restore_managed_prefix_list_version(
        &self,
    ) -> fluent_builders::RestoreManagedPrefixListVersion {
        fluent_builders::RestoreManagedPrefixListVersion::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RestoreSnapshotFromRecycleBin`](crate::client::fluent_builders::RestoreSnapshotFromRecycleBin) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::RestoreSnapshotFromRecycleBin::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::RestoreSnapshotFromRecycleBin::set_snapshot_id): <p>The ID of the snapshot to restore.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RestoreSnapshotFromRecycleBin::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RestoreSnapshotFromRecycleBin::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RestoreSnapshotFromRecycleBinOutput`](crate::output::RestoreSnapshotFromRecycleBinOutput) with field(s):
    ///   - [`snapshot_id(Option<String>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::snapshot_id): <p>The ID of the snapshot.</p>
    ///   - [`outpost_arn(Option<String>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::outpost_arn): <p>The ARN of the Outpost on which the snapshot is stored. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html">Amazon EBS local snapshots on Outposts</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    ///   - [`description(Option<String>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::description): <p>The description for the snapshot.</p>
    ///   - [`encrypted(Option<bool>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::encrypted): <p>Indicates whether the snapshot is encrypted.</p>
    ///   - [`owner_id(Option<String>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::owner_id): <p>The ID of the Amazon Web Services account that owns the EBS snapshot.</p>
    ///   - [`progress(Option<String>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::progress): <p>The progress of the snapshot, as a percentage.</p>
    ///   - [`start_time(Option<DateTime>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::start_time): <p>The time stamp when the snapshot was initiated.</p>
    ///   - [`state(Option<SnapshotState>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::state): <p>The state of the snapshot.</p>
    ///   - [`volume_id(Option<String>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::volume_id): <p>The ID of the volume that was used to create the snapshot.</p>
    ///   - [`volume_size(Option<i32>)`](crate::output::RestoreSnapshotFromRecycleBinOutput::volume_size): <p>The size of the volume, in GiB.</p>
    /// - On failure, responds with [`SdkError<RestoreSnapshotFromRecycleBinError>`](crate::error::RestoreSnapshotFromRecycleBinError)
    pub fn restore_snapshot_from_recycle_bin(
        &self,
    ) -> fluent_builders::RestoreSnapshotFromRecycleBin {
        fluent_builders::RestoreSnapshotFromRecycleBin::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RestoreSnapshotTier`](crate::client::fluent_builders::RestoreSnapshotTier) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`snapshot_id(impl Into<String>)`](crate::client::fluent_builders::RestoreSnapshotTier::snapshot_id) / [`set_snapshot_id(Option<String>)`](crate::client::fluent_builders::RestoreSnapshotTier::set_snapshot_id): <p>The ID of the snapshot to restore.</p>
    ///   - [`temporary_restore_days(i32)`](crate::client::fluent_builders::RestoreSnapshotTier::temporary_restore_days) / [`set_temporary_restore_days(Option<i32>)`](crate::client::fluent_builders::RestoreSnapshotTier::set_temporary_restore_days): <p>Specifies the number of days for which to temporarily restore an archived snapshot. Required for temporary restores only. The snapshot will be automatically re-archived after this period.</p>  <p>To temporarily restore an archived snapshot, specify the number of days and omit the <b>PermanentRestore</b> parameter or set it to <code>false</code>.</p>
    ///   - [`permanent_restore(bool)`](crate::client::fluent_builders::RestoreSnapshotTier::permanent_restore) / [`set_permanent_restore(Option<bool>)`](crate::client::fluent_builders::RestoreSnapshotTier::set_permanent_restore): <p>Indicates whether to permanently restore an archived snapshot. To permanently restore an archived snapshot, specify <code>true</code> and omit the <b>RestoreSnapshotTierRequest$TemporaryRestoreDays</b> parameter.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RestoreSnapshotTier::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RestoreSnapshotTier::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RestoreSnapshotTierOutput`](crate::output::RestoreSnapshotTierOutput) with field(s):
    ///   - [`snapshot_id(Option<String>)`](crate::output::RestoreSnapshotTierOutput::snapshot_id): <p>The ID of the snapshot.</p>
    ///   - [`restore_start_time(Option<DateTime>)`](crate::output::RestoreSnapshotTierOutput::restore_start_time): <p>The date and time when the snapshot restore process started.</p>
    ///   - [`restore_duration(Option<i32>)`](crate::output::RestoreSnapshotTierOutput::restore_duration): <p>For temporary restores only. The number of days for which the archived snapshot is temporarily restored.</p>
    ///   - [`is_permanent_restore(Option<bool>)`](crate::output::RestoreSnapshotTierOutput::is_permanent_restore): <p>Indicates whether the snapshot is permanently restored. <code>true</code> indicates a permanent restore. <code>false</code> indicates a temporary restore.</p>
    /// - On failure, responds with [`SdkError<RestoreSnapshotTierError>`](crate::error::RestoreSnapshotTierError)
    pub fn restore_snapshot_tier(&self) -> fluent_builders::RestoreSnapshotTier {
        fluent_builders::RestoreSnapshotTier::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RevokeClientVpnIngress`](crate::client::fluent_builders::RevokeClientVpnIngress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::RevokeClientVpnIngress::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::RevokeClientVpnIngress::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint with which the authorization rule is associated.</p>
    ///   - [`target_network_cidr(impl Into<String>)`](crate::client::fluent_builders::RevokeClientVpnIngress::target_network_cidr) / [`set_target_network_cidr(Option<String>)`](crate::client::fluent_builders::RevokeClientVpnIngress::set_target_network_cidr): <p>The IPv4 address range, in CIDR notation, of the network for which access is being removed.</p>
    ///   - [`access_group_id(impl Into<String>)`](crate::client::fluent_builders::RevokeClientVpnIngress::access_group_id) / [`set_access_group_id(Option<String>)`](crate::client::fluent_builders::RevokeClientVpnIngress::set_access_group_id): <p>The ID of the Active Directory group for which to revoke access. </p>
    ///   - [`revoke_all_groups(bool)`](crate::client::fluent_builders::RevokeClientVpnIngress::revoke_all_groups) / [`set_revoke_all_groups(Option<bool>)`](crate::client::fluent_builders::RevokeClientVpnIngress::set_revoke_all_groups): <p>Indicates whether access should be revoked for all clients.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RevokeClientVpnIngress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RevokeClientVpnIngress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`RevokeClientVpnIngressOutput`](crate::output::RevokeClientVpnIngressOutput) with field(s):
    ///   - [`status(Option<ClientVpnAuthorizationRuleStatus>)`](crate::output::RevokeClientVpnIngressOutput::status): <p>The current state of the authorization rule.</p>
    /// - On failure, responds with [`SdkError<RevokeClientVpnIngressError>`](crate::error::RevokeClientVpnIngressError)
    pub fn revoke_client_vpn_ingress(&self) -> fluent_builders::RevokeClientVpnIngress {
        fluent_builders::RevokeClientVpnIngress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RevokeSecurityGroupEgress`](crate::client::fluent_builders::RevokeSecurityGroupEgress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_group_id): <p>The ID of the security group.</p>
    ///   - [`ip_permissions(Vec<IpPermission>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::ip_permissions) / [`set_ip_permissions(Option<Vec<IpPermission>>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_ip_permissions): <p>The sets of IP permissions. You can't specify a destination security group and a CIDR IP address range in the same set of permissions.</p>
    ///   - [`security_group_rule_ids(Vec<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::security_group_rule_ids) / [`set_security_group_rule_ids(Option<Vec<String>>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_security_group_rule_ids): <p>The IDs of the security group rules.</p>
    ///   - [`cidr_ip(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::cidr_ip) / [`set_cidr_ip(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_cidr_ip): <p>Not supported. Use a set of IP permissions to specify the CIDR.</p>
    ///   - [`from_port(i32)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::from_port) / [`set_from_port(Option<i32>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_from_port): <p>Not supported. Use a set of IP permissions to specify the port.</p>
    ///   - [`ip_protocol(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::ip_protocol) / [`set_ip_protocol(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_ip_protocol): <p>Not supported. Use a set of IP permissions to specify the protocol name or number.</p>
    ///   - [`to_port(i32)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::to_port) / [`set_to_port(Option<i32>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_to_port): <p>Not supported. Use a set of IP permissions to specify the port.</p>
    ///   - [`source_security_group_name(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::source_security_group_name) / [`set_source_security_group_name(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_source_security_group_name): <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
    ///   - [`source_security_group_owner_id(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::source_security_group_owner_id) / [`set_source_security_group_owner_id(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupEgress::set_source_security_group_owner_id): <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
    /// - On success, responds with [`RevokeSecurityGroupEgressOutput`](crate::output::RevokeSecurityGroupEgressOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::RevokeSecurityGroupEgressOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    ///   - [`unknown_ip_permissions(Option<Vec<IpPermission>>)`](crate::output::RevokeSecurityGroupEgressOutput::unknown_ip_permissions): <p>The outbound rules that were unknown to the service. In some cases, <code>unknownIpPermissionSet</code> might be in a different format from the request parameter. </p>
    /// - On failure, responds with [`SdkError<RevokeSecurityGroupEgressError>`](crate::error::RevokeSecurityGroupEgressError)
    pub fn revoke_security_group_egress(&self) -> fluent_builders::RevokeSecurityGroupEgress {
        fluent_builders::RevokeSecurityGroupEgress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RevokeSecurityGroupIngress`](crate::client::fluent_builders::RevokeSecurityGroupIngress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr_ip(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::cidr_ip) / [`set_cidr_ip(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_cidr_ip): <p>The CIDR IP address range. You can't specify this parameter when specifying a source security group.</p>
    ///   - [`from_port(i32)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::from_port) / [`set_from_port(Option<i32>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_from_port): <p>If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP, this is the type number. A value of -1 indicates all ICMP types.</p>
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_group_id): <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_group_name): <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
    ///   - [`ip_permissions(Vec<IpPermission>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::ip_permissions) / [`set_ip_permissions(Option<Vec<IpPermission>>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_ip_permissions): <p>The sets of IP permissions. You can't specify a source security group and a CIDR IP address range in the same set of permissions.</p>
    ///   - [`ip_protocol(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::ip_protocol) / [`set_ip_protocol(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_ip_protocol): <p>The IP protocol name (<code>tcp</code>, <code>udp</code>, <code>icmp</code>) or number (see <a href="http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a>). Use <code>-1</code> to specify all.</p>
    ///   - [`source_security_group_name(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::source_security_group_name) / [`set_source_security_group_name(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_source_security_group_name): <p>[EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. For EC2-VPC, the source security group must be in the same VPC. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.</p>
    ///   - [`source_security_group_owner_id(impl Into<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::source_security_group_owner_id) / [`set_source_security_group_owner_id(Option<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_source_security_group_owner_id): <p>[EC2-Classic] The Amazon Web Services account ID of the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.</p>
    ///   - [`to_port(i32)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::to_port) / [`set_to_port(Option<i32>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_to_port): <p>If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP, this is the code. A value of -1 indicates all ICMP codes.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`security_group_rule_ids(Vec<String>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::security_group_rule_ids) / [`set_security_group_rule_ids(Option<Vec<String>>)`](crate::client::fluent_builders::RevokeSecurityGroupIngress::set_security_group_rule_ids): <p>The IDs of the security group rules.</p>
    /// - On success, responds with [`RevokeSecurityGroupIngressOutput`](crate::output::RevokeSecurityGroupIngressOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::RevokeSecurityGroupIngressOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    ///   - [`unknown_ip_permissions(Option<Vec<IpPermission>>)`](crate::output::RevokeSecurityGroupIngressOutput::unknown_ip_permissions): <p>The inbound rules that were unknown to the service. In some cases, <code>unknownIpPermissionSet</code> might be in a different format from the request parameter. </p>
    /// - On failure, responds with [`SdkError<RevokeSecurityGroupIngressError>`](crate::error::RevokeSecurityGroupIngressError)
    pub fn revoke_security_group_ingress(&self) -> fluent_builders::RevokeSecurityGroupIngress {
        fluent_builders::RevokeSecurityGroupIngress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RunInstances`](crate::client::fluent_builders::RunInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`block_device_mappings(Vec<BlockDeviceMapping>)`](crate::client::fluent_builders::RunInstances::block_device_mappings) / [`set_block_device_mappings(Option<Vec<BlockDeviceMapping>>)`](crate::client::fluent_builders::RunInstances::set_block_device_mappings): <p>The block device mapping, which defines the EBS volumes and instance store volumes to attach to the instance at launch. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html">Block device mappings</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`image_id(impl Into<String>)`](crate::client::fluent_builders::RunInstances::image_id) / [`set_image_id(Option<String>)`](crate::client::fluent_builders::RunInstances::set_image_id): <p>The ID of the AMI. An AMI ID is required to launch an instance and must be specified here or in a launch template.</p>
    ///   - [`instance_type(InstanceType)`](crate::client::fluent_builders::RunInstances::instance_type) / [`set_instance_type(Option<InstanceType>)`](crate::client::fluent_builders::RunInstances::set_instance_type): <p>The instance type. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>  <p>Default: <code>m1.small</code> </p>
    ///   - [`ipv6_address_count(i32)`](crate::client::fluent_builders::RunInstances::ipv6_address_count) / [`set_ipv6_address_count(Option<i32>)`](crate::client::fluent_builders::RunInstances::set_ipv6_address_count): <p>[EC2-VPC] The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch.</p>  <p>You cannot specify this option and the network interfaces option in the same request.</p>
    ///   - [`ipv6_addresses(Vec<InstanceIpv6Address>)`](crate::client::fluent_builders::RunInstances::ipv6_addresses) / [`set_ipv6_addresses(Option<Vec<InstanceIpv6Address>>)`](crate::client::fluent_builders::RunInstances::set_ipv6_addresses): <p>[EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface. You cannot specify this option and the option to assign a number of IPv6 addresses in the same request. You cannot specify this option if you've specified a minimum number of instances to launch.</p>  <p>You cannot specify this option and the network interfaces option in the same request.</p>
    ///   - [`kernel_id(impl Into<String>)`](crate::client::fluent_builders::RunInstances::kernel_id) / [`set_kernel_id(Option<String>)`](crate::client::fluent_builders::RunInstances::set_kernel_id): <p>The ID of the kernel.</p> <important>   <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html">PV-GRUB</a> in the <i>Amazon EC2 User Guide</i>.</p>  </important>
    ///   - [`key_name(impl Into<String>)`](crate::client::fluent_builders::RunInstances::key_name) / [`set_key_name(Option<String>)`](crate::client::fluent_builders::RunInstances::set_key_name): <p>The name of the key pair. You can create a key pair using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html">CreateKeyPair</a> or <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html">ImportKeyPair</a>.</p> <important>   <p>If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in.</p>  </important>
    ///   - [`max_count(i32)`](crate::client::fluent_builders::RunInstances::max_count) / [`set_max_count(Option<i32>)`](crate::client::fluent_builders::RunInstances::set_max_count): <p>The maximum number of instances to launch. If you specify more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches the largest possible number of instances above <code>MinCount</code>.</p>  <p>Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <a href="http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2">How many instances can I run in Amazon EC2</a> in the Amazon EC2 FAQ.</p>
    ///   - [`min_count(i32)`](crate::client::fluent_builders::RunInstances::min_count) / [`set_min_count(Option<i32>)`](crate::client::fluent_builders::RunInstances::set_min_count): <p>The minimum number of instances to launch. If you specify a minimum that is more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches no instances.</p>  <p>Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <a href="http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2">How many instances can I run in Amazon EC2</a> in the Amazon EC2 General FAQ.</p>
    ///   - [`monitoring(RunInstancesMonitoringEnabled)`](crate::client::fluent_builders::RunInstances::monitoring) / [`set_monitoring(Option<RunInstancesMonitoringEnabled>)`](crate::client::fluent_builders::RunInstances::set_monitoring): <p>Specifies whether detailed monitoring is enabled for the instance.</p>
    ///   - [`placement(Placement)`](crate::client::fluent_builders::RunInstances::placement) / [`set_placement(Option<Placement>)`](crate::client::fluent_builders::RunInstances::set_placement): <p>The placement for the instance.</p>
    ///   - [`ramdisk_id(impl Into<String>)`](crate::client::fluent_builders::RunInstances::ramdisk_id) / [`set_ramdisk_id(Option<String>)`](crate::client::fluent_builders::RunInstances::set_ramdisk_id): <p>The ID of the RAM disk to select. Some kernels require additional drivers at launch. Check the kernel requirements for information about whether you need to specify a RAM disk. To find kernel requirements, go to the Amazon Web Services Resource Center and search for the kernel ID.</p> <important>   <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html">PV-GRUB</a> in the <i>Amazon EC2 User Guide</i>.</p>  </important>
    ///   - [`security_group_ids(Vec<String>)`](crate::client::fluent_builders::RunInstances::security_group_ids) / [`set_security_group_ids(Option<Vec<String>>)`](crate::client::fluent_builders::RunInstances::set_security_group_ids): <p>The IDs of the security groups. You can create a security group using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html">CreateSecurityGroup</a>.</p>  <p>If you specify a network interface, you must specify any security groups as part of the network interface.</p>
    ///   - [`security_groups(Vec<String>)`](crate::client::fluent_builders::RunInstances::security_groups) / [`set_security_groups(Option<Vec<String>>)`](crate::client::fluent_builders::RunInstances::set_security_groups): <p>[EC2-Classic, default VPC] The names of the security groups.</p>  <p>If you specify a network interface, you must specify any security groups as part of the network interface.</p>  <p>Default: Amazon EC2 uses the default security group.</p>
    ///   - [`subnet_id(impl Into<String>)`](crate::client::fluent_builders::RunInstances::subnet_id) / [`set_subnet_id(Option<String>)`](crate::client::fluent_builders::RunInstances::set_subnet_id): <p>[EC2-VPC] The ID of the subnet to launch the instance into.</p>  <p>If you specify a network interface, you must specify any subnets as part of the network interface.</p>
    ///   - [`user_data(impl Into<String>)`](crate::client::fluent_builders::RunInstances::user_data) / [`set_user_data(Option<String>)`](crate::client::fluent_builders::RunInstances::set_user_data): <p>The user data script to make available to the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html">Run commands on your Linux instance at launch</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html">Run commands on your Windows instance at launch</a>. If you are using a command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text. User data is limited to 16 KB.</p>
    ///   - [`additional_info(impl Into<String>)`](crate::client::fluent_builders::RunInstances::additional_info) / [`set_additional_info(Option<String>)`](crate::client::fluent_builders::RunInstances::set_additional_info): <p>Reserved.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::RunInstances::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::RunInstances::set_client_token): <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p>  <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>  <p>Constraints: Maximum 64 ASCII characters</p>
    ///   - [`disable_api_termination(bool)`](crate::client::fluent_builders::RunInstances::disable_api_termination) / [`set_disable_api_termination(Option<bool>)`](crate::client::fluent_builders::RunInstances::set_disable_api_termination): <p>If you set this parameter to <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute after launch, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html">ModifyInstanceAttribute</a>. Alternatively, if you set <code>InstanceInitiatedShutdownBehavior</code> to <code>terminate</code>, you can terminate the instance by running the shutdown command from the instance.</p>  <p>Default: <code>false</code> </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RunInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RunInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`ebs_optimized(bool)`](crate::client::fluent_builders::RunInstances::ebs_optimized) / [`set_ebs_optimized(Option<bool>)`](crate::client::fluent_builders::RunInstances::set_ebs_optimized): <p>Indicates whether the instance is optimized for Amazon EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal Amazon EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance.</p>  <p>Default: <code>false</code> </p>
    ///   - [`iam_instance_profile(IamInstanceProfileSpecification)`](crate::client::fluent_builders::RunInstances::iam_instance_profile) / [`set_iam_instance_profile(Option<IamInstanceProfileSpecification>)`](crate::client::fluent_builders::RunInstances::set_iam_instance_profile): <p>The name or Amazon Resource Name (ARN) of an IAM instance profile.</p>
    ///   - [`instance_initiated_shutdown_behavior(ShutdownBehavior)`](crate::client::fluent_builders::RunInstances::instance_initiated_shutdown_behavior) / [`set_instance_initiated_shutdown_behavior(Option<ShutdownBehavior>)`](crate::client::fluent_builders::RunInstances::set_instance_initiated_shutdown_behavior): <p>Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).</p>  <p>Default: <code>stop</code> </p>
    ///   - [`network_interfaces(Vec<InstanceNetworkInterfaceSpecification>)`](crate::client::fluent_builders::RunInstances::network_interfaces) / [`set_network_interfaces(Option<Vec<InstanceNetworkInterfaceSpecification>>)`](crate::client::fluent_builders::RunInstances::set_network_interfaces): <p>The network interfaces to associate with the instance. If you specify a network interface, you must specify any security groups and subnets as part of the network interface.</p>
    ///   - [`private_ip_address(impl Into<String>)`](crate::client::fluent_builders::RunInstances::private_ip_address) / [`set_private_ip_address(Option<String>)`](crate::client::fluent_builders::RunInstances::set_private_ip_address): <p>[EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet.</p>  <p>Only one private IP address can be designated as primary. You can't specify this option if you've specified the option to designate a private IP address as the primary IP address in a network interface specification. You cannot specify this option if you're launching more than one instance in the request.</p>  <p>You cannot specify this option and the network interfaces option in the same request.</p>
    ///   - [`elastic_gpu_specification(Vec<ElasticGpuSpecification>)`](crate::client::fluent_builders::RunInstances::elastic_gpu_specification) / [`set_elastic_gpu_specification(Option<Vec<ElasticGpuSpecification>>)`](crate::client::fluent_builders::RunInstances::set_elastic_gpu_specification): <p>An elastic GPU to associate with the instance. An Elastic GPU is a GPU resource that you can attach to your Windows instance to accelerate the graphics performance of your applications. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html">Amazon EC2 Elastic GPUs</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`elastic_inference_accelerators(Vec<ElasticInferenceAccelerator>)`](crate::client::fluent_builders::RunInstances::elastic_inference_accelerators) / [`set_elastic_inference_accelerators(Option<Vec<ElasticInferenceAccelerator>>)`](crate::client::fluent_builders::RunInstances::set_elastic_inference_accelerators): <p>An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads.</p>  <p>You cannot specify accelerators from different generations in the same request.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::RunInstances::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::RunInstances::set_tag_specifications): <p>The tags to apply to the resources that are created during instance launch.</p>  <p>You can specify tags for the following resources only:</p>  <ul>   <li> <p>Instances</p> </li>   <li> <p>Volumes</p> </li>   <li> <p>Elastic graphics</p> </li>   <li> <p>Spot Instance requests</p> </li>   <li> <p>Network interfaces</p> </li>  </ul>  <p>To tag a resource after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>.</p>
    ///   - [`launch_template(LaunchTemplateSpecification)`](crate::client::fluent_builders::RunInstances::launch_template) / [`set_launch_template(Option<LaunchTemplateSpecification>)`](crate::client::fluent_builders::RunInstances::set_launch_template): <p>The launch template to use to launch the instances. Any parameters that you specify in <code>RunInstances</code> override the same parameters in the launch template. You can specify either the name or ID of a launch template, but not both.</p>
    ///   - [`instance_market_options(InstanceMarketOptionsRequest)`](crate::client::fluent_builders::RunInstances::instance_market_options) / [`set_instance_market_options(Option<InstanceMarketOptionsRequest>)`](crate::client::fluent_builders::RunInstances::set_instance_market_options): <p>The market (purchasing) option for the instances.</p>  <p>For <code>RunInstances</code>, persistent Spot Instance requests are only supported when <b>InstanceInterruptionBehavior</b> is set to either <code>hibernate</code> or <code>stop</code>.</p>
    ///   - [`credit_specification(CreditSpecificationRequest)`](crate::client::fluent_builders::RunInstances::credit_specification) / [`set_credit_specification(Option<CreditSpecificationRequest>)`](crate::client::fluent_builders::RunInstances::set_credit_specification): <p>The credit option for CPU usage of the burstable performance instance. Valid values are <code>standard</code> and <code>unlimited</code>. To change this attribute after launch, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html"> ModifyInstanceCreditSpecification</a>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html">Burstable performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p>  <p>Default: <code>standard</code> (T2 instances) or <code>unlimited</code> (T3/T3a/T4g instances)</p>  <p>For T3 instances with <code>host</code> tenancy, only <code>standard</code> is supported.</p>
    ///   - [`cpu_options(CpuOptionsRequest)`](crate::client::fluent_builders::RunInstances::cpu_options) / [`set_cpu_options(Option<CpuOptionsRequest>)`](crate::client::fluent_builders::RunInstances::set_cpu_options): <p>The CPU options for the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html">Optimize CPU options</a> in the <i>Amazon EC2 User Guide</i>.</p>
    ///   - [`capacity_reservation_specification(CapacityReservationSpecification)`](crate::client::fluent_builders::RunInstances::capacity_reservation_specification) / [`set_capacity_reservation_specification(Option<CapacityReservationSpecification>)`](crate::client::fluent_builders::RunInstances::set_capacity_reservation_specification): <p>Information about the Capacity Reservation targeting option. If you do not specify this parameter, the instance's Capacity Reservation preference defaults to <code>open</code>, which enables it to run in any open Capacity Reservation that has matching attributes (instance type, platform, Availability Zone).</p>
    ///   - [`hibernation_options(HibernationOptionsRequest)`](crate::client::fluent_builders::RunInstances::hibernation_options) / [`set_hibernation_options(Option<HibernationOptionsRequest>)`](crate::client::fluent_builders::RunInstances::set_hibernation_options): <p>Indicates whether an instance is enabled for hibernation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>  <p>You can't enable hibernation and Amazon Web Services Nitro Enclaves on the same instance.</p>
    ///   - [`license_specifications(Vec<LicenseConfigurationRequest>)`](crate::client::fluent_builders::RunInstances::license_specifications) / [`set_license_specifications(Option<Vec<LicenseConfigurationRequest>>)`](crate::client::fluent_builders::RunInstances::set_license_specifications): <p>The license configurations.</p>
    ///   - [`metadata_options(InstanceMetadataOptionsRequest)`](crate::client::fluent_builders::RunInstances::metadata_options) / [`set_metadata_options(Option<InstanceMetadataOptionsRequest>)`](crate::client::fluent_builders::RunInstances::set_metadata_options): <p>The metadata options for the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">Instance metadata and user data</a>.</p>
    ///   - [`enclave_options(EnclaveOptionsRequest)`](crate::client::fluent_builders::RunInstances::enclave_options) / [`set_enclave_options(Option<EnclaveOptionsRequest>)`](crate::client::fluent_builders::RunInstances::set_enclave_options): <p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href="https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html"> What is Amazon Web Services Nitro Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p>  <p>You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance.</p>
    ///   - [`private_dns_name_options(PrivateDnsNameOptionsRequest)`](crate::client::fluent_builders::RunInstances::private_dns_name_options) / [`set_private_dns_name_options(Option<PrivateDnsNameOptionsRequest>)`](crate::client::fluent_builders::RunInstances::set_private_dns_name_options): <p>The options for the instance hostname. The default values are inherited from the subnet.</p>
    ///   - [`maintenance_options(InstanceMaintenanceOptionsRequest)`](crate::client::fluent_builders::RunInstances::maintenance_options) / [`set_maintenance_options(Option<InstanceMaintenanceOptionsRequest>)`](crate::client::fluent_builders::RunInstances::set_maintenance_options): <p>The maintenance and recovery options for the instance.</p>
    ///   - [`disable_api_stop(bool)`](crate::client::fluent_builders::RunInstances::disable_api_stop) / [`set_disable_api_stop(Option<bool>)`](crate::client::fluent_builders::RunInstances::set_disable_api_stop): <p>Indicates whether an instance is enabled for stop protection. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection">Stop protection</a>. </p>
    /// - On success, responds with [`RunInstancesOutput`](crate::output::RunInstancesOutput) with field(s):
    ///   - [`groups(Option<Vec<GroupIdentifier>>)`](crate::output::RunInstancesOutput::groups): <p>[EC2-Classic only] The security groups.</p>
    ///   - [`instances(Option<Vec<Instance>>)`](crate::output::RunInstancesOutput::instances): <p>The instances.</p>
    ///   - [`owner_id(Option<String>)`](crate::output::RunInstancesOutput::owner_id): <p>The ID of the Amazon Web Services account that owns the reservation.</p>
    ///   - [`requester_id(Option<String>)`](crate::output::RunInstancesOutput::requester_id): <p>The ID of the requester that launched the instances on your behalf (for example, Amazon Web Services Management Console or Auto Scaling).</p>
    ///   - [`reservation_id(Option<String>)`](crate::output::RunInstancesOutput::reservation_id): <p>The ID of the reservation.</p>
    /// - On failure, responds with [`SdkError<RunInstancesError>`](crate::error::RunInstancesError)
    pub fn run_instances(&self) -> fluent_builders::RunInstances {
        fluent_builders::RunInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`RunScheduledInstances`](crate::client::fluent_builders::RunScheduledInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::RunScheduledInstances::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::RunScheduledInstances::set_client_token): <p>Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::RunScheduledInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::RunScheduledInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`instance_count(i32)`](crate::client::fluent_builders::RunScheduledInstances::instance_count) / [`set_instance_count(Option<i32>)`](crate::client::fluent_builders::RunScheduledInstances::set_instance_count): <p>The number of instances.</p>  <p>Default: 1</p>
    ///   - [`launch_specification(ScheduledInstancesLaunchSpecification)`](crate::client::fluent_builders::RunScheduledInstances::launch_specification) / [`set_launch_specification(Option<ScheduledInstancesLaunchSpecification>)`](crate::client::fluent_builders::RunScheduledInstances::set_launch_specification): <p>The launch specification. You must match the instance type, Availability Zone, network, and platform of the schedule that you purchased.</p>
    ///   - [`scheduled_instance_id(impl Into<String>)`](crate::client::fluent_builders::RunScheduledInstances::scheduled_instance_id) / [`set_scheduled_instance_id(Option<String>)`](crate::client::fluent_builders::RunScheduledInstances::set_scheduled_instance_id): <p>The Scheduled Instance ID.</p>
    /// - On success, responds with [`RunScheduledInstancesOutput`](crate::output::RunScheduledInstancesOutput) with field(s):
    ///   - [`instance_id_set(Option<Vec<String>>)`](crate::output::RunScheduledInstancesOutput::instance_id_set): <p>The IDs of the newly launched instances.</p>
    /// - On failure, responds with [`SdkError<RunScheduledInstancesError>`](crate::error::RunScheduledInstancesError)
    pub fn run_scheduled_instances(&self) -> fluent_builders::RunScheduledInstances {
        fluent_builders::RunScheduledInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`SearchLocalGatewayRoutes`](crate::client::fluent_builders::SearchLocalGatewayRoutes) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::SearchLocalGatewayRoutes::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`local_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::local_gateway_route_table_id) / [`set_local_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::set_local_gateway_route_table_id): <p>The ID of the local gateway route table.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::set_filters): <p>One or more filters.</p>  <ul>   <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>   <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>   <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>   <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify <code>supernet-of-match</code> as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>   <li> <p> <code>state</code> - The state of the route.</p> </li>   <li> <p> <code>type</code> - The route type.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::SearchLocalGatewayRoutes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`SearchLocalGatewayRoutesOutput`](crate::output::SearchLocalGatewayRoutesOutput) with field(s):
    ///   - [`routes(Option<Vec<LocalGatewayRoute>>)`](crate::output::SearchLocalGatewayRoutesOutput::routes): <p>Information about the routes.</p>
    ///   - [`next_token(Option<String>)`](crate::output::SearchLocalGatewayRoutesOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<SearchLocalGatewayRoutesError>`](crate::error::SearchLocalGatewayRoutesError)
    pub fn search_local_gateway_routes(&self) -> fluent_builders::SearchLocalGatewayRoutes {
        fluent_builders::SearchLocalGatewayRoutes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`SearchTransitGatewayMulticastGroups`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_multicast_domain_id(impl Into<String>)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::transit_gateway_multicast_domain_id) / [`set_transit_gateway_multicast_domain_id(Option<String>)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::set_transit_gateway_multicast_domain_id): <p>The ID of the transit gateway multicast domain.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>group-ip-address</code> - The IP address of the transit gateway multicast group.</p> </li>   <li> <p> <code>is-group-member</code> - The resource is a group member. Valid values are <code>true</code> | <code>false</code>.</p> </li>   <li> <p> <code>is-group-source</code> - The resource is a group source. Valid values are <code>true</code> | <code>false</code>.</p> </li>   <li> <p> <code>member-type</code> - The member type. Valid values are <code>igmp</code> | <code>static</code>.</p> </li>   <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>   <li> <p> <code>resource-type</code> - The type of resource. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>tgw-peering</code>.</p> </li>   <li> <p> <code>source-type</code> - The source type. Valid values are <code>igmp</code> | <code>static</code>.</p> </li>   <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>   <li> <p> <code>transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::set_max_results): <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::set_next_token): <p>The token for the next page of results.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::SearchTransitGatewayMulticastGroups::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`SearchTransitGatewayMulticastGroupsOutput`](crate::output::SearchTransitGatewayMulticastGroupsOutput) with field(s):
    ///   - [`multicast_groups(Option<Vec<TransitGatewayMulticastGroup>>)`](crate::output::SearchTransitGatewayMulticastGroupsOutput::multicast_groups): <p>Information about the transit gateway multicast group.</p>
    ///   - [`next_token(Option<String>)`](crate::output::SearchTransitGatewayMulticastGroupsOutput::next_token): <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
    /// - On failure, responds with [`SdkError<SearchTransitGatewayMulticastGroupsError>`](crate::error::SearchTransitGatewayMulticastGroupsError)
    pub fn search_transit_gateway_multicast_groups(
        &self,
    ) -> fluent_builders::SearchTransitGatewayMulticastGroups {
        fluent_builders::SearchTransitGatewayMulticastGroups::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`SearchTransitGatewayRoutes`](crate::client::fluent_builders::SearchTransitGatewayRoutes) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`transit_gateway_route_table_id(impl Into<String>)`](crate::client::fluent_builders::SearchTransitGatewayRoutes::transit_gateway_route_table_id) / [`set_transit_gateway_route_table_id(Option<String>)`](crate::client::fluent_builders::SearchTransitGatewayRoutes::set_transit_gateway_route_table_id): <p>The ID of the transit gateway route table.</p>
    ///   - [`filters(Vec<Filter>)`](crate::client::fluent_builders::SearchTransitGatewayRoutes::filters) / [`set_filters(Option<Vec<Filter>>)`](crate::client::fluent_builders::SearchTransitGatewayRoutes::set_filters): <p>One or more filters. The possible values are:</p>  <ul>   <li> <p> <code>attachment.transit-gateway-attachment-id</code>- The id of the transit gateway attachment.</p> </li>   <li> <p> <code>attachment.resource-id</code> - The resource id of the transit gateway attachment.</p> </li>   <li> <p> <code>attachment.resource-type</code> - The attachment resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>   <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>   <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>   <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>   <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>   <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify supernet-of-match as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>   <li> <p> <code>state</code> - The state of the route (<code>active</code> | <code>blackhole</code>).</p> </li>   <li> <p> <code>type</code> - The type of route (<code>propagated</code> | <code>static</code>).</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::SearchTransitGatewayRoutes::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::SearchTransitGatewayRoutes::set_max_results): <p>The maximum number of routes to return.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::SearchTransitGatewayRoutes::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::SearchTransitGatewayRoutes::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`SearchTransitGatewayRoutesOutput`](crate::output::SearchTransitGatewayRoutesOutput) with field(s):
    ///   - [`routes(Option<Vec<TransitGatewayRoute>>)`](crate::output::SearchTransitGatewayRoutesOutput::routes): <p>Information about the routes.</p>
    ///   - [`additional_routes_available(Option<bool>)`](crate::output::SearchTransitGatewayRoutesOutput::additional_routes_available): <p>Indicates whether there are additional routes available.</p>
    /// - On failure, responds with [`SdkError<SearchTransitGatewayRoutesError>`](crate::error::SearchTransitGatewayRoutesError)
    pub fn search_transit_gateway_routes(&self) -> fluent_builders::SearchTransitGatewayRoutes {
        fluent_builders::SearchTransitGatewayRoutes::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`SendDiagnosticInterrupt`](crate::client::fluent_builders::SendDiagnosticInterrupt) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_id(impl Into<String>)`](crate::client::fluent_builders::SendDiagnosticInterrupt::instance_id) / [`set_instance_id(Option<String>)`](crate::client::fluent_builders::SendDiagnosticInterrupt::set_instance_id): <p>The ID of the instance.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::SendDiagnosticInterrupt::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::SendDiagnosticInterrupt::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`SendDiagnosticInterruptOutput`](crate::output::SendDiagnosticInterruptOutput)

    /// - On failure, responds with [`SdkError<SendDiagnosticInterruptError>`](crate::error::SendDiagnosticInterruptError)
    pub fn send_diagnostic_interrupt(&self) -> fluent_builders::SendDiagnosticInterrupt {
        fluent_builders::SendDiagnosticInterrupt::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartInstances`](crate::client::fluent_builders::StartInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::StartInstances::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::StartInstances::set_instance_ids): <p>The IDs of the instances.</p>
    ///   - [`additional_info(impl Into<String>)`](crate::client::fluent_builders::StartInstances::additional_info) / [`set_additional_info(Option<String>)`](crate::client::fluent_builders::StartInstances::set_additional_info): <p>Reserved.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::StartInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::StartInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`StartInstancesOutput`](crate::output::StartInstancesOutput) with field(s):
    ///   - [`starting_instances(Option<Vec<InstanceStateChange>>)`](crate::output::StartInstancesOutput::starting_instances): <p>Information about the started instances.</p>
    /// - On failure, responds with [`SdkError<StartInstancesError>`](crate::error::StartInstancesError)
    pub fn start_instances(&self) -> fluent_builders::StartInstances {
        fluent_builders::StartInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartNetworkInsightsAccessScopeAnalysis`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_access_scope_id(impl Into<String>)`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis::network_insights_access_scope_id) / [`set_network_insights_access_scope_id(Option<String>)`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis::set_network_insights_access_scope_id): <p>The ID of the Network Access Scope.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis::set_tag_specifications): <p>The tags to apply.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::StartNetworkInsightsAccessScopeAnalysis::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On success, responds with [`StartNetworkInsightsAccessScopeAnalysisOutput`](crate::output::StartNetworkInsightsAccessScopeAnalysisOutput) with field(s):
    ///   - [`network_insights_access_scope_analysis(Option<NetworkInsightsAccessScopeAnalysis>)`](crate::output::StartNetworkInsightsAccessScopeAnalysisOutput::network_insights_access_scope_analysis): <p>The Network Access Scope analysis.</p>
    /// - On failure, responds with [`SdkError<StartNetworkInsightsAccessScopeAnalysisError>`](crate::error::StartNetworkInsightsAccessScopeAnalysisError)
    pub fn start_network_insights_access_scope_analysis(
        &self,
    ) -> fluent_builders::StartNetworkInsightsAccessScopeAnalysis {
        fluent_builders::StartNetworkInsightsAccessScopeAnalysis::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartNetworkInsightsAnalysis`](crate::client::fluent_builders::StartNetworkInsightsAnalysis) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_insights_path_id(impl Into<String>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::network_insights_path_id) / [`set_network_insights_path_id(Option<String>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::set_network_insights_path_id): <p>The ID of the path.</p>
    ///   - [`additional_accounts(Vec<String>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::additional_accounts) / [`set_additional_accounts(Option<Vec<String>>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::set_additional_accounts): <p>The member accounts that contain resources that the path can traverse.</p>
    ///   - [`filter_in_arns(Vec<String>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::filter_in_arns) / [`set_filter_in_arns(Option<Vec<String>>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::set_filter_in_arns): <p>The Amazon Resource Names (ARN) of the resources that the path must traverse.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`tag_specifications(Vec<TagSpecification>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::tag_specifications) / [`set_tag_specifications(Option<Vec<TagSpecification>>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::set_tag_specifications): <p>The tags to apply.</p>
    ///   - [`client_token(impl Into<String>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::client_token) / [`set_client_token(Option<String>)`](crate::client::fluent_builders::StartNetworkInsightsAnalysis::set_client_token): <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
    /// - On success, responds with [`StartNetworkInsightsAnalysisOutput`](crate::output::StartNetworkInsightsAnalysisOutput) with field(s):
    ///   - [`network_insights_analysis(Option<NetworkInsightsAnalysis>)`](crate::output::StartNetworkInsightsAnalysisOutput::network_insights_analysis): <p>Information about the network insights analysis.</p>
    /// - On failure, responds with [`SdkError<StartNetworkInsightsAnalysisError>`](crate::error::StartNetworkInsightsAnalysisError)
    pub fn start_network_insights_analysis(&self) -> fluent_builders::StartNetworkInsightsAnalysis {
        fluent_builders::StartNetworkInsightsAnalysis::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartVpcEndpointServicePrivateDnsVerification`](crate::client::fluent_builders::StartVpcEndpointServicePrivateDnsVerification) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::StartVpcEndpointServicePrivateDnsVerification::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::StartVpcEndpointServicePrivateDnsVerification::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`service_id(impl Into<String>)`](crate::client::fluent_builders::StartVpcEndpointServicePrivateDnsVerification::service_id) / [`set_service_id(Option<String>)`](crate::client::fluent_builders::StartVpcEndpointServicePrivateDnsVerification::set_service_id): <p>The ID of the endpoint service.</p>
    /// - On success, responds with [`StartVpcEndpointServicePrivateDnsVerificationOutput`](crate::output::StartVpcEndpointServicePrivateDnsVerificationOutput) with field(s):
    ///   - [`return_value(Option<bool>)`](crate::output::StartVpcEndpointServicePrivateDnsVerificationOutput::return_value): <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
    /// - On failure, responds with [`SdkError<StartVpcEndpointServicePrivateDnsVerificationError>`](crate::error::StartVpcEndpointServicePrivateDnsVerificationError)
    pub fn start_vpc_endpoint_service_private_dns_verification(
        &self,
    ) -> fluent_builders::StartVpcEndpointServicePrivateDnsVerification {
        fluent_builders::StartVpcEndpointServicePrivateDnsVerification::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StopInstances`](crate::client::fluent_builders::StopInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::StopInstances::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::StopInstances::set_instance_ids): <p>The IDs of the instances.</p>
    ///   - [`hibernate(bool)`](crate::client::fluent_builders::StopInstances::hibernate) / [`set_hibernate(Option<bool>)`](crate::client::fluent_builders::StopInstances::set_hibernate): <p>Hibernates the instance if the instance was enabled for hibernation at launch. If the instance cannot hibernate successfully, a normal shutdown occurs. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>  <p> Default: <code>false</code> </p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::StopInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::StopInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`force(bool)`](crate::client::fluent_builders::StopInstances::force) / [`set_force(Option<bool>)`](crate::client::fluent_builders::StopInstances::set_force): <p>Forces the instances to stop. The instances do not have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures. This option is not recommended for Windows instances.</p>  <p>Default: <code>false</code> </p>
    /// - On success, responds with [`StopInstancesOutput`](crate::output::StopInstancesOutput) with field(s):
    ///   - [`stopping_instances(Option<Vec<InstanceStateChange>>)`](crate::output::StopInstancesOutput::stopping_instances): <p>Information about the stopped instances.</p>
    /// - On failure, responds with [`SdkError<StopInstancesError>`](crate::error::StopInstancesError)
    pub fn stop_instances(&self) -> fluent_builders::StopInstances {
        fluent_builders::StopInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`TerminateClientVpnConnections`](crate::client::fluent_builders::TerminateClientVpnConnections) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`client_vpn_endpoint_id(impl Into<String>)`](crate::client::fluent_builders::TerminateClientVpnConnections::client_vpn_endpoint_id) / [`set_client_vpn_endpoint_id(Option<String>)`](crate::client::fluent_builders::TerminateClientVpnConnections::set_client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint to which the client is connected.</p>
    ///   - [`connection_id(impl Into<String>)`](crate::client::fluent_builders::TerminateClientVpnConnections::connection_id) / [`set_connection_id(Option<String>)`](crate::client::fluent_builders::TerminateClientVpnConnections::set_connection_id): <p>The ID of the client connection to be terminated.</p>
    ///   - [`username(impl Into<String>)`](crate::client::fluent_builders::TerminateClientVpnConnections::username) / [`set_username(Option<String>)`](crate::client::fluent_builders::TerminateClientVpnConnections::set_username): <p>The name of the user who initiated the connection. Use this option to terminate all active connections for the specified user. This option can only be used if the user has established up to five connections.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::TerminateClientVpnConnections::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::TerminateClientVpnConnections::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`TerminateClientVpnConnectionsOutput`](crate::output::TerminateClientVpnConnectionsOutput) with field(s):
    ///   - [`client_vpn_endpoint_id(Option<String>)`](crate::output::TerminateClientVpnConnectionsOutput::client_vpn_endpoint_id): <p>The ID of the Client VPN endpoint.</p>
    ///   - [`username(Option<String>)`](crate::output::TerminateClientVpnConnectionsOutput::username): <p>The user who established the terminated client connections.</p>
    ///   - [`connection_statuses(Option<Vec<TerminateConnectionStatus>>)`](crate::output::TerminateClientVpnConnectionsOutput::connection_statuses): <p>The current state of the client connections.</p>
    /// - On failure, responds with [`SdkError<TerminateClientVpnConnectionsError>`](crate::error::TerminateClientVpnConnectionsError)
    pub fn terminate_client_vpn_connections(
        &self,
    ) -> fluent_builders::TerminateClientVpnConnections {
        fluent_builders::TerminateClientVpnConnections::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`TerminateInstances`](crate::client::fluent_builders::TerminateInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::TerminateInstances::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::TerminateInstances::set_instance_ids): <p>The IDs of the instances.</p>  <p>Constraints: Up to 1000 instance IDs. We recommend breaking up this request into smaller batches.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::TerminateInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::TerminateInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`TerminateInstancesOutput`](crate::output::TerminateInstancesOutput) with field(s):
    ///   - [`terminating_instances(Option<Vec<InstanceStateChange>>)`](crate::output::TerminateInstancesOutput::terminating_instances): <p>Information about the terminated instances.</p>
    /// - On failure, responds with [`SdkError<TerminateInstancesError>`](crate::error::TerminateInstancesError)
    pub fn terminate_instances(&self) -> fluent_builders::TerminateInstances {
        fluent_builders::TerminateInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UnassignIpv6Addresses`](crate::client::fluent_builders::UnassignIpv6Addresses) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`ipv6_addresses(Vec<String>)`](crate::client::fluent_builders::UnassignIpv6Addresses::ipv6_addresses) / [`set_ipv6_addresses(Option<Vec<String>>)`](crate::client::fluent_builders::UnassignIpv6Addresses::set_ipv6_addresses): <p>The IPv6 addresses to unassign from the network interface.</p>
    ///   - [`ipv6_prefixes(Vec<String>)`](crate::client::fluent_builders::UnassignIpv6Addresses::ipv6_prefixes) / [`set_ipv6_prefixes(Option<Vec<String>>)`](crate::client::fluent_builders::UnassignIpv6Addresses::set_ipv6_prefixes): <p>The IPv6 prefixes to unassign from the network interface.</p>
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::UnassignIpv6Addresses::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::UnassignIpv6Addresses::set_network_interface_id): <p>The ID of the network interface.</p>
    /// - On success, responds with [`UnassignIpv6AddressesOutput`](crate::output::UnassignIpv6AddressesOutput) with field(s):
    ///   - [`network_interface_id(Option<String>)`](crate::output::UnassignIpv6AddressesOutput::network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`unassigned_ipv6_addresses(Option<Vec<String>>)`](crate::output::UnassignIpv6AddressesOutput::unassigned_ipv6_addresses): <p>The IPv6 addresses that have been unassigned from the network interface.</p>
    ///   - [`unassigned_ipv6_prefixes(Option<Vec<String>>)`](crate::output::UnassignIpv6AddressesOutput::unassigned_ipv6_prefixes): <p>The IPv4 prefixes that have been unassigned from the network interface.</p>
    /// - On failure, responds with [`SdkError<UnassignIpv6AddressesError>`](crate::error::UnassignIpv6AddressesError)
    pub fn unassign_ipv6_addresses(&self) -> fluent_builders::UnassignIpv6Addresses {
        fluent_builders::UnassignIpv6Addresses::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UnassignPrivateIpAddresses`](crate::client::fluent_builders::UnassignPrivateIpAddresses) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`network_interface_id(impl Into<String>)`](crate::client::fluent_builders::UnassignPrivateIpAddresses::network_interface_id) / [`set_network_interface_id(Option<String>)`](crate::client::fluent_builders::UnassignPrivateIpAddresses::set_network_interface_id): <p>The ID of the network interface.</p>
    ///   - [`private_ip_addresses(Vec<String>)`](crate::client::fluent_builders::UnassignPrivateIpAddresses::private_ip_addresses) / [`set_private_ip_addresses(Option<Vec<String>>)`](crate::client::fluent_builders::UnassignPrivateIpAddresses::set_private_ip_addresses): <p>The secondary private IP addresses to unassign from the network interface. You can specify this option multiple times to unassign more than one IP address.</p>
    ///   - [`ipv4_prefixes(Vec<String>)`](crate::client::fluent_builders::UnassignPrivateIpAddresses::ipv4_prefixes) / [`set_ipv4_prefixes(Option<Vec<String>>)`](crate::client::fluent_builders::UnassignPrivateIpAddresses::set_ipv4_prefixes): <p>The IPv4 prefixes to unassign from the network interface.</p>
    /// - On success, responds with [`UnassignPrivateIpAddressesOutput`](crate::output::UnassignPrivateIpAddressesOutput)

    /// - On failure, responds with [`SdkError<UnassignPrivateIpAddressesError>`](crate::error::UnassignPrivateIpAddressesError)
    pub fn unassign_private_ip_addresses(&self) -> fluent_builders::UnassignPrivateIpAddresses {
        fluent_builders::UnassignPrivateIpAddresses::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UnmonitorInstances`](crate::client::fluent_builders::UnmonitorInstances) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`instance_ids(Vec<String>)`](crate::client::fluent_builders::UnmonitorInstances::instance_ids) / [`set_instance_ids(Option<Vec<String>>)`](crate::client::fluent_builders::UnmonitorInstances::set_instance_ids): <p>The IDs of the instances.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::UnmonitorInstances::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::UnmonitorInstances::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`UnmonitorInstancesOutput`](crate::output::UnmonitorInstancesOutput) with field(s):
    ///   - [`instance_monitorings(Option<Vec<InstanceMonitoring>>)`](crate::output::UnmonitorInstancesOutput::instance_monitorings): <p>The monitoring information.</p>
    /// - On failure, responds with [`SdkError<UnmonitorInstancesError>`](crate::error::UnmonitorInstancesError)
    pub fn unmonitor_instances(&self) -> fluent_builders::UnmonitorInstances {
        fluent_builders::UnmonitorInstances::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateSecurityGroupRuleDescriptionsEgress`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::set_group_id): <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::set_group_name): <p>[Default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request.</p>
    ///   - [`ip_permissions(Vec<IpPermission>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::ip_permissions) / [`set_ip_permissions(Option<Vec<IpPermission>>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::set_ip_permissions): <p>The IP permissions for the security group rule. You must specify either the IP permissions or the description.</p>
    ///   - [`security_group_rule_descriptions(Vec<SecurityGroupRuleDescription>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::security_group_rule_descriptions) / [`set_security_group_rule_descriptions(Option<Vec<SecurityGroupRuleDescription>>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::set_security_group_rule_descriptions): <p>The description for the egress security group rules. You must specify either the description or the IP permissions.</p>
    /// - On success, responds with [`UpdateSecurityGroupRuleDescriptionsEgressOutput`](crate::output::UpdateSecurityGroupRuleDescriptionsEgressOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::UpdateSecurityGroupRuleDescriptionsEgressOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    /// - On failure, responds with [`SdkError<UpdateSecurityGroupRuleDescriptionsEgressError>`](crate::error::UpdateSecurityGroupRuleDescriptionsEgressError)
    pub fn update_security_group_rule_descriptions_egress(
        &self,
    ) -> fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress {
        fluent_builders::UpdateSecurityGroupRuleDescriptionsEgress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateSecurityGroupRuleDescriptionsIngress`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    ///   - [`group_id(impl Into<String>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::group_id) / [`set_group_id(Option<String>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::set_group_id): <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
    ///   - [`group_name(impl Into<String>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::group_name) / [`set_group_name(Option<String>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::set_group_name): <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
    ///   - [`ip_permissions(Vec<IpPermission>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::ip_permissions) / [`set_ip_permissions(Option<Vec<IpPermission>>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::set_ip_permissions): <p>The IP permissions for the security group rule. You must specify either IP permissions or a description.</p>
    ///   - [`security_group_rule_descriptions(Vec<SecurityGroupRuleDescription>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::security_group_rule_descriptions) / [`set_security_group_rule_descriptions(Option<Vec<SecurityGroupRuleDescription>>)`](crate::client::fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::set_security_group_rule_descriptions): <p>[VPC only] The description for the ingress security group rules. You must specify either a description or IP permissions.</p>
    /// - On success, responds with [`UpdateSecurityGroupRuleDescriptionsIngressOutput`](crate::output::UpdateSecurityGroupRuleDescriptionsIngressOutput) with field(s):
    ///   - [`r#return(Option<bool>)`](crate::output::UpdateSecurityGroupRuleDescriptionsIngressOutput::return): <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
    /// - On failure, responds with [`SdkError<UpdateSecurityGroupRuleDescriptionsIngressError>`](crate::error::UpdateSecurityGroupRuleDescriptionsIngressError)
    pub fn update_security_group_rule_descriptions_ingress(
        &self,
    ) -> fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress {
        fluent_builders::UpdateSecurityGroupRuleDescriptionsIngress::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`WithdrawByoipCidr`](crate::client::fluent_builders::WithdrawByoipCidr) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`cidr(impl Into<String>)`](crate::client::fluent_builders::WithdrawByoipCidr::cidr) / [`set_cidr(Option<String>)`](crate::client::fluent_builders::WithdrawByoipCidr::set_cidr): <p>The address range, in CIDR notation.</p>
    ///   - [`dry_run(bool)`](crate::client::fluent_builders::WithdrawByoipCidr::dry_run) / [`set_dry_run(Option<bool>)`](crate::client::fluent_builders::WithdrawByoipCidr::set_dry_run): <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
    /// - On success, responds with [`WithdrawByoipCidrOutput`](crate::output::WithdrawByoipCidrOutput) with field(s):
    ///   - [`byoip_cidr(Option<ByoipCidr>)`](crate::output::WithdrawByoipCidrOutput::byoip_cidr): <p>Information about the address pool.</p>
    /// - On failure, responds with [`SdkError<WithdrawByoipCidrError>`](crate::error::WithdrawByoipCidrError)
    pub fn withdraw_byoip_cidr(&self) -> fluent_builders::WithdrawByoipCidr {
        fluent_builders::WithdrawByoipCidr::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 `AcceptAddressTransfer`.
    ///
    /// <p>Accepts an Elastic IP address transfer. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#using-instance-addressing-eips-transfer-accept">Accept a transferred Elastic IP address</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AcceptAddressTransfer {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::accept_address_transfer_input::Builder,
    }
    impl AcceptAddressTransfer {
        /// Creates a new `AcceptAddressTransfer`.
        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::AcceptAddressTransfer,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AcceptAddressTransferError>,
        > {
            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::AcceptAddressTransferOutput,
            aws_smithy_http::result::SdkError<crate::error::AcceptAddressTransferError>,
        > {
            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 Elastic IP address you are accepting for transfer.</p>
        pub fn address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.address(input.into());
            self
        }
        /// <p>The Elastic IP address you are accepting for transfer.</p>
        pub fn set_address(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_address(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AcceptReservedInstancesExchangeQuote`.
    ///
    /// <p>Accepts the Convertible Reserved Instance exchange quote described in the <code>GetReservedInstancesExchangeQuote</code> call.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AcceptReservedInstancesExchangeQuote {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::accept_reserved_instances_exchange_quote_input::Builder,
    }
    impl AcceptReservedInstancesExchangeQuote {
        /// Creates a new `AcceptReservedInstancesExchangeQuote`.
        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::AcceptReservedInstancesExchangeQuote,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::AcceptReservedInstancesExchangeQuoteError,
            >,
        > {
            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::AcceptReservedInstancesExchangeQuoteOutput,
            aws_smithy_http::result::SdkError<
                crate::error::AcceptReservedInstancesExchangeQuoteError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `ReservedInstanceIds`.
        ///
        /// To override the contents of this collection use [`set_reserved_instance_ids`](Self::set_reserved_instance_ids).
        ///
        /// <p>The IDs of the Convertible Reserved Instances to exchange for another Convertible Reserved Instance of the same or higher value.</p>
        pub fn reserved_instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.reserved_instance_ids(input.into());
            self
        }
        /// <p>The IDs of the Convertible Reserved Instances to exchange for another Convertible Reserved Instance of the same or higher value.</p>
        pub fn set_reserved_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instance_ids(input);
            self
        }
        /// Appends an item to `TargetConfigurations`.
        ///
        /// To override the contents of this collection use [`set_target_configurations`](Self::set_target_configurations).
        ///
        /// <p>The configuration of the target Convertible Reserved Instance to exchange for your current Convertible Reserved Instances.</p>
        pub fn target_configurations(
            mut self,
            input: crate::model::TargetConfigurationRequest,
        ) -> Self {
            self.inner = self.inner.target_configurations(input);
            self
        }
        /// <p>The configuration of the target Convertible Reserved Instance to exchange for your current Convertible Reserved Instances.</p>
        pub fn set_target_configurations(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TargetConfigurationRequest>>,
        ) -> Self {
            self.inner = self.inner.set_target_configurations(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AcceptTransitGatewayMulticastDomainAssociations`.
    ///
    /// <p>Accepts a request to associate subnets with a transit gateway multicast domain.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AcceptTransitGatewayMulticastDomainAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::accept_transit_gateway_multicast_domain_associations_input::Builder,
    }
    impl AcceptTransitGatewayMulticastDomainAssociations {
        /// Creates a new `AcceptTransitGatewayMulticastDomainAssociations`.
        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::AcceptTransitGatewayMulticastDomainAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::AcceptTransitGatewayMulticastDomainAssociationsError,
            >,
        > {
            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::AcceptTransitGatewayMulticastDomainAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::AcceptTransitGatewayMulticastDomainAssociationsError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>The ID of the transit gateway attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// Appends an item to `SubnetIds`.
        ///
        /// To override the contents of this collection use [`set_subnet_ids`](Self::set_subnet_ids).
        ///
        /// <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
        pub fn subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_ids(input.into());
            self
        }
        /// <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
        pub fn set_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_subnet_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AcceptTransitGatewayPeeringAttachment`.
    ///
    /// <p>Accepts a transit gateway peering attachment request. The peering attachment must be in the <code>pendingAcceptance</code> state.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AcceptTransitGatewayPeeringAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::accept_transit_gateway_peering_attachment_input::Builder,
    }
    impl AcceptTransitGatewayPeeringAttachment {
        /// Creates a new `AcceptTransitGatewayPeeringAttachment`.
        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::AcceptTransitGatewayPeeringAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::AcceptTransitGatewayPeeringAttachmentError,
            >,
        > {
            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::AcceptTransitGatewayPeeringAttachmentOutput,
            aws_smithy_http::result::SdkError<
                crate::error::AcceptTransitGatewayPeeringAttachmentError,
            >,
        > {
            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 transit gateway attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AcceptTransitGatewayVpcAttachment`.
    ///
    /// <p>Accepts a request to attach a VPC to a transit gateway.</p>
    /// <p>The VPC attachment must be in the <code>pendingAcceptance</code> state. Use <code>DescribeTransitGatewayVpcAttachments</code> to view your pending VPC attachment requests. Use <code>RejectTransitGatewayVpcAttachment</code> to reject a VPC attachment request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AcceptTransitGatewayVpcAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::accept_transit_gateway_vpc_attachment_input::Builder,
    }
    impl AcceptTransitGatewayVpcAttachment {
        /// Creates a new `AcceptTransitGatewayVpcAttachment`.
        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::AcceptTransitGatewayVpcAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AcceptTransitGatewayVpcAttachmentError>,
        > {
            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::AcceptTransitGatewayVpcAttachmentOutput,
            aws_smithy_http::result::SdkError<crate::error::AcceptTransitGatewayVpcAttachmentError>,
        > {
            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 attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AcceptVpcEndpointConnections`.
    ///
    /// <p>Accepts connection requests to your VPC endpoint service.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AcceptVpcEndpointConnections {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::accept_vpc_endpoint_connections_input::Builder,
    }
    impl AcceptVpcEndpointConnections {
        /// Creates a new `AcceptVpcEndpointConnections`.
        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::AcceptVpcEndpointConnections,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AcceptVpcEndpointConnectionsError>,
        > {
            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::AcceptVpcEndpointConnectionsOutput,
            aws_smithy_http::result::SdkError<crate::error::AcceptVpcEndpointConnectionsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC endpoint service.</p>
        pub fn service_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_id(input.into());
            self
        }
        /// <p>The ID of the VPC endpoint service.</p>
        pub fn set_service_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_id(input);
            self
        }
        /// Appends an item to `VpcEndpointIds`.
        ///
        /// To override the contents of this collection use [`set_vpc_endpoint_ids`](Self::set_vpc_endpoint_ids).
        ///
        /// <p>The IDs of the interface VPC endpoints.</p>
        pub fn vpc_endpoint_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_endpoint_ids(input.into());
            self
        }
        /// <p>The IDs of the interface VPC endpoints.</p>
        pub fn set_vpc_endpoint_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AcceptVpcPeeringConnection`.
    ///
    /// <p>Accept a VPC peering connection request. To accept a request, the VPC peering connection must be in the <code>pending-acceptance</code> state, and you must be the owner of the peer VPC. Use <code>DescribeVpcPeeringConnections</code> to view your outstanding VPC peering connection requests.</p>
    /// <p>For an inter-Region VPC peering connection request, you must accept the VPC peering connection in the Region of the accepter VPC.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AcceptVpcPeeringConnection {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::accept_vpc_peering_connection_input::Builder,
    }
    impl AcceptVpcPeeringConnection {
        /// Creates a new `AcceptVpcPeeringConnection`.
        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::AcceptVpcPeeringConnection,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AcceptVpcPeeringConnectionError>,
        > {
            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::AcceptVpcPeeringConnectionOutput,
            aws_smithy_http::result::SdkError<crate::error::AcceptVpcPeeringConnectionError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC peering connection. You must specify this parameter in the request.</p>
        pub fn vpc_peering_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_peering_connection_id(input.into());
            self
        }
        /// <p>The ID of the VPC peering connection. You must specify this parameter in the request.</p>
        pub fn set_vpc_peering_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_peering_connection_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AdvertiseByoipCidr`.
    ///
    /// <p>Advertises an IPv4 or IPv6 address range that is provisioned for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP).</p>
    /// <p>You can perform this operation at most once every 10 seconds, even if you specify different address ranges each time.</p>
    /// <p>We recommend that you stop advertising the BYOIP CIDR from other locations when you advertise it from Amazon Web Services. To minimize down time, you can configure your Amazon Web Services resources to use an address from a BYOIP CIDR before it is advertised, and then simultaneously stop advertising it from the current location and start advertising it through Amazon Web Services.</p>
    /// <p>It can take a few minutes before traffic to the specified addresses starts routing to Amazon Web Services because of BGP propagation delays.</p>
    /// <p>To stop advertising the BYOIP CIDR, use <code>WithdrawByoipCidr</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AdvertiseByoipCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::advertise_byoip_cidr_input::Builder,
    }
    impl AdvertiseByoipCidr {
        /// Creates a new `AdvertiseByoipCidr`.
        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::AdvertiseByoipCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AdvertiseByoipCidrError>,
        > {
            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::AdvertiseByoipCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::AdvertiseByoipCidrError>,
        > {
            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 address range, in CIDR notation. This must be the exact range that you provisioned. You can't advertise only a portion of the provisioned range.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The address range, in CIDR notation. This must be the exact range that you provisioned. You can't advertise only a portion of the provisioned range.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AllocateAddress`.
    ///
    /// <p>Allocates an Elastic IP address to your Amazon Web Services account. After you allocate the Elastic IP address you can associate it with an instance or network interface. After you release an Elastic IP address, it is released to the IP address pool and can be allocated to a different Amazon Web Services account.</p>
    /// <p>You can allocate an Elastic IP address from an address pool owned by Amazon Web Services or from an address pool created from a public IPv4 address range that you have brought to Amazon Web Services for use with your Amazon Web Services resources using bring your own IP addresses (BYOIP). For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html">Bring Your Own IP Addresses (BYOIP)</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>[EC2-VPC] If you release an Elastic IP address, you might be able to recover it. You cannot recover an Elastic IP address that you released after it is allocated to another Amazon Web Services account. You cannot recover an Elastic IP address for EC2-Classic. To attempt to recover an Elastic IP address that you released, specify it in this operation.</p>
    /// <p>An Elastic IP address is for use either in the EC2-Classic platform or in a VPC. By default, you can allocate 5 Elastic IP addresses for EC2-Classic per Region and 5 Elastic IP addresses for EC2-VPC per Region.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>You can allocate a carrier IP address which is a public IP address from a telecommunication carrier, to a network interface which resides in a subnet in a Wavelength Zone (for example an EC2 instance). </p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AllocateAddress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::allocate_address_input::Builder,
    }
    impl AllocateAddress {
        /// Creates a new `AllocateAddress`.
        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::AllocateAddress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AllocateAddressError>,
        > {
            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::AllocateAddressOutput,
            aws_smithy_http::result::SdkError<crate::error::AllocateAddressError>,
        > {
            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>Indicates whether the Elastic IP address is for use with instances in a VPC or instances in EC2-Classic.</p>
        /// <p>Default: If the Region supports EC2-Classic, the default is <code>standard</code>. Otherwise, the default is <code>vpc</code>.</p>
        pub fn domain(mut self, input: crate::model::DomainType) -> Self {
            self.inner = self.inner.domain(input);
            self
        }
        /// <p>Indicates whether the Elastic IP address is for use with instances in a VPC or instances in EC2-Classic.</p>
        /// <p>Default: If the Region supports EC2-Classic, the default is <code>standard</code>. Otherwise, the default is <code>vpc</code>.</p>
        pub fn set_domain(mut self, input: std::option::Option<crate::model::DomainType>) -> Self {
            self.inner = self.inner.set_domain(input);
            self
        }
        /// <p>[EC2-VPC] The Elastic IP address to recover or an IPv4 address from an address pool.</p>
        pub fn address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.address(input.into());
            self
        }
        /// <p>[EC2-VPC] The Elastic IP address to recover or an IPv4 address from an address pool.</p>
        pub fn set_address(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_address(input);
            self
        }
        /// <p>The ID of an address pool that you own. Use this parameter to let Amazon EC2 select an address from the address pool. To specify a specific address from the address pool, use the <code>Address</code> parameter instead.</p>
        pub fn public_ipv4_pool(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ipv4_pool(input.into());
            self
        }
        /// <p>The ID of an address pool that you own. Use this parameter to let Amazon EC2 select an address from the address pool. To specify a specific address from the address pool, use the <code>Address</code> parameter instead.</p>
        pub fn set_public_ipv4_pool(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_public_ipv4_pool(input);
            self
        }
        /// <p> A unique set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses. Use this parameter to limit the IP address to this location. IP addresses cannot move between network border groups.</p>
        /// <p>Use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html">DescribeAvailabilityZones</a> to view the network border groups.</p>
        /// <p>You cannot use a network border group with EC2 Classic. If you attempt this operation on EC2 Classic, you receive an <code>InvalidParameterCombination</code> error.</p>
        pub fn network_border_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_border_group(input.into());
            self
        }
        /// <p> A unique set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses. Use this parameter to limit the IP address to this location. IP addresses cannot move between network border groups.</p>
        /// <p>Use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html">DescribeAvailabilityZones</a> to view the network border groups.</p>
        /// <p>You cannot use a network border group with EC2 Classic. If you attempt this operation on EC2 Classic, you receive an <code>InvalidParameterCombination</code> error.</p>
        pub fn set_network_border_group(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_border_group(input);
            self
        }
        /// <p>The ID of a customer-owned address pool. Use this parameter to let Amazon EC2 select an address from the address pool. Alternatively, specify a specific address from the address pool.</p>
        pub fn customer_owned_ipv4_pool(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.customer_owned_ipv4_pool(input.into());
            self
        }
        /// <p>The ID of a customer-owned address pool. Use this parameter to let Amazon EC2 select an address from the address pool. Alternatively, specify a specific address from the address pool.</p>
        pub fn set_customer_owned_ipv4_pool(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_customer_owned_ipv4_pool(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the Elastic IP address.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the Elastic IP address.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AllocateHosts`.
    ///
    /// <p>Allocates a Dedicated Host to your account. At a minimum, specify the supported instance type or instance family, the Availability Zone in which to allocate the host, and the number of hosts to allocate.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AllocateHosts {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::allocate_hosts_input::Builder,
    }
    impl AllocateHosts {
        /// Creates a new `AllocateHosts`.
        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::AllocateHosts,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AllocateHostsError>,
        > {
            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::AllocateHostsOutput,
            aws_smithy_http::result::SdkError<crate::error::AllocateHostsError>,
        > {
            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>Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding"> Understanding auto-placement and affinity</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>Default: <code>on</code> </p>
        pub fn auto_placement(mut self, input: crate::model::AutoPlacement) -> Self {
            self.inner = self.inner.auto_placement(input);
            self
        }
        /// <p>Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding"> Understanding auto-placement and affinity</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>Default: <code>on</code> </p>
        pub fn set_auto_placement(
            mut self,
            input: std::option::Option<crate::model::AutoPlacement>,
        ) -> Self {
            self.inner = self.inner.set_auto_placement(input);
            self
        }
        /// <p>The Availability Zone in which to allocate the Dedicated Host.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>The Availability Zone in which to allocate the Dedicated Host.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only.</p>
        /// <p>If you want the Dedicated Hosts to support multiple instance types in a specific instance family, omit this parameter and specify <b>InstanceFamily</b> instead. You cannot specify <b>InstanceType</b> and <b>InstanceFamily</b> in the same request.</p>
        pub fn instance_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_type(input.into());
            self
        }
        /// <p>Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only.</p>
        /// <p>If you want the Dedicated Hosts to support multiple instance types in a specific instance family, omit this parameter and specify <b>InstanceFamily</b> instead. You cannot specify <b>InstanceType</b> and <b>InstanceFamily</b> in the same request.</p>
        pub fn set_instance_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_type(input);
            self
        }
        /// <p>Specifies the instance family to be supported by the Dedicated Hosts. If you specify an instance family, the Dedicated Hosts support multiple instance types within that instance family.</p>
        /// <p>If you want the Dedicated Hosts to support a specific instance type only, omit this parameter and specify <b>InstanceType</b> instead. You cannot specify <b>InstanceFamily</b> and <b>InstanceType</b> in the same request.</p>
        pub fn instance_family(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_family(input.into());
            self
        }
        /// <p>Specifies the instance family to be supported by the Dedicated Hosts. If you specify an instance family, the Dedicated Hosts support multiple instance types within that instance family.</p>
        /// <p>If you want the Dedicated Hosts to support a specific instance type only, omit this parameter and specify <b>InstanceType</b> instead. You cannot specify <b>InstanceFamily</b> and <b>InstanceType</b> in the same request.</p>
        pub fn set_instance_family(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_family(input);
            self
        }
        /// <p>The number of Dedicated Hosts to allocate to your account with these parameters.</p>
        pub fn quantity(mut self, input: i32) -> Self {
            self.inner = self.inner.quantity(input);
            self
        }
        /// <p>The number of Dedicated Hosts to allocate to your account with these parameters.</p>
        pub fn set_quantity(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_quantity(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the Dedicated Host during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the Dedicated Host during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Indicates whether to enable or disable host recovery for the Dedicated Host. Host recovery is disabled by default. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html"> Host recovery</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>Default: <code>off</code> </p>
        pub fn host_recovery(mut self, input: crate::model::HostRecovery) -> Self {
            self.inner = self.inner.host_recovery(input);
            self
        }
        /// <p>Indicates whether to enable or disable host recovery for the Dedicated Host. Host recovery is disabled by default. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html"> Host recovery</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>Default: <code>off</code> </p>
        pub fn set_host_recovery(
            mut self,
            input: std::option::Option<crate::model::HostRecovery>,
        ) -> Self {
            self.inner = self.inner.set_host_recovery(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on which to allocate the Dedicated Host.</p>
        pub fn outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.outpost_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on which to allocate the Dedicated Host.</p>
        pub fn set_outpost_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_outpost_arn(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AllocateIpamPoolCidr`.
    ///
    /// <p>Allocate a CIDR from an IPAM pool. In IPAM, an allocation is a CIDR assignment from an IPAM pool to another resource or IPAM pool. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/allocate-cidrs-ipam.html">Allocate CIDRs</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AllocateIpamPoolCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::allocate_ipam_pool_cidr_input::Builder,
    }
    impl AllocateIpamPoolCidr {
        /// Creates a new `AllocateIpamPoolCidr`.
        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::AllocateIpamPoolCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AllocateIpamPoolCidrError>,
        > {
            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::AllocateIpamPoolCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::AllocateIpamPoolCidrError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM pool from which you would like to allocate a CIDR.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the IPAM pool from which you would like to allocate a CIDR.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The CIDR you would like to allocate from the IPAM pool. Note the following:</p>
        /// <ul>
        /// <li> <p>If there is no DefaultNetmaskLength allocation rule set on the pool, you must specify either the NetmaskLength or the CIDR.</p> </li>
        /// <li> <p>If the DefaultNetmaskLength allocation rule is set on the pool, you can specify either the NetmaskLength or the CIDR and the DefaultNetmaskLength allocation rule will be ignored.</p> </li>
        /// </ul>
        /// <p>Possible values: Any available IPv4 or IPv6 CIDR.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The CIDR you would like to allocate from the IPAM pool. Note the following:</p>
        /// <ul>
        /// <li> <p>If there is no DefaultNetmaskLength allocation rule set on the pool, you must specify either the NetmaskLength or the CIDR.</p> </li>
        /// <li> <p>If the DefaultNetmaskLength allocation rule is set on the pool, you can specify either the NetmaskLength or the CIDR and the DefaultNetmaskLength allocation rule will be ignored.</p> </li>
        /// </ul>
        /// <p>Possible values: Any available IPv4 or IPv6 CIDR.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>The netmask length of the CIDR you would like to allocate from the IPAM pool. Note the following:</p>
        /// <ul>
        /// <li> <p>If there is no DefaultNetmaskLength allocation rule set on the pool, you must specify either the NetmaskLength or the CIDR.</p> </li>
        /// <li> <p>If the DefaultNetmaskLength allocation rule is set on the pool, you can specify either the NetmaskLength or the CIDR and the DefaultNetmaskLength allocation rule will be ignored.</p> </li>
        /// </ul>
        /// <p>Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
        pub fn netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.netmask_length(input);
            self
        }
        /// <p>The netmask length of the CIDR you would like to allocate from the IPAM pool. Note the following:</p>
        /// <ul>
        /// <li> <p>If there is no DefaultNetmaskLength allocation rule set on the pool, you must specify either the NetmaskLength or the CIDR.</p> </li>
        /// <li> <p>If the DefaultNetmaskLength allocation rule is set on the pool, you can specify either the NetmaskLength or the CIDR and the DefaultNetmaskLength allocation rule will be ignored.</p> </li>
        /// </ul>
        /// <p>Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
        pub fn set_netmask_length(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_netmask_length(input);
            self
        }
        /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>A description for the allocation.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the allocation.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>A preview of the next available CIDR in a pool.</p>
        pub fn preview_next_cidr(mut self, input: bool) -> Self {
            self.inner = self.inner.preview_next_cidr(input);
            self
        }
        /// <p>A preview of the next available CIDR in a pool.</p>
        pub fn set_preview_next_cidr(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_preview_next_cidr(input);
            self
        }
        /// Appends an item to `DisallowedCidrs`.
        ///
        /// To override the contents of this collection use [`set_disallowed_cidrs`](Self::set_disallowed_cidrs).
        ///
        /// <p>Exclude a particular CIDR range from being returned by the pool. Disallowed CIDRs are only allowed if using netmask length for allocation.</p>
        pub fn disallowed_cidrs(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.disallowed_cidrs(input.into());
            self
        }
        /// <p>Exclude a particular CIDR range from being returned by the pool. Disallowed CIDRs are only allowed if using netmask length for allocation.</p>
        pub fn set_disallowed_cidrs(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_disallowed_cidrs(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ApplySecurityGroupsToClientVpnTargetNetwork`.
    ///
    /// <p>Applies a security group to the association between the target network and the Client VPN endpoint. This action replaces the existing security groups with the specified security groups.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ApplySecurityGroupsToClientVpnTargetNetwork {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::apply_security_groups_to_client_vpn_target_network_input::Builder,
    }
    impl ApplySecurityGroupsToClientVpnTargetNetwork {
        /// Creates a new `ApplySecurityGroupsToClientVpnTargetNetwork`.
        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::ApplySecurityGroupsToClientVpnTargetNetwork,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ApplySecurityGroupsToClientVpnTargetNetworkError,
            >,
        > {
            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::ApplySecurityGroupsToClientVpnTargetNetworkOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ApplySecurityGroupsToClientVpnTargetNetworkError,
            >,
        > {
            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 Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The ID of the VPC in which the associated target network is located.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC in which the associated target network is located.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// Appends an item to `SecurityGroupIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_ids`](Self::set_security_group_ids).
        ///
        /// <p>The IDs of the security groups to apply to the associated target network. Up to 5 security groups can be applied to an associated target network.</p>
        pub fn security_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_ids(input.into());
            self
        }
        /// <p>The IDs of the security groups to apply to the associated target network. Up to 5 security groups can be applied to an associated target network.</p>
        pub fn set_security_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssignIpv6Addresses`.
    ///
    /// <p>Assigns one or more IPv6 addresses to the specified network interface. You can specify one or more specific IPv6 addresses, or you can specify the number of IPv6 addresses to be automatically assigned from within the subnet's IPv6 CIDR block range. You can assign as many IPv6 addresses to a network interface as you can assign private IPv4 addresses, and the limit varies per instance type. For information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI">IP Addresses Per Network Interface Per Instance Type</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>You must specify either the IPv6 addresses or the IPv6 address count in the request. </p>
    /// <p>You can optionally use Prefix Delegation on the network interface. You must specify either the IPV6 Prefix Delegation prefixes, or the IPv6 Prefix Delegation count. For information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html"> Assigning prefixes to Amazon EC2 network interfaces</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssignIpv6Addresses {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::assign_ipv6_addresses_input::Builder,
    }
    impl AssignIpv6Addresses {
        /// Creates a new `AssignIpv6Addresses`.
        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::AssignIpv6Addresses,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssignIpv6AddressesError>,
        > {
            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::AssignIpv6AddressesOutput,
            aws_smithy_http::result::SdkError<crate::error::AssignIpv6AddressesError>,
        > {
            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 number of additional IPv6 addresses to assign to the network interface. The specified number of IPv6 addresses are assigned in addition to the existing IPv6 addresses that are already assigned to the network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses.</p>
        pub fn ipv6_address_count(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv6_address_count(input);
            self
        }
        /// <p>The number of additional IPv6 addresses to assign to the network interface. The specified number of IPv6 addresses are assigned in addition to the existing IPv6 addresses that are already assigned to the network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses.</p>
        pub fn set_ipv6_address_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv6_address_count(input);
            self
        }
        /// Appends an item to `Ipv6Addresses`.
        ///
        /// To override the contents of this collection use [`set_ipv6_addresses`](Self::set_ipv6_addresses).
        ///
        /// <p>The IPv6 addresses to be assigned to the network interface. You can't use this option if you're specifying a number of IPv6 addresses.</p>
        pub fn ipv6_addresses(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_addresses(input.into());
            self
        }
        /// <p>The IPv6 addresses to be assigned to the network interface. You can't use this option if you're specifying a number of IPv6 addresses.</p>
        pub fn set_ipv6_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_addresses(input);
            self
        }
        /// <p>The number of IPv6 prefixes that Amazon Web Services automatically assigns to the network interface. You cannot use this option if you use the <code>Ipv6Prefixes</code> option.</p>
        pub fn ipv6_prefix_count(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv6_prefix_count(input);
            self
        }
        /// <p>The number of IPv6 prefixes that Amazon Web Services automatically assigns to the network interface. You cannot use this option if you use the <code>Ipv6Prefixes</code> option.</p>
        pub fn set_ipv6_prefix_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv6_prefix_count(input);
            self
        }
        /// Appends an item to `Ipv6Prefixes`.
        ///
        /// To override the contents of this collection use [`set_ipv6_prefixes`](Self::set_ipv6_prefixes).
        ///
        /// <p>One or more IPv6 prefixes assigned to the network interface. You cannot use this option if you use the <code>Ipv6PrefixCount</code> option.</p>
        pub fn ipv6_prefixes(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_prefixes(input.into());
            self
        }
        /// <p>One or more IPv6 prefixes assigned to the network interface. You cannot use this option if you use the <code>Ipv6PrefixCount</code> option.</p>
        pub fn set_ipv6_prefixes(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_prefixes(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssignPrivateIpAddresses`.
    ///
    /// <p>Assigns one or more secondary private IP addresses to the specified network interface.</p>
    /// <p>You can specify one or more specific secondary IP addresses, or you can specify the number of secondary IP addresses to be automatically assigned within the subnet's CIDR block range. The number of secondary IP addresses that you can assign to an instance varies by instance type. For information about instance types, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance Types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. For more information about Elastic IP addresses, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>When you move a secondary private IP address to another network interface, any Elastic IP address that is associated with the IP address is also moved.</p>
    /// <p>Remapping an IP address is an asynchronous operation. When you move an IP address from one network interface to another, check <code>network/interfaces/macs/mac/local-ipv4s</code> in the instance metadata to confirm that the remapping is complete.</p>
    /// <p>You must specify either the IP addresses or the IP address count in the request.</p>
    /// <p>You can optionally use Prefix Delegation on the network interface. You must specify either the IPv4 Prefix Delegation prefixes, or the IPv4 Prefix Delegation count. For information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html"> Assigning prefixes to Amazon EC2 network interfaces</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssignPrivateIpAddresses {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::assign_private_ip_addresses_input::Builder,
    }
    impl AssignPrivateIpAddresses {
        /// Creates a new `AssignPrivateIpAddresses`.
        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::AssignPrivateIpAddresses,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssignPrivateIpAddressesError>,
        > {
            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::AssignPrivateIpAddressesOutput,
            aws_smithy_http::result::SdkError<crate::error::AssignPrivateIpAddressesError>,
        > {
            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>Indicates whether to allow an IP address that is already assigned to another network interface or instance to be reassigned to the specified network interface.</p>
        pub fn allow_reassignment(mut self, input: bool) -> Self {
            self.inner = self.inner.allow_reassignment(input);
            self
        }
        /// <p>Indicates whether to allow an IP address that is already assigned to another network interface or instance to be reassigned to the specified network interface.</p>
        pub fn set_allow_reassignment(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_allow_reassignment(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// Appends an item to `PrivateIpAddresses`.
        ///
        /// To override the contents of this collection use [`set_private_ip_addresses`](Self::set_private_ip_addresses).
        ///
        /// <p>The IP addresses to be assigned as a secondary private IP address to the network interface. You can't specify this parameter when also specifying a number of secondary IP addresses.</p>
        /// <p>If you don't specify an IP address, Amazon EC2 automatically selects an IP address within the subnet range.</p>
        pub fn private_ip_addresses(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.private_ip_addresses(input.into());
            self
        }
        /// <p>The IP addresses to be assigned as a secondary private IP address to the network interface. You can't specify this parameter when also specifying a number of secondary IP addresses.</p>
        /// <p>If you don't specify an IP address, Amazon EC2 automatically selects an IP address within the subnet range.</p>
        pub fn set_private_ip_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_private_ip_addresses(input);
            self
        }
        /// <p>The number of secondary IP addresses to assign to the network interface. You can't specify this parameter when also specifying private IP addresses.</p>
        pub fn secondary_private_ip_address_count(mut self, input: i32) -> Self {
            self.inner = self.inner.secondary_private_ip_address_count(input);
            self
        }
        /// <p>The number of secondary IP addresses to assign to the network interface. You can't specify this parameter when also specifying private IP addresses.</p>
        pub fn set_secondary_private_ip_address_count(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_secondary_private_ip_address_count(input);
            self
        }
        /// Appends an item to `Ipv4Prefixes`.
        ///
        /// To override the contents of this collection use [`set_ipv4_prefixes`](Self::set_ipv4_prefixes).
        ///
        /// <p>One or more IPv4 prefixes assigned to the network interface. You cannot use this option if you use the <code>Ipv4PrefixCount</code> option.</p>
        pub fn ipv4_prefixes(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv4_prefixes(input.into());
            self
        }
        /// <p>One or more IPv4 prefixes assigned to the network interface. You cannot use this option if you use the <code>Ipv4PrefixCount</code> option.</p>
        pub fn set_ipv4_prefixes(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipv4_prefixes(input);
            self
        }
        /// <p>The number of IPv4 prefixes that Amazon Web Services automatically assigns to the network interface. You cannot use this option if you use the <code>Ipv4 Prefixes</code> option.</p>
        pub fn ipv4_prefix_count(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv4_prefix_count(input);
            self
        }
        /// <p>The number of IPv4 prefixes that Amazon Web Services automatically assigns to the network interface. You cannot use this option if you use the <code>Ipv4 Prefixes</code> option.</p>
        pub fn set_ipv4_prefix_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv4_prefix_count(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateAddress`.
    ///
    /// <p>Associates an Elastic IP address, or carrier IP address (for instances that are in subnets in Wavelength Zones) with an instance or a network interface. Before you can use an Elastic IP address, you must allocate it to your account.</p>
    /// <p>An Elastic IP address is for use in either the EC2-Classic platform or in a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>[EC2-Classic, VPC in an EC2-VPC-only account] If the Elastic IP address is already associated with a different instance, it is disassociated from that instance and associated with the specified instance. If you associate an Elastic IP address with an instance that has an existing Elastic IP address, the existing address is disassociated from the instance, but remains allocated to your account.</p>
    /// <p>[VPC in an EC2-Classic account] If you don't specify a private IP address, the Elastic IP address is associated with the primary IP address. If the Elastic IP address is already associated with a different instance or a network interface, you get an error unless you allow reassociation. You cannot associate an Elastic IP address with an instance or network interface that has an existing Elastic IP address.</p>
    /// <p>[Subnets in Wavelength Zones] You can associate an IP address from the telecommunication carrier to the instance or network interface. </p>
    /// <p>You cannot associate an Elastic IP address with an interface in a different network border group.</p> <important>
    /// <p>This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error, and you may be charged for each time the Elastic IP address is remapped to the same instance. For more information, see the <i>Elastic IP Addresses</i> section of <a href="http://aws.amazon.com/ec2/pricing/">Amazon EC2 Pricing</a>.</p>
    /// </important> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateAddress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_address_input::Builder,
    }
    impl AssociateAddress {
        /// Creates a new `AssociateAddress`.
        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::AssociateAddress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateAddressError>,
        > {
            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::AssociateAddressOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateAddressError>,
        > {
            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>[EC2-VPC] The allocation ID. This is required for EC2-VPC.</p>
        pub fn allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_id(input.into());
            self
        }
        /// <p>[EC2-VPC] The allocation ID. This is required for EC2-VPC.</p>
        pub fn set_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_allocation_id(input);
            self
        }
        /// <p>The ID of the instance. The instance must have exactly one attached network interface. For EC2-VPC, you can specify either the instance ID or the network interface ID, but not both. For EC2-Classic, you must specify an instance ID and the instance must be in the running state.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance. The instance must have exactly one attached network interface. For EC2-VPC, you can specify either the instance ID or the network interface ID, but not both. For EC2-Classic, you must specify an instance ID and the instance must be in the running state.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>[EC2-Classic] The Elastic IP address to associate with the instance. This is required for EC2-Classic.</p>
        pub fn public_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ip(input.into());
            self
        }
        /// <p>[EC2-Classic] The Elastic IP address to associate with the instance. This is required for EC2-Classic.</p>
        pub fn set_public_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_public_ip(input);
            self
        }
        /// <p>[EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an Elastic IP address that is already associated with an instance or network interface to be reassociated with the specified instance or network interface. Otherwise, the operation fails. In a VPC in an EC2-VPC-only account, reassociation is automatic, therefore you can specify false to ensure the operation fails if the Elastic IP address is already associated with another resource.</p>
        pub fn allow_reassociation(mut self, input: bool) -> Self {
            self.inner = self.inner.allow_reassociation(input);
            self
        }
        /// <p>[EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an Elastic IP address that is already associated with an instance or network interface to be reassociated with the specified instance or network interface. Otherwise, the operation fails. In a VPC in an EC2-VPC-only account, reassociation is automatic, therefore you can specify false to ensure the operation fails if the Elastic IP address is already associated with another resource.</p>
        pub fn set_allow_reassociation(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_allow_reassociation(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>[EC2-VPC] The ID of the network interface. If the instance has more than one network interface, you must specify a network interface ID.</p>
        /// <p>For EC2-VPC, you can specify either the instance ID or the network interface ID, but not both. </p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>[EC2-VPC] The ID of the network interface. If the instance has more than one network interface, you must specify a network interface ID.</p>
        /// <p>For EC2-VPC, you can specify either the instance ID or the network interface ID, but not both. </p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>[EC2-VPC] The primary or secondary private IP address to associate with the Elastic IP address. If no private IP address is specified, the Elastic IP address is associated with the primary private IP address.</p>
        pub fn private_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.private_ip_address(input.into());
            self
        }
        /// <p>[EC2-VPC] The primary or secondary private IP address to associate with the Elastic IP address. If no private IP address is specified, the Elastic IP address is associated with the primary private IP address.</p>
        pub fn set_private_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_private_ip_address(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateClientVpnTargetNetwork`.
    ///
    /// <p>Associates a target network with a Client VPN endpoint. A target network is a subnet in a VPC. You can associate multiple subnets from the same VPC with a Client VPN endpoint. You can associate only one subnet in each Availability Zone. We recommend that you associate at least two subnets to provide Availability Zone redundancy.</p>
    /// <p>If you specified a VPC when you created the Client VPN endpoint or if you have previous subnet associations, the specified subnet must be in the same VPC. To specify a subnet that's in a different VPC, you must first modify the Client VPN endpoint (<code>ModifyClientVpnEndpoint</code>) and change the VPC that's associated with it.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateClientVpnTargetNetwork {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_client_vpn_target_network_input::Builder,
    }
    impl AssociateClientVpnTargetNetwork {
        /// Creates a new `AssociateClientVpnTargetNetwork`.
        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::AssociateClientVpnTargetNetwork,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateClientVpnTargetNetworkError>,
        > {
            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::AssociateClientVpnTargetNetworkOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateClientVpnTargetNetworkError>,
        > {
            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 Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The ID of the subnet to associate with the Client VPN endpoint.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The ID of the subnet to associate with the Client VPN endpoint.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateDhcpOptions`.
    ///
    /// <p>Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC.</p>
    /// <p>After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html">DHCP options sets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateDhcpOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_dhcp_options_input::Builder,
    }
    impl AssociateDhcpOptions {
        /// Creates a new `AssociateDhcpOptions`.
        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::AssociateDhcpOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateDhcpOptionsError>,
        > {
            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::AssociateDhcpOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateDhcpOptionsError>,
        > {
            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 DHCP options set, or <code>default</code> to associate no DHCP options with the VPC.</p>
        pub fn dhcp_options_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.dhcp_options_id(input.into());
            self
        }
        /// <p>The ID of the DHCP options set, or <code>default</code> to associate no DHCP options with the VPC.</p>
        pub fn set_dhcp_options_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_dhcp_options_id(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateEnclaveCertificateIamRole`.
    ///
    /// <p>Associates an Identity and Access Management (IAM) role with an Certificate Manager (ACM) certificate. This enables the certificate to be used by the ACM for Nitro Enclaves application inside an enclave. For more information, see <a href="https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html">Certificate Manager for Nitro Enclaves</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p>
    /// <p>When the IAM role is associated with the ACM certificate, the certificate, certificate chain, and encrypted private key are placed in an Amazon S3 location that only the associated IAM role can access. The private key of the certificate is encrypted with an Amazon Web Services managed key that has an attached attestation-based key policy.</p>
    /// <p>To enable the IAM role to access the Amazon S3 object, you must grant it permission to call <code>s3:GetObject</code> on the Amazon S3 bucket returned by the command. To enable the IAM role to access the KMS key, you must grant it permission to call <code>kms:Decrypt</code> on the KMS key returned by the command. For more information, see <a href="https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html#add-policy"> Grant the role permission to access the certificate and encryption key</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateEnclaveCertificateIamRole {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_enclave_certificate_iam_role_input::Builder,
    }
    impl AssociateEnclaveCertificateIamRole {
        /// Creates a new `AssociateEnclaveCertificateIamRole`.
        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::AssociateEnclaveCertificateIamRole,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::AssociateEnclaveCertificateIamRoleError,
            >,
        > {
            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::AssociateEnclaveCertificateIamRoleOutput,
            aws_smithy_http::result::SdkError<
                crate::error::AssociateEnclaveCertificateIamRoleError,
            >,
        > {
            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 ARN of the ACM certificate with which to associate the IAM role.</p>
        pub fn certificate_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.certificate_arn(input.into());
            self
        }
        /// <p>The ARN of the ACM certificate with which to associate the IAM role.</p>
        pub fn set_certificate_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_certificate_arn(input);
            self
        }
        /// <p>The ARN of the IAM role to associate with the ACM certificate. You can associate up to 16 IAM roles with an ACM certificate.</p>
        pub fn role_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.role_arn(input.into());
            self
        }
        /// <p>The ARN of the IAM role to associate with the ACM certificate. You can associate up to 16 IAM roles with an ACM certificate.</p>
        pub fn set_role_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_role_arn(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateIamInstanceProfile`.
    ///
    /// <p>Associates an IAM instance profile with a running or stopped instance. You cannot associate more than one IAM instance profile with an instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateIamInstanceProfile {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_iam_instance_profile_input::Builder,
    }
    impl AssociateIamInstanceProfile {
        /// Creates a new `AssociateIamInstanceProfile`.
        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::AssociateIamInstanceProfile,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateIamInstanceProfileError>,
        > {
            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::AssociateIamInstanceProfileOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateIamInstanceProfileError>,
        > {
            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 IAM instance profile.</p>
        pub fn iam_instance_profile(
            mut self,
            input: crate::model::IamInstanceProfileSpecification,
        ) -> Self {
            self.inner = self.inner.iam_instance_profile(input);
            self
        }
        /// <p>The IAM instance profile.</p>
        pub fn set_iam_instance_profile(
            mut self,
            input: std::option::Option<crate::model::IamInstanceProfileSpecification>,
        ) -> Self {
            self.inner = self.inner.set_iam_instance_profile(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateInstanceEventWindow`.
    ///
    /// <p>Associates one or more targets with an event window. Only one type of target (instance IDs, Dedicated Host IDs, or tags) can be specified with an event window.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html">Define event windows for scheduled events</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateInstanceEventWindow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_instance_event_window_input::Builder,
    }
    impl AssociateInstanceEventWindow {
        /// Creates a new `AssociateInstanceEventWindow`.
        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::AssociateInstanceEventWindow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateInstanceEventWindowError>,
        > {
            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::AssociateInstanceEventWindowOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateInstanceEventWindowError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the event window.</p>
        pub fn instance_event_window_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_event_window_id(input.into());
            self
        }
        /// <p>The ID of the event window.</p>
        pub fn set_instance_event_window_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_event_window_id(input);
            self
        }
        /// <p>One or more targets associated with the specified event window.</p>
        pub fn association_target(
            mut self,
            input: crate::model::InstanceEventWindowAssociationRequest,
        ) -> Self {
            self.inner = self.inner.association_target(input);
            self
        }
        /// <p>One or more targets associated with the specified event window.</p>
        pub fn set_association_target(
            mut self,
            input: std::option::Option<crate::model::InstanceEventWindowAssociationRequest>,
        ) -> Self {
            self.inner = self.inner.set_association_target(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateRouteTable`.
    ///
    /// <p>Associates a subnet in your VPC or an internet gateway or virtual private gateway attached to your VPC with a route table in your VPC. This association causes traffic from the subnet or gateway to be routed according to the routes in the route table. The action returns an association ID, which you need in order to disassociate the route table later. A route table can be associated with multiple subnets.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html">Route tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_route_table_input::Builder,
    }
    impl AssociateRouteTable {
        /// Creates a new `AssociateRouteTable`.
        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::AssociateRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateRouteTableError>,
        > {
            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::AssociateRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateRouteTableError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn route_table_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn set_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_route_table_id(input);
            self
        }
        /// <p>The ID of the subnet.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The ID of the subnet.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// <p>The ID of the internet gateway or virtual private gateway.</p>
        pub fn gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.gateway_id(input.into());
            self
        }
        /// <p>The ID of the internet gateway or virtual private gateway.</p>
        pub fn set_gateway_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_gateway_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateSubnetCidrBlock`.
    ///
    /// <p>Associates a CIDR block with your subnet. You can only associate a single IPv6 CIDR block with your subnet. An IPv6 CIDR block must have a prefix length of /64.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateSubnetCidrBlock {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_subnet_cidr_block_input::Builder,
    }
    impl AssociateSubnetCidrBlock {
        /// Creates a new `AssociateSubnetCidrBlock`.
        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::AssociateSubnetCidrBlock,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateSubnetCidrBlockError>,
        > {
            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::AssociateSubnetCidrBlockOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateSubnetCidrBlockError>,
        > {
            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 IPv6 CIDR block for your subnet. The subnet must have a /64 prefix length.</p>
        pub fn ipv6_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_cidr_block(input.into());
            self
        }
        /// <p>The IPv6 CIDR block for your subnet. The subnet must have a /64 prefix length.</p>
        pub fn set_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_cidr_block(input);
            self
        }
        /// <p>The ID of your subnet.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The ID of your subnet.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateTransitGatewayMulticastDomain`.
    ///
    /// <p>Associates the specified subnets and transit gateway attachments with the specified transit gateway multicast domain.</p>
    /// <p>The transit gateway attachment must be in the available state before you can add a resource. Use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTransitGatewayAttachments.html">DescribeTransitGatewayAttachments</a> to see the state of the attachment.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateTransitGatewayMulticastDomain {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_transit_gateway_multicast_domain_input::Builder,
    }
    impl AssociateTransitGatewayMulticastDomain {
        /// Creates a new `AssociateTransitGatewayMulticastDomain`.
        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::AssociateTransitGatewayMulticastDomain,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::AssociateTransitGatewayMulticastDomainError,
            >,
        > {
            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::AssociateTransitGatewayMulticastDomainOutput,
            aws_smithy_http::result::SdkError<
                crate::error::AssociateTransitGatewayMulticastDomainError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>The ID of the transit gateway attachment to associate with the transit gateway multicast domain.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway attachment to associate with the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// Appends an item to `SubnetIds`.
        ///
        /// To override the contents of this collection use [`set_subnet_ids`](Self::set_subnet_ids).
        ///
        /// <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
        pub fn subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_ids(input.into());
            self
        }
        /// <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
        pub fn set_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_subnet_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateTransitGatewayPolicyTable`.
    ///
    /// <p>Associates the specified transit gateway attachment with a transit gateway policy table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateTransitGatewayPolicyTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_transit_gateway_policy_table_input::Builder,
    }
    impl AssociateTransitGatewayPolicyTable {
        /// Creates a new `AssociateTransitGatewayPolicyTable`.
        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::AssociateTransitGatewayPolicyTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::AssociateTransitGatewayPolicyTableError,
            >,
        > {
            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::AssociateTransitGatewayPolicyTableOutput,
            aws_smithy_http::result::SdkError<
                crate::error::AssociateTransitGatewayPolicyTableError,
            >,
        > {
            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 transit gateway policy table to associate with the transit gateway attachment.</p>
        pub fn transit_gateway_policy_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_policy_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway policy table to associate with the transit gateway attachment.</p>
        pub fn set_transit_gateway_policy_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_policy_table_id(input);
            self
        }
        /// <p>The ID of the transit gateway attachment to associate with the policy table.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway attachment to associate with the policy table.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateTransitGatewayRouteTable`.
    ///
    /// <p>Associates the specified attachment with the specified transit gateway route table. You can associate only one route table with an attachment.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateTransitGatewayRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_transit_gateway_route_table_input::Builder,
    }
    impl AssociateTransitGatewayRouteTable {
        /// Creates a new `AssociateTransitGatewayRouteTable`.
        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::AssociateTransitGatewayRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateTransitGatewayRouteTableError>,
        > {
            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::AssociateTransitGatewayRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateTransitGatewayRouteTableError>,
        > {
            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 transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateTrunkInterface`.
    ///
    /// <note>
    /// <p>This API action is currently in <b>limited preview only</b>. If you are interested in using this feature, contact your account manager.</p>
    /// </note>
    /// <p>Associates a branch network interface with a trunk network interface.</p>
    /// <p>Before you create the association, run the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html">create-network-interface</a> command and set <code>--interface-type</code> to <code>trunk</code>. You must also create a network interface for each branch network interface that you want to associate with the trunk network interface.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateTrunkInterface {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_trunk_interface_input::Builder,
    }
    impl AssociateTrunkInterface {
        /// Creates a new `AssociateTrunkInterface`.
        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::AssociateTrunkInterface,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateTrunkInterfaceError>,
        > {
            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::AssociateTrunkInterfaceOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateTrunkInterfaceError>,
        > {
            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 branch network interface.</p>
        pub fn branch_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.branch_interface_id(input.into());
            self
        }
        /// <p>The ID of the branch network interface.</p>
        pub fn set_branch_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_branch_interface_id(input);
            self
        }
        /// <p>The ID of the trunk network interface.</p>
        pub fn trunk_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.trunk_interface_id(input.into());
            self
        }
        /// <p>The ID of the trunk network interface.</p>
        pub fn set_trunk_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_trunk_interface_id(input);
            self
        }
        /// <p>The ID of the VLAN. This applies to the VLAN protocol.</p>
        pub fn vlan_id(mut self, input: i32) -> Self {
            self.inner = self.inner.vlan_id(input);
            self
        }
        /// <p>The ID of the VLAN. This applies to the VLAN protocol.</p>
        pub fn set_vlan_id(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_vlan_id(input);
            self
        }
        /// <p>The application key. This applies to the GRE protocol.</p>
        pub fn gre_key(mut self, input: i32) -> Self {
            self.inner = self.inner.gre_key(input);
            self
        }
        /// <p>The application key. This applies to the GRE protocol.</p>
        pub fn set_gre_key(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_gre_key(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AssociateVpcCidrBlock`.
    ///
    /// <p>Associates a CIDR block with your VPC. You can associate a secondary IPv4 CIDR block, an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses (<a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html">BYOIP</a>). The IPv6 CIDR block size is fixed at /56.</p>
    /// <p>You must specify one of the following in the request: an IPv4 CIDR block, an IPv6 pool, or an Amazon-provided IPv6 CIDR block.</p>
    /// <p>For more information about associating CIDR blocks with your VPC and applicable restrictions, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing">VPC and subnet sizing</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AssociateVpcCidrBlock {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::associate_vpc_cidr_block_input::Builder,
    }
    impl AssociateVpcCidrBlock {
        /// Creates a new `AssociateVpcCidrBlock`.
        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::AssociateVpcCidrBlock,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AssociateVpcCidrBlockError>,
        > {
            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::AssociateVpcCidrBlockOutput,
            aws_smithy_http::result::SdkError<crate::error::AssociateVpcCidrBlockError>,
        > {
            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>Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IPv6 addresses, or the size of the CIDR block.</p>
        pub fn amazon_provided_ipv6_cidr_block(mut self, input: bool) -> Self {
            self.inner = self.inner.amazon_provided_ipv6_cidr_block(input);
            self
        }
        /// <p>Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IPv6 addresses, or the size of the CIDR block.</p>
        pub fn set_amazon_provided_ipv6_cidr_block(
            mut self,
            input: std::option::Option<bool>,
        ) -> Self {
            self.inner = self.inner.set_amazon_provided_ipv6_cidr_block(input);
            self
        }
        /// <p>An IPv4 CIDR block to associate with the VPC.</p>
        pub fn cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_block(input.into());
            self
        }
        /// <p>An IPv4 CIDR block to associate with the VPC.</p>
        pub fn set_cidr_block(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_block(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>The name of the location from which we advertise the IPV6 CIDR block. Use this parameter to limit the CIDR block to this location.</p>
        /// <p> You must set <code>AmazonProvidedIpv6CidrBlock</code> to <code>true</code> to use this parameter.</p>
        /// <p> You can have one IPv6 CIDR block association per network border group.</p>
        pub fn ipv6_cidr_block_network_border_group(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .ipv6_cidr_block_network_border_group(input.into());
            self
        }
        /// <p>The name of the location from which we advertise the IPV6 CIDR block. Use this parameter to limit the CIDR block to this location.</p>
        /// <p> You must set <code>AmazonProvidedIpv6CidrBlock</code> to <code>true</code> to use this parameter.</p>
        /// <p> You can have one IPv6 CIDR block association per network border group.</p>
        pub fn set_ipv6_cidr_block_network_border_group(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_cidr_block_network_border_group(input);
            self
        }
        /// <p>The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block.</p>
        pub fn ipv6_pool(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_pool(input.into());
            self
        }
        /// <p>The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block.</p>
        pub fn set_ipv6_pool(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipv6_pool(input);
            self
        }
        /// <p>An IPv6 CIDR block from the IPv6 address pool. You must also specify <code>Ipv6Pool</code> in the request.</p>
        /// <p>To let Amazon choose the IPv6 CIDR block for you, omit this parameter.</p>
        pub fn ipv6_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_cidr_block(input.into());
            self
        }
        /// <p>An IPv6 CIDR block from the IPv6 address pool. You must also specify <code>Ipv6Pool</code> in the request.</p>
        /// <p>To let Amazon choose the IPv6 CIDR block for you, omit this parameter.</p>
        pub fn set_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_cidr_block(input);
            self
        }
        /// <p>Associate a CIDR allocated from an IPv4 IPAM pool to a VPC. For more information about Amazon VPC IP Address Manager (IPAM), see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn ipv4_ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv4_ipam_pool_id(input.into());
            self
        }
        /// <p>Associate a CIDR allocated from an IPv4 IPAM pool to a VPC. For more information about Amazon VPC IP Address Manager (IPAM), see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn set_ipv4_ipam_pool_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv4_ipam_pool_id(input);
            self
        }
        /// <p>The netmask length of the IPv4 CIDR you would like to associate from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
        pub fn ipv4_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv4_netmask_length(input);
            self
        }
        /// <p>The netmask length of the IPv4 CIDR you would like to associate from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
        pub fn set_ipv4_netmask_length(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv4_netmask_length(input);
            self
        }
        /// <p>Associates a CIDR allocated from an IPv6 IPAM pool to a VPC. For more information about Amazon VPC IP Address Manager (IPAM), see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn ipv6_ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_ipam_pool_id(input.into());
            self
        }
        /// <p>Associates a CIDR allocated from an IPv6 IPAM pool to a VPC. For more information about Amazon VPC IP Address Manager (IPAM), see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn set_ipv6_ipam_pool_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_ipam_pool_id(input);
            self
        }
        /// <p>The netmask length of the IPv6 CIDR you would like to associate from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
        pub fn ipv6_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv6_netmask_length(input);
            self
        }
        /// <p>The netmask length of the IPv6 CIDR you would like to associate from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
        pub fn set_ipv6_netmask_length(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv6_netmask_length(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AttachClassicLinkVpc`.
    ///
    /// <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    /// <p>Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC's security groups. You cannot link an EC2-Classic instance to more than one VPC at a time. You can only link an instance that's in the <code>running</code> state. An instance is automatically unlinked from a VPC when it's stopped - you can link it to the VPC again when you restart it.</p>
    /// <p>After you've linked an instance, you cannot change the VPC security groups that are associated with it. To change the security groups, you must first unlink the instance, and then link it again.</p>
    /// <p>Linking your instance to a VPC is sometimes referred to as <i>attaching</i> your instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AttachClassicLinkVpc {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::attach_classic_link_vpc_input::Builder,
    }
    impl AttachClassicLinkVpc {
        /// Creates a new `AttachClassicLinkVpc`.
        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::AttachClassicLinkVpc,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AttachClassicLinkVpcError>,
        > {
            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::AttachClassicLinkVpcOutput,
            aws_smithy_http::result::SdkError<crate::error::AttachClassicLinkVpcError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Groups`.
        ///
        /// To override the contents of this collection use [`set_groups`](Self::set_groups).
        ///
        /// <p>The ID of one or more of the VPC's security groups. You cannot specify security groups from a different VPC.</p>
        pub fn groups(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.groups(input.into());
            self
        }
        /// <p>The ID of one or more of the VPC's security groups. You cannot specify security groups from a different VPC.</p>
        pub fn set_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_groups(input);
            self
        }
        /// <p>The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The ID of a ClassicLink-enabled VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of a ClassicLink-enabled VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AttachInternetGateway`.
    ///
    /// <p>Attaches an internet gateway or a virtual private gateway to a VPC, enabling connectivity between the internet and the VPC. For more information about your VPC and internet gateway, see the <a href="https://docs.aws.amazon.com/vpc/latest/userguide/">Amazon Virtual Private Cloud User Guide</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AttachInternetGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::attach_internet_gateway_input::Builder,
    }
    impl AttachInternetGateway {
        /// Creates a new `AttachInternetGateway`.
        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::AttachInternetGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AttachInternetGatewayError>,
        > {
            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::AttachInternetGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::AttachInternetGatewayError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the internet gateway.</p>
        pub fn internet_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.internet_gateway_id(input.into());
            self
        }
        /// <p>The ID of the internet gateway.</p>
        pub fn set_internet_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_internet_gateway_id(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AttachNetworkInterface`.
    ///
    /// <p>Attaches a network interface to an instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AttachNetworkInterface {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::attach_network_interface_input::Builder,
    }
    impl AttachNetworkInterface {
        /// Creates a new `AttachNetworkInterface`.
        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::AttachNetworkInterface,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AttachNetworkInterfaceError>,
        > {
            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::AttachNetworkInterfaceOutput,
            aws_smithy_http::result::SdkError<crate::error::AttachNetworkInterfaceError>,
        > {
            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 index of the device for the network interface attachment.</p>
        pub fn device_index(mut self, input: i32) -> Self {
            self.inner = self.inner.device_index(input);
            self
        }
        /// <p>The index of the device for the network interface attachment.</p>
        pub fn set_device_index(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_device_index(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>The index of the network card. Some instance types support multiple network cards. The primary network interface must be assigned to network card index 0. The default is network card index 0.</p>
        pub fn network_card_index(mut self, input: i32) -> Self {
            self.inner = self.inner.network_card_index(input);
            self
        }
        /// <p>The index of the network card. Some instance types support multiple network cards. The primary network interface must be assigned to network card index 0. The default is network card index 0.</p>
        pub fn set_network_card_index(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_network_card_index(input);
            self
        }
        /// <p>Configures ENA Express for the network interface that this action attaches to the instance.</p>
        pub fn ena_srd_specification(mut self, input: crate::model::EnaSrdSpecification) -> Self {
            self.inner = self.inner.ena_srd_specification(input);
            self
        }
        /// <p>Configures ENA Express for the network interface that this action attaches to the instance.</p>
        pub fn set_ena_srd_specification(
            mut self,
            input: std::option::Option<crate::model::EnaSrdSpecification>,
        ) -> Self {
            self.inner = self.inner.set_ena_srd_specification(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AttachVerifiedAccessTrustProvider`.
    ///
    /// <p>A trust provider is a third-party entity that creates, maintains, and manages identity information for users and devices. One or more trust providers can be attached to an Amazon Web Services Verified Access instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AttachVerifiedAccessTrustProvider {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::attach_verified_access_trust_provider_input::Builder,
    }
    impl AttachVerifiedAccessTrustProvider {
        /// Creates a new `AttachVerifiedAccessTrustProvider`.
        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::AttachVerifiedAccessTrustProvider,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AttachVerifiedAccessTrustProviderError>,
        > {
            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::AttachVerifiedAccessTrustProviderOutput,
            aws_smithy_http::result::SdkError<crate::error::AttachVerifiedAccessTrustProviderError>,
        > {
            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 Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
        pub fn verified_access_trust_provider_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_trust_provider_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
        pub fn set_verified_access_trust_provider_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_trust_provider_id(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AttachVolume`.
    ///
    /// <p>Attaches an EBS volume to a running or stopped instance and exposes it to the instance with the specified device name.</p>
    /// <p>Encrypted EBS volumes must be attached to instances that support Amazon EBS encryption. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>After you attach an EBS volume, you must make it available. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html">Make an EBS volume available for use</a>.</p>
    /// <p>If a volume has an Amazon Web Services Marketplace product code:</p>
    /// <ul>
    /// <li> <p>The volume can be attached only to a stopped instance.</p> </li>
    /// <li> <p>Amazon Web Services Marketplace product codes are copied from the volume to the instance.</p> </li>
    /// <li> <p>You must be subscribed to the product.</p> </li>
    /// <li> <p>The instance type and operating system of the instance must support the product. For example, you can't detach a volume from a Windows instance and attach it to a Linux instance.</p> </li>
    /// </ul>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html">Attach an Amazon EBS volume to an instance</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AttachVolume {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::attach_volume_input::Builder,
    }
    impl AttachVolume {
        /// Creates a new `AttachVolume`.
        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::AttachVolume,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AttachVolumeError>,
        > {
            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::AttachVolumeOutput,
            aws_smithy_http::result::SdkError<crate::error::AttachVolumeError>,
        > {
            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 device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>
        pub fn device(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.device(input.into());
            self
        }
        /// <p>The device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>
        pub fn set_device(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_device(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The ID of the EBS volume. The volume and instance must be within the same Availability Zone.</p>
        pub fn volume_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_id(input.into());
            self
        }
        /// <p>The ID of the EBS volume. The volume and instance must be within the same Availability Zone.</p>
        pub fn set_volume_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_volume_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AttachVpnGateway`.
    ///
    /// <p>Attaches a virtual private gateway to a VPC. You can attach one virtual private gateway to one VPC at a time.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html">Amazon Web Services Site-to-Site VPN</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AttachVpnGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::attach_vpn_gateway_input::Builder,
    }
    impl AttachVpnGateway {
        /// Creates a new `AttachVpnGateway`.
        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::AttachVpnGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AttachVpnGatewayError>,
        > {
            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::AttachVpnGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::AttachVpnGatewayError>,
        > {
            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 VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>The ID of the virtual private gateway.</p>
        pub fn vpn_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_gateway_id(input.into());
            self
        }
        /// <p>The ID of the virtual private gateway.</p>
        pub fn set_vpn_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_gateway_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AuthorizeClientVpnIngress`.
    ///
    /// <p>Adds an ingress authorization rule to a Client VPN endpoint. Ingress authorization rules act as firewall rules that grant access to networks. You must configure ingress authorization rules to enable clients to access resources in Amazon Web Services or on-premises networks.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AuthorizeClientVpnIngress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::authorize_client_vpn_ingress_input::Builder,
    }
    impl AuthorizeClientVpnIngress {
        /// Creates a new `AuthorizeClientVpnIngress`.
        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::AuthorizeClientVpnIngress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AuthorizeClientVpnIngressError>,
        > {
            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::AuthorizeClientVpnIngressOutput,
            aws_smithy_http::result::SdkError<crate::error::AuthorizeClientVpnIngressError>,
        > {
            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 Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, of the network for which access is being authorized.</p>
        pub fn target_network_cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.target_network_cidr(input.into());
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, of the network for which access is being authorized.</p>
        pub fn set_target_network_cidr(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_target_network_cidr(input);
            self
        }
        /// <p>The ID of the group to grant access to, for example, the Active Directory group or identity provider (IdP) group. Required if <code>AuthorizeAllGroups</code> is <code>false</code> or not specified.</p>
        pub fn access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.access_group_id(input.into());
            self
        }
        /// <p>The ID of the group to grant access to, for example, the Active Directory group or identity provider (IdP) group. Required if <code>AuthorizeAllGroups</code> is <code>false</code> or not specified.</p>
        pub fn set_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_access_group_id(input);
            self
        }
        /// <p>Indicates whether to grant access to all clients. Specify <code>true</code> to grant all clients who successfully establish a VPN connection access to the network. Must be set to <code>true</code> if <code>AccessGroupId</code> is not specified.</p>
        pub fn authorize_all_groups(mut self, input: bool) -> Self {
            self.inner = self.inner.authorize_all_groups(input);
            self
        }
        /// <p>Indicates whether to grant access to all clients. Specify <code>true</code> to grant all clients who successfully establish a VPN connection access to the network. Must be set to <code>true</code> if <code>AccessGroupId</code> is not specified.</p>
        pub fn set_authorize_all_groups(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_authorize_all_groups(input);
            self
        }
        /// <p>A brief description of the authorization rule.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A brief description of the authorization rule.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AuthorizeSecurityGroupEgress`.
    ///
    /// <p>[VPC only] Adds the specified outbound (egress) rules to a security group for use with a VPC.</p>
    /// <p>An outbound rule permits instances to send traffic to the specified IPv4 or IPv6 CIDR address ranges, or to the instances that are associated with the specified source security groups. When specifying an outbound rule for your security group in a VPC, the <code>IpPermissions</code> must include a destination for the traffic.</p>
    /// <p>You specify a protocol for each rule (for example, TCP). For the TCP and UDP protocols, you must also specify the destination port or port range. For the ICMP protocol, you must also specify the ICMP type and code. You can use -1 for the type or code to mean all types or all codes.</p>
    /// <p>Rule changes are propagated to affected instances as quickly as possible. However, a small delay might occur.</p>
    /// <p>For information about VPC security group quotas, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html">Amazon VPC quotas</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AuthorizeSecurityGroupEgress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::authorize_security_group_egress_input::Builder,
    }
    impl AuthorizeSecurityGroupEgress {
        /// Creates a new `AuthorizeSecurityGroupEgress`.
        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::AuthorizeSecurityGroupEgress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AuthorizeSecurityGroupEgressError>,
        > {
            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::AuthorizeSecurityGroupEgressOutput,
            aws_smithy_http::result::SdkError<crate::error::AuthorizeSecurityGroupEgressError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the security group.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The ID of the security group.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
        /// Appends an item to `IpPermissions`.
        ///
        /// To override the contents of this collection use [`set_ip_permissions`](Self::set_ip_permissions).
        ///
        /// <p>The sets of IP permissions. You can't specify a destination security group and a CIDR IP address range in the same set of permissions.</p>
        pub fn ip_permissions(mut self, input: crate::model::IpPermission) -> Self {
            self.inner = self.inner.ip_permissions(input);
            self
        }
        /// <p>The sets of IP permissions. You can't specify a destination security group and a CIDR IP address range in the same set of permissions.</p>
        pub fn set_ip_permissions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::IpPermission>>,
        ) -> Self {
            self.inner = self.inner.set_ip_permissions(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags applied to the security group rule.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags applied to the security group rule.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the CIDR.</p>
        pub fn cidr_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_ip(input.into());
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the CIDR.</p>
        pub fn set_cidr_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_ip(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the port.</p>
        pub fn from_port(mut self, input: i32) -> Self {
            self.inner = self.inner.from_port(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the port.</p>
        pub fn set_from_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_from_port(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the protocol name or number.</p>
        pub fn ip_protocol(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ip_protocol(input.into());
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the protocol name or number.</p>
        pub fn set_ip_protocol(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ip_protocol(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the port.</p>
        pub fn to_port(mut self, input: i32) -> Self {
            self.inner = self.inner.to_port(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the port.</p>
        pub fn set_to_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_to_port(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
        pub fn source_security_group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_security_group_name(input.into());
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
        pub fn set_source_security_group_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_security_group_name(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
        pub fn source_security_group_owner_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.source_security_group_owner_id(input.into());
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
        pub fn set_source_security_group_owner_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_security_group_owner_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `AuthorizeSecurityGroupIngress`.
    ///
    /// <p>Adds the specified inbound (ingress) rules to a security group.</p>
    /// <p>An inbound rule permits instances to receive traffic from the specified IPv4 or IPv6 CIDR address range, or from the instances that are associated with the specified destination security groups. When specifying an inbound rule for your security group in a VPC, the <code>IpPermissions</code> must include a source for the traffic.</p>
    /// <p>You specify a protocol for each rule (for example, TCP). For TCP and UDP, you must also specify the destination port or port range. For ICMP/ICMPv6, you must also specify the ICMP/ICMPv6 type and code. You can use -1 to mean all types or all codes.</p>
    /// <p>Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur.</p>
    /// <p>For more information about VPC security group quotas, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html">Amazon VPC quotas</a>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct AuthorizeSecurityGroupIngress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::authorize_security_group_ingress_input::Builder,
    }
    impl AuthorizeSecurityGroupIngress {
        /// Creates a new `AuthorizeSecurityGroupIngress`.
        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::AuthorizeSecurityGroupIngress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::AuthorizeSecurityGroupIngressError>,
        > {
            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::AuthorizeSecurityGroupIngressOutput,
            aws_smithy_http::result::SdkError<crate::error::AuthorizeSecurityGroupIngressError>,
        > {
            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 IPv4 address range, in CIDR format. You can't specify this parameter when specifying a source security group. To specify an IPv6 address range, use a set of IP permissions.</p>
        /// <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
        pub fn cidr_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_ip(input.into());
            self
        }
        /// <p>The IPv4 address range, in CIDR format. You can't specify this parameter when specifying a source security group. To specify an IPv6 address range, use a set of IP permissions.</p>
        /// <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
        pub fn set_cidr_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_ip(input);
            self
        }
        /// <p>If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP, this is the type number. A value of -1 indicates all ICMP types. If you specify all ICMP types, you must specify all ICMP codes.</p>
        /// <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
        pub fn from_port(mut self, input: i32) -> Self {
            self.inner = self.inner.from_port(input);
            self
        }
        /// <p>If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP, this is the type number. A value of -1 indicates all ICMP types. If you specify all ICMP types, you must specify all ICMP codes.</p>
        /// <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
        pub fn set_from_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_from_port(input);
            self
        }
        /// <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// Appends an item to `IpPermissions`.
        ///
        /// To override the contents of this collection use [`set_ip_permissions`](Self::set_ip_permissions).
        ///
        /// <p>The sets of IP permissions.</p>
        pub fn ip_permissions(mut self, input: crate::model::IpPermission) -> Self {
            self.inner = self.inner.ip_permissions(input);
            self
        }
        /// <p>The sets of IP permissions.</p>
        pub fn set_ip_permissions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::IpPermission>>,
        ) -> Self {
            self.inner = self.inner.set_ip_permissions(input);
            self
        }
        /// <p>The IP protocol name (<code>tcp</code>, <code>udp</code>, <code>icmp</code>) or number (see <a href="http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a>). To specify <code>icmpv6</code>, use a set of IP permissions.</p>
        /// <p>[VPC only] Use <code>-1</code> to specify all protocols. If you specify <code>-1</code> or a protocol other than <code>tcp</code>, <code>udp</code>, or <code>icmp</code>, traffic on all ports is allowed, regardless of any ports you specify.</p>
        /// <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
        pub fn ip_protocol(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ip_protocol(input.into());
            self
        }
        /// <p>The IP protocol name (<code>tcp</code>, <code>udp</code>, <code>icmp</code>) or number (see <a href="http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a>). To specify <code>icmpv6</code>, use a set of IP permissions.</p>
        /// <p>[VPC only] Use <code>-1</code> to specify all protocols. If you specify <code>-1</code> or a protocol other than <code>tcp</code>, <code>udp</code>, or <code>icmp</code>, traffic on all ports is allowed, regardless of any ports you specify.</p>
        /// <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
        pub fn set_ip_protocol(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ip_protocol(input);
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. For EC2-VPC, the source security group must be in the same VPC.</p>
        pub fn source_security_group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_security_group_name(input.into());
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. For EC2-VPC, the source security group must be in the same VPC.</p>
        pub fn set_source_security_group_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_security_group_name(input);
            self
        }
        /// <p>[nondefault VPC] The Amazon Web Services account ID for the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead.</p>
        pub fn source_security_group_owner_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.source_security_group_owner_id(input.into());
            self
        }
        /// <p>[nondefault VPC] The Amazon Web Services account ID for the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead.</p>
        pub fn set_source_security_group_owner_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_security_group_owner_id(input);
            self
        }
        /// <p>If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP, this is the code. A value of -1 indicates all ICMP codes. If you specify all ICMP types, you must specify all ICMP codes.</p>
        /// <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
        pub fn to_port(mut self, input: i32) -> Self {
            self.inner = self.inner.to_port(input);
            self
        }
        /// <p>If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP, this is the code. A value of -1 indicates all ICMP codes. If you specify all ICMP types, you must specify all ICMP codes.</p>
        /// <p>Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule.</p>
        pub fn set_to_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_to_port(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>[VPC Only] The tags applied to the security group rule.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>[VPC Only] The tags applied to the security group rule.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `BundleInstance`.
    ///
    /// <p>Bundles an Amazon instance store-backed Windows instance.</p>
    /// <p>During bundling, only the root device volume (C:\) is bundled. Data on other instance store volumes is not preserved.</p> <note>
    /// <p>This action is not applicable for Linux/Unix instances or Windows instances that are backed by Amazon EBS.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct BundleInstance {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::bundle_instance_input::Builder,
    }
    impl BundleInstance {
        /// Creates a new `BundleInstance`.
        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::BundleInstance,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::BundleInstanceError>,
        > {
            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::BundleInstanceOutput,
            aws_smithy_http::result::SdkError<crate::error::BundleInstanceError>,
        > {
            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 instance to bundle.</p>
        /// <p>Type: String</p>
        /// <p>Default: None</p>
        /// <p>Required: Yes</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance to bundle.</p>
        /// <p>Type: String</p>
        /// <p>Default: None</p>
        /// <p>Required: Yes</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The bucket in which to store the AMI. You can specify a bucket that you already own or a new bucket that Amazon EC2 creates on your behalf. If you specify a bucket that belongs to someone else, Amazon EC2 returns an error.</p>
        pub fn storage(mut self, input: crate::model::Storage) -> Self {
            self.inner = self.inner.storage(input);
            self
        }
        /// <p>The bucket in which to store the AMI. You can specify a bucket that you already own or a new bucket that Amazon EC2 creates on your behalf. If you specify a bucket that belongs to someone else, Amazon EC2 returns an error.</p>
        pub fn set_storage(mut self, input: std::option::Option<crate::model::Storage>) -> Self {
            self.inner = self.inner.set_storage(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelBundleTask`.
    ///
    /// <p>Cancels a bundling operation for an instance store-backed Windows instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelBundleTask {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_bundle_task_input::Builder,
    }
    impl CancelBundleTask {
        /// Creates a new `CancelBundleTask`.
        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::CancelBundleTask,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelBundleTaskError>,
        > {
            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::CancelBundleTaskOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelBundleTaskError>,
        > {
            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 bundle task.</p>
        pub fn bundle_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.bundle_id(input.into());
            self
        }
        /// <p>The ID of the bundle task.</p>
        pub fn set_bundle_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_bundle_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelCapacityReservation`.
    ///
    /// <p>Cancels the specified Capacity Reservation, releases the reserved capacity, and changes the Capacity Reservation's state to <code>cancelled</code>.</p>
    /// <p>Instances running in the reserved capacity continue running until you stop them. Stopped instances that target the Capacity Reservation can no longer launch. Modify these instances to either target a different Capacity Reservation, launch On-Demand Instance capacity, or run in any open Capacity Reservation that has matching attributes and sufficient capacity.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelCapacityReservation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_capacity_reservation_input::Builder,
    }
    impl CancelCapacityReservation {
        /// Creates a new `CancelCapacityReservation`.
        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::CancelCapacityReservation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelCapacityReservationError>,
        > {
            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::CancelCapacityReservationOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelCapacityReservationError>,
        > {
            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 Capacity Reservation to be cancelled.</p>
        pub fn capacity_reservation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.capacity_reservation_id(input.into());
            self
        }
        /// <p>The ID of the Capacity Reservation to be cancelled.</p>
        pub fn set_capacity_reservation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelCapacityReservationFleets`.
    ///
    /// <p>Cancels one or more Capacity Reservation Fleets. When you cancel a Capacity Reservation Fleet, the following happens:</p>
    /// <ul>
    /// <li> <p>The Capacity Reservation Fleet's status changes to <code>cancelled</code>.</p> </li>
    /// <li> <p>The individual Capacity Reservations in the Fleet are cancelled. Instances running in the Capacity Reservations at the time of cancelling the Fleet continue to run in shared capacity.</p> </li>
    /// <li> <p>The Fleet stops creating new Capacity Reservations.</p> </li>
    /// </ul>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelCapacityReservationFleets {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_capacity_reservation_fleets_input::Builder,
    }
    impl CancelCapacityReservationFleets {
        /// Creates a new `CancelCapacityReservationFleets`.
        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::CancelCapacityReservationFleets,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelCapacityReservationFleetsError>,
        > {
            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::CancelCapacityReservationFleetsOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelCapacityReservationFleetsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `CapacityReservationFleetIds`.
        ///
        /// To override the contents of this collection use [`set_capacity_reservation_fleet_ids`](Self::set_capacity_reservation_fleet_ids).
        ///
        /// <p>The IDs of the Capacity Reservation Fleets to cancel.</p>
        pub fn capacity_reservation_fleet_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.capacity_reservation_fleet_ids(input.into());
            self
        }
        /// <p>The IDs of the Capacity Reservation Fleets to cancel.</p>
        pub fn set_capacity_reservation_fleet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_fleet_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelConversionTask`.
    ///
    /// <p>Cancels an active conversion task. The task can be the import of an instance or volume. The action removes all artifacts of the conversion, including a partially uploaded volume or instance. If the conversion is complete or is in the process of transferring the final disk image, the command fails and returns an exception.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html">Importing a Virtual Machine Using the Amazon EC2 CLI</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelConversionTask {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_conversion_task_input::Builder,
    }
    impl CancelConversionTask {
        /// Creates a new `CancelConversionTask`.
        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::CancelConversionTask,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelConversionTaskError>,
        > {
            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::CancelConversionTaskOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelConversionTaskError>,
        > {
            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 conversion task.</p>
        pub fn conversion_task_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.conversion_task_id(input.into());
            self
        }
        /// <p>The ID of the conversion task.</p>
        pub fn set_conversion_task_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_conversion_task_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The reason for canceling the conversion task.</p>
        pub fn reason_message(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.reason_message(input.into());
            self
        }
        /// <p>The reason for canceling the conversion task.</p>
        pub fn set_reason_message(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_reason_message(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelExportTask`.
    ///
    /// <p>Cancels an active export task. The request removes all artifacts of the export, including any partially-created Amazon S3 objects. If the export task is complete or is in the process of transferring the final disk image, the command fails and returns an error.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelExportTask {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_export_task_input::Builder,
    }
    impl CancelExportTask {
        /// Creates a new `CancelExportTask`.
        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::CancelExportTask,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelExportTaskError>,
        > {
            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::CancelExportTaskOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelExportTaskError>,
        > {
            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 export task. This is the ID returned by <code>CreateInstanceExportTask</code>.</p>
        pub fn export_task_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.export_task_id(input.into());
            self
        }
        /// <p>The ID of the export task. This is the ID returned by <code>CreateInstanceExportTask</code>.</p>
        pub fn set_export_task_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_export_task_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelImageLaunchPermission`.
    ///
    /// <p>Removes your Amazon Web Services account from the launch permissions for the specified AMI. For more information, see <a href="https://docs.aws.amazon.com/">Cancel having an AMI shared with your Amazon Web Services account</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelImageLaunchPermission {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_image_launch_permission_input::Builder,
    }
    impl CancelImageLaunchPermission {
        /// Creates a new `CancelImageLaunchPermission`.
        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::CancelImageLaunchPermission,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelImageLaunchPermissionError>,
        > {
            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::CancelImageLaunchPermissionOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelImageLaunchPermissionError>,
        > {
            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 AMI that was shared with your Amazon Web Services account.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI that was shared with your Amazon Web Services account.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelImportTask`.
    ///
    /// <p>Cancels an in-process import virtual machine or import snapshot task.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelImportTask {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_import_task_input::Builder,
    }
    impl CancelImportTask {
        /// Creates a new `CancelImportTask`.
        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::CancelImportTask,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelImportTaskError>,
        > {
            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::CancelImportTaskOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelImportTaskError>,
        > {
            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 reason for canceling the task.</p>
        pub fn cancel_reason(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cancel_reason(input.into());
            self
        }
        /// <p>The reason for canceling the task.</p>
        pub fn set_cancel_reason(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_cancel_reason(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the import image or import snapshot task to be canceled.</p>
        pub fn import_task_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.import_task_id(input.into());
            self
        }
        /// <p>The ID of the import image or import snapshot task to be canceled.</p>
        pub fn set_import_task_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_import_task_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelReservedInstancesListing`.
    ///
    /// <p>Cancels the specified Reserved Instance listing in the Reserved Instance Marketplace.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html">Reserved Instance Marketplace</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelReservedInstancesListing {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_reserved_instances_listing_input::Builder,
    }
    impl CancelReservedInstancesListing {
        /// Creates a new `CancelReservedInstancesListing`.
        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::CancelReservedInstancesListing,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelReservedInstancesListingError>,
        > {
            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::CancelReservedInstancesListingOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelReservedInstancesListingError>,
        > {
            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 Reserved Instance listing.</p>
        pub fn reserved_instances_listing_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.reserved_instances_listing_id(input.into());
            self
        }
        /// <p>The ID of the Reserved Instance listing.</p>
        pub fn set_reserved_instances_listing_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_listing_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelSpotFleetRequests`.
    ///
    /// <p>Cancels the specified Spot Fleet requests.</p>
    /// <p>After you cancel a Spot Fleet request, the Spot Fleet launches no new Spot Instances. You must specify whether the Spot Fleet should also terminate its Spot Instances. If you terminate the instances, the Spot Fleet request enters the <code>cancelled_terminating</code> state. Otherwise, the Spot Fleet request enters the <code>cancelled_running</code> state and the instances continue to run until they are interrupted or you terminate them manually.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelSpotFleetRequests {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_spot_fleet_requests_input::Builder,
    }
    impl CancelSpotFleetRequests {
        /// Creates a new `CancelSpotFleetRequests`.
        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::CancelSpotFleetRequests,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelSpotFleetRequestsError>,
        > {
            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::CancelSpotFleetRequestsOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelSpotFleetRequestsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `SpotFleetRequestIds`.
        ///
        /// To override the contents of this collection use [`set_spot_fleet_request_ids`](Self::set_spot_fleet_request_ids).
        ///
        /// <p>The IDs of the Spot Fleet requests.</p>
        pub fn spot_fleet_request_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.spot_fleet_request_ids(input.into());
            self
        }
        /// <p>The IDs of the Spot Fleet requests.</p>
        pub fn set_spot_fleet_request_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_spot_fleet_request_ids(input);
            self
        }
        /// <p>Indicates whether to terminate instances for a Spot Fleet request if it is canceled successfully.</p>
        pub fn terminate_instances(mut self, input: bool) -> Self {
            self.inner = self.inner.terminate_instances(input);
            self
        }
        /// <p>Indicates whether to terminate instances for a Spot Fleet request if it is canceled successfully.</p>
        pub fn set_terminate_instances(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_terminate_instances(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CancelSpotInstanceRequests`.
    ///
    /// <p>Cancels one or more Spot Instance requests.</p> <important>
    /// <p>Canceling a Spot Instance request does not terminate running Spot Instances associated with the request.</p>
    /// </important>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelSpotInstanceRequests {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_spot_instance_requests_input::Builder,
    }
    impl CancelSpotInstanceRequests {
        /// Creates a new `CancelSpotInstanceRequests`.
        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::CancelSpotInstanceRequests,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CancelSpotInstanceRequestsError>,
        > {
            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::CancelSpotInstanceRequestsOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelSpotInstanceRequestsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `SpotInstanceRequestIds`.
        ///
        /// To override the contents of this collection use [`set_spot_instance_request_ids`](Self::set_spot_instance_request_ids).
        ///
        /// <p>One or more Spot Instance request IDs.</p>
        pub fn spot_instance_request_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.spot_instance_request_ids(input.into());
            self
        }
        /// <p>One or more Spot Instance request IDs.</p>
        pub fn set_spot_instance_request_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_spot_instance_request_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ConfirmProductInstance`.
    ///
    /// <p>Determines whether a product code is associated with an instance. This action can only be used by the owner of the product code. It is useful when a product code owner must verify whether another user's instance is eligible for support.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ConfirmProductInstance {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::confirm_product_instance_input::Builder,
    }
    impl ConfirmProductInstance {
        /// Creates a new `ConfirmProductInstance`.
        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::ConfirmProductInstance,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ConfirmProductInstanceError>,
        > {
            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::ConfirmProductInstanceOutput,
            aws_smithy_http::result::SdkError<crate::error::ConfirmProductInstanceError>,
        > {
            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 instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The product code. This must be a product code that you own.</p>
        pub fn product_code(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.product_code(input.into());
            self
        }
        /// <p>The product code. This must be a product code that you own.</p>
        pub fn set_product_code(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_product_code(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CopyFpgaImage`.
    ///
    /// <p>Copies the specified Amazon FPGA Image (AFI) to the current Region.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CopyFpgaImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::copy_fpga_image_input::Builder,
    }
    impl CopyFpgaImage {
        /// Creates a new `CopyFpgaImage`.
        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::CopyFpgaImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CopyFpgaImageError>,
        > {
            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::CopyFpgaImageOutput,
            aws_smithy_http::result::SdkError<crate::error::CopyFpgaImageError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the source AFI.</p>
        pub fn source_fpga_image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_fpga_image_id(input.into());
            self
        }
        /// <p>The ID of the source AFI.</p>
        pub fn set_source_fpga_image_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_fpga_image_id(input);
            self
        }
        /// <p>The description for the new AFI.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description for the new AFI.</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 name for the new AFI. The default is the name of the source AFI.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name for the new AFI. The default is the name of the source AFI.</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 Region that contains the source AFI.</p>
        pub fn source_region(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_region(input.into());
            self
        }
        /// <p>The Region that contains the source AFI.</p>
        pub fn set_source_region(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_region(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CopyImage`.
    ///
    /// <p>Initiates the copy of an AMI. You can copy an AMI from one Region to another, or from a Region to an Outpost. You can't copy an AMI from an Outpost to a Region, from one Outpost to another, or within the same Outpost. To copy an AMI to another partition, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html">CreateStoreImageTask</a>.</p>
    /// <p>To copy an AMI from one Region to another, specify the source Region using the <b>SourceRegion</b> parameter, and specify the destination Region using its endpoint. Copies of encrypted backing snapshots for the AMI are encrypted. Copies of unencrypted backing snapshots remain unencrypted, unless you set <code>Encrypted</code> during the copy operation. You cannot create an unencrypted copy of an encrypted backing snapshot.</p>
    /// <p>To copy an AMI from a Region to an Outpost, specify the source Region using the <b>SourceRegion</b> parameter, and specify the ARN of the destination Outpost using <b>DestinationOutpostArn</b>. Backing snapshots copied to an Outpost are encrypted by default using the default encryption key for the Region, or a different key that you specify in the request using <b>KmsKeyId</b>. Outposts do not support unencrypted snapshots. For more information, <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami"> Amazon EBS local snapshots on Outposts</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>For more information about the prerequisites and limits when copying an AMI, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html">Copy an AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CopyImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::copy_image_input::Builder,
    }
    impl CopyImage {
        /// Creates a new `CopyImage`.
        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::CopyImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CopyImageError>,
        > {
            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::CopyImageOutput,
            aws_smithy_http::result::SdkError<crate::error::CopyImageError>,
        > {
            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>Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a> in the <i>Amazon EC2 API Reference</i>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a> in the <i>Amazon EC2 API Reference</i>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>A description for the new AMI in the destination Region.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the new AMI in the destination Region.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Specifies whether the destination snapshots of the copied image should be encrypted. You can encrypt a copy of an unencrypted snapshot, but you cannot create an unencrypted copy of an encrypted snapshot. The default KMS key for Amazon EBS is used unless you specify a non-default Key Management Service (KMS) KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn encrypted(mut self, input: bool) -> Self {
            self.inner = self.inner.encrypted(input);
            self
        }
        /// <p>Specifies whether the destination snapshots of the copied image should be encrypted. You can encrypt a copy of an unencrypted snapshot, but you cannot create an unencrypted copy of an encrypted snapshot. The default KMS key for Amazon EBS is used unless you specify a non-default Key Management Service (KMS) KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_encrypted(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_encrypted(input);
            self
        }
        /// <p>The identifier of the symmetric Key Management Service (KMS) KMS key to use when creating encrypted volumes. If this parameter is not specified, your Amazon Web Services managed KMS key for Amazon EBS is used. If you specify a KMS key, you must also set the encrypted state to <code>true</code>.</p>
        /// <p>You can specify a KMS key using any of the following:</p>
        /// <ul>
        /// <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>
        /// <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>
        /// </ul>
        /// <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an identifier that is not valid, the action can appear to complete, but eventually fails.</p>
        /// <p>The specified KMS key must exist in the destination Region.</p>
        /// <p>Amazon EBS does not support asymmetric KMS keys.</p>
        pub fn kms_key_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.kms_key_id(input.into());
            self
        }
        /// <p>The identifier of the symmetric Key Management Service (KMS) KMS key to use when creating encrypted volumes. If this parameter is not specified, your Amazon Web Services managed KMS key for Amazon EBS is used. If you specify a KMS key, you must also set the encrypted state to <code>true</code>.</p>
        /// <p>You can specify a KMS key using any of the following:</p>
        /// <ul>
        /// <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>
        /// <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>
        /// </ul>
        /// <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an identifier that is not valid, the action can appear to complete, but eventually fails.</p>
        /// <p>The specified KMS key must exist in the destination Region.</p>
        /// <p>Amazon EBS does not support asymmetric KMS keys.</p>
        pub fn set_kms_key_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_kms_key_id(input);
            self
        }
        /// <p>The name of the new AMI in the destination Region.</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 new AMI in the destination Region.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>The ID of the AMI to copy.</p>
        pub fn source_image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_image_id(input.into());
            self
        }
        /// <p>The ID of the AMI to copy.</p>
        pub fn set_source_image_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_image_id(input);
            self
        }
        /// <p>The name of the Region that contains the AMI to copy.</p>
        pub fn source_region(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_region(input.into());
            self
        }
        /// <p>The name of the Region that contains the AMI to copy.</p>
        pub fn set_source_region(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_region(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost to which to copy the AMI. Only specify this parameter when copying an AMI from an Amazon Web Services Region to an Outpost. The AMI must be in the Region of the destination Outpost. You cannot copy an AMI from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-amis"> Copy AMIs from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn destination_outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_outpost_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost to which to copy the AMI. Only specify this parameter when copying an AMI from an Amazon Web Services Region to an Outpost. The AMI must be in the Region of the destination Outpost. You cannot copy an AMI from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-amis"> Copy AMIs from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_destination_outpost_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_outpost_arn(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether to include your user-defined AMI tags when copying the AMI.</p>
        /// <p>The following tags will not be copied:</p>
        /// <ul>
        /// <li> <p>System tags (prefixed with <code>aws:</code>)</p> </li>
        /// <li> <p>For public and shared AMIs, user-defined tags that are attached by other Amazon Web Services accounts</p> </li>
        /// </ul>
        /// <p>Default: Your user-defined AMI tags are not copied.</p>
        pub fn copy_image_tags(mut self, input: bool) -> Self {
            self.inner = self.inner.copy_image_tags(input);
            self
        }
        /// <p>Indicates whether to include your user-defined AMI tags when copying the AMI.</p>
        /// <p>The following tags will not be copied:</p>
        /// <ul>
        /// <li> <p>System tags (prefixed with <code>aws:</code>)</p> </li>
        /// <li> <p>For public and shared AMIs, user-defined tags that are attached by other Amazon Web Services accounts</p> </li>
        /// </ul>
        /// <p>Default: Your user-defined AMI tags are not copied.</p>
        pub fn set_copy_image_tags(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_copy_image_tags(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CopySnapshot`.
    ///
    /// <p>Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3. You can copy a snapshot within the same Region, from one Region to another, or from a Region to an Outpost. You can't copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p>
    /// <p>You can use the snapshot to create EBS volumes or Amazon Machine Images (AMIs).</p>
    /// <p>When copying snapshots to a Region, copies of encrypted EBS snapshots remain encrypted. Copies of unencrypted snapshots remain unencrypted, unless you enable encryption for the snapshot copy operation. By default, encrypted snapshot copies use the default Key Management Service (KMS) KMS key; however, you can specify a different KMS key. To copy an encrypted snapshot that has been shared from another account, you must have permissions for the KMS key used to encrypt the snapshot.</p>
    /// <p>Snapshots copied to an Outpost are encrypted by default using the default encryption key for the Region, or a different key that you specify in the request using <b>KmsKeyId</b>. Outposts do not support unencrypted snapshots. For more information, <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami"> Amazon EBS local snapshots on Outposts</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>Snapshots created by copying another snapshot have an arbitrary volume ID that should not be used for any purpose.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html">Copy an Amazon EBS snapshot</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CopySnapshot {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::copy_snapshot_input::Builder,
    }
    impl CopySnapshot {
        /// Creates a new `CopySnapshot`.
        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::CopySnapshot,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CopySnapshotError>,
        > {
            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::CopySnapshotOutput,
            aws_smithy_http::result::SdkError<crate::error::CopySnapshotError>,
        > {
            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>A description for the EBS snapshot.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the EBS snapshot.</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 Amazon Resource Name (ARN) of the Outpost to which to copy the snapshot. Only specify this parameter when copying a snapshot from an Amazon Web Services Region to an Outpost. The snapshot must be in the Region for the destination Outpost. You cannot copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-snapshots"> Copy snapshots from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn destination_outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_outpost_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost to which to copy the snapshot. Only specify this parameter when copying a snapshot from an Amazon Web Services Region to an Outpost. The snapshot must be in the Region for the destination Outpost. You cannot copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-snapshots"> Copy snapshots from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn set_destination_outpost_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_outpost_arn(input);
            self
        }
        /// <p>The destination Region to use in the <code>PresignedUrl</code> parameter of a snapshot copy operation. This parameter is only valid for specifying the destination Region in a <code>PresignedUrl</code> parameter, where it is required.</p>
        /// <p>The snapshot copy is sent to the regional endpoint that you sent the HTTP request to (for example, <code>ec2.us-east-1.amazonaws.com</code>). With the CLI, this is specified using the <code>--region</code> parameter or the default Region in your Amazon Web Services configuration file.</p>
        pub fn destination_region(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_region(input.into());
            self
        }
        /// <p>The destination Region to use in the <code>PresignedUrl</code> parameter of a snapshot copy operation. This parameter is only valid for specifying the destination Region in a <code>PresignedUrl</code> parameter, where it is required.</p>
        /// <p>The snapshot copy is sent to the regional endpoint that you sent the HTTP request to (for example, <code>ec2.us-east-1.amazonaws.com</code>). With the CLI, this is specified using the <code>--region</code> parameter or the default Region in your Amazon Web Services configuration file.</p>
        pub fn set_destination_region(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_region(input);
            self
        }
        /// <p>To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled, enable encryption using this parameter. Otherwise, omit this parameter. Encrypted snapshots are encrypted, even if you omit this parameter and encryption by default is not enabled. You cannot set this parameter to false. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn encrypted(mut self, input: bool) -> Self {
            self.inner = self.inner.encrypted(input);
            self
        }
        /// <p>To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled, enable encryption using this parameter. Otherwise, omit this parameter. Encrypted snapshots are encrypted, even if you omit this parameter and encryption by default is not enabled. You cannot set this parameter to false. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn set_encrypted(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_encrypted(input);
            self
        }
        /// <p>The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>
        /// <p>You can specify the KMS key using any of the following:</p>
        /// <ul>
        /// <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>
        /// <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>
        /// </ul>
        /// <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>
        pub fn kms_key_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.kms_key_id(input.into());
            self
        }
        /// <p>The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>
        /// <p>You can specify the KMS key using any of the following:</p>
        /// <ul>
        /// <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>
        /// <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>
        /// </ul>
        /// <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>
        pub fn set_kms_key_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_kms_key_id(input);
            self
        }
        /// <p>When you copy an encrypted source snapshot using the Amazon EC2 Query API, you must supply a pre-signed URL. This parameter is optional for unencrypted snapshots. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html">Query requests</a>.</p>
        /// <p>The <code>PresignedUrl</code> should use the snapshot source endpoint, the <code>CopySnapshot</code> action, and include the <code>SourceRegion</code>, <code>SourceSnapshotId</code>, and <code>DestinationRegion</code> parameters. The <code>PresignedUrl</code> must be signed using Amazon Web Services Signature Version 4. Because EBS snapshots are stored in Amazon S3, the signing algorithm for this parameter uses the same logic that is described in <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html">Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)</a> in the <i>Amazon Simple Storage Service API Reference</i>. An invalid or improperly signed <code>PresignedUrl</code> will cause the copy operation to fail asynchronously, and the snapshot will move to an <code>error</code> state.</p>
        pub fn presigned_url(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.presigned_url(input.into());
            self
        }
        /// <p>When you copy an encrypted source snapshot using the Amazon EC2 Query API, you must supply a pre-signed URL. This parameter is optional for unencrypted snapshots. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html">Query requests</a>.</p>
        /// <p>The <code>PresignedUrl</code> should use the snapshot source endpoint, the <code>CopySnapshot</code> action, and include the <code>SourceRegion</code>, <code>SourceSnapshotId</code>, and <code>DestinationRegion</code> parameters. The <code>PresignedUrl</code> must be signed using Amazon Web Services Signature Version 4. Because EBS snapshots are stored in Amazon S3, the signing algorithm for this parameter uses the same logic that is described in <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html">Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)</a> in the <i>Amazon Simple Storage Service API Reference</i>. An invalid or improperly signed <code>PresignedUrl</code> will cause the copy operation to fail asynchronously, and the snapshot will move to an <code>error</code> state.</p>
        pub fn set_presigned_url(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_presigned_url(input);
            self
        }
        /// <p>The ID of the Region that contains the snapshot to be copied.</p>
        pub fn source_region(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_region(input.into());
            self
        }
        /// <p>The ID of the Region that contains the snapshot to be copied.</p>
        pub fn set_source_region(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_region(input);
            self
        }
        /// <p>The ID of the EBS snapshot to copy.</p>
        pub fn source_snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_snapshot_id(input.into());
            self
        }
        /// <p>The ID of the EBS snapshot to copy.</p>
        pub fn set_source_snapshot_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_snapshot_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the new snapshot.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the new snapshot.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateCapacityReservation`.
    ///
    /// <p>Creates a new Capacity Reservation with the specified attributes.</p>
    /// <p>Capacity Reservations enable you to reserve capacity for your Amazon EC2 instances in a specific Availability Zone for any duration. This gives you the flexibility to selectively add capacity reservations and still get the Regional RI discounts for that usage. By creating Capacity Reservations, you ensure that you always have access to Amazon EC2 capacity when you need it, for as long as you need it. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html">Capacity Reservations</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>Your request to create a Capacity Reservation could fail if Amazon EC2 does not have sufficient capacity to fulfill the request. If your request fails due to Amazon EC2 capacity constraints, either try again at a later time, try in a different Availability Zone, or request a smaller capacity reservation. If your application is flexible across instance types and sizes, try to create a Capacity Reservation with different instance attributes.</p>
    /// <p>Your request could also fail if the requested quantity exceeds your On-Demand Instance limit for the selected instance type. If your request fails due to limit constraints, increase your On-Demand Instance limit for the required instance type and try again. For more information about increasing your instance limits, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html">Amazon EC2 Service Quotas</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateCapacityReservation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_capacity_reservation_input::Builder,
    }
    impl CreateCapacityReservation {
        /// Creates a new `CreateCapacityReservation`.
        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::CreateCapacityReservation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateCapacityReservationError>,
        > {
            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::CreateCapacityReservationOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateCapacityReservationError>,
        > {
            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>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>The instance type for which to reserve capacity. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn instance_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_type(input.into());
            self
        }
        /// <p>The instance type for which to reserve capacity. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_instance_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_type(input);
            self
        }
        /// <p>The type of operating system for which to reserve capacity.</p>
        pub fn instance_platform(
            mut self,
            input: crate::model::CapacityReservationInstancePlatform,
        ) -> Self {
            self.inner = self.inner.instance_platform(input);
            self
        }
        /// <p>The type of operating system for which to reserve capacity.</p>
        pub fn set_instance_platform(
            mut self,
            input: std::option::Option<crate::model::CapacityReservationInstancePlatform>,
        ) -> Self {
            self.inner = self.inner.set_instance_platform(input);
            self
        }
        /// <p>The Availability Zone in which to create the Capacity Reservation.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>The Availability Zone in which to create the Capacity Reservation.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// <p>The ID of the Availability Zone in which to create the Capacity Reservation.</p>
        pub fn availability_zone_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone_id(input.into());
            self
        }
        /// <p>The ID of the Availability Zone in which to create the Capacity Reservation.</p>
        pub fn set_availability_zone_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone_id(input);
            self
        }
        /// <p>Indicates the tenancy of the Capacity Reservation. A Capacity Reservation can have one of the following tenancy settings:</p>
        /// <ul>
        /// <li> <p> <code>default</code> - The Capacity Reservation is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>
        /// <li> <p> <code>dedicated</code> - The Capacity Reservation is created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>
        /// </ul>
        pub fn tenancy(mut self, input: crate::model::CapacityReservationTenancy) -> Self {
            self.inner = self.inner.tenancy(input);
            self
        }
        /// <p>Indicates the tenancy of the Capacity Reservation. A Capacity Reservation can have one of the following tenancy settings:</p>
        /// <ul>
        /// <li> <p> <code>default</code> - The Capacity Reservation is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>
        /// <li> <p> <code>dedicated</code> - The Capacity Reservation is created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>
        /// </ul>
        pub fn set_tenancy(
            mut self,
            input: std::option::Option<crate::model::CapacityReservationTenancy>,
        ) -> Self {
            self.inner = self.inner.set_tenancy(input);
            self
        }
        /// <p>The number of instances for which to reserve capacity.</p>
        /// <p>Valid range: 1 - 1000</p>
        pub fn instance_count(mut self, input: i32) -> Self {
            self.inner = self.inner.instance_count(input);
            self
        }
        /// <p>The number of instances for which to reserve capacity.</p>
        /// <p>Valid range: 1 - 1000</p>
        pub fn set_instance_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_instance_count(input);
            self
        }
        /// <p>Indicates whether the Capacity Reservation supports EBS-optimized instances. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS- optimized instance.</p>
        pub fn ebs_optimized(mut self, input: bool) -> Self {
            self.inner = self.inner.ebs_optimized(input);
            self
        }
        /// <p>Indicates whether the Capacity Reservation supports EBS-optimized instances. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS- optimized instance.</p>
        pub fn set_ebs_optimized(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_ebs_optimized(input);
            self
        }
        /// <p> <i>Deprecated.</i> </p>
        pub fn ephemeral_storage(mut self, input: bool) -> Self {
            self.inner = self.inner.ephemeral_storage(input);
            self
        }
        /// <p> <i>Deprecated.</i> </p>
        pub fn set_ephemeral_storage(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_ephemeral_storage(input);
            self
        }
        /// <p>The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to <code>expired</code> when it reaches its end date and time.</p>
        /// <p>You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>. Omit <code>EndDate</code> if <code>EndDateType</code> is <code>unlimited</code>.</p>
        /// <p>If the <code>EndDateType</code> is <code>limited</code>, the Capacity Reservation is cancelled within an hour from the specified time. For example, if you specify 5/31/2019, 13:30:55, the Capacity Reservation is guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019.</p>
        pub fn end_date(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.end_date(input);
            self
        }
        /// <p>The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to <code>expired</code> when it reaches its end date and time.</p>
        /// <p>You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>. Omit <code>EndDate</code> if <code>EndDateType</code> is <code>unlimited</code>.</p>
        /// <p>If the <code>EndDateType</code> is <code>limited</code>, the Capacity Reservation is cancelled within an hour from the specified time. For example, if you specify 5/31/2019, 13:30:55, the Capacity Reservation is guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019.</p>
        pub fn set_end_date(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_end_date(input);
            self
        }
        /// <p>Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>
        /// <ul>
        /// <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it. Do not provide an <code>EndDate</code> if the <code>EndDateType</code> is <code>unlimited</code>.</p> </li>
        /// <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time. You must provide an <code>EndDate</code> value if the <code>EndDateType</code> value is <code>limited</code>.</p> </li>
        /// </ul>
        pub fn end_date_type(mut self, input: crate::model::EndDateType) -> Self {
            self.inner = self.inner.end_date_type(input);
            self
        }
        /// <p>Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>
        /// <ul>
        /// <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it. Do not provide an <code>EndDate</code> if the <code>EndDateType</code> is <code>unlimited</code>.</p> </li>
        /// <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time. You must provide an <code>EndDate</code> value if the <code>EndDateType</code> value is <code>limited</code>.</p> </li>
        /// </ul>
        pub fn set_end_date_type(
            mut self,
            input: std::option::Option<crate::model::EndDateType>,
        ) -> Self {
            self.inner = self.inner.set_end_date_type(input);
            self
        }
        /// <p>Indicates the type of instance launches that the Capacity Reservation accepts. The options include:</p>
        /// <ul>
        /// <li> <p> <code>open</code> - The Capacity Reservation automatically matches all instances that have matching attributes (instance type, platform, and Availability Zone). Instances that have matching attributes run in the Capacity Reservation automatically without specifying any additional parameters.</p> </li>
        /// <li> <p> <code>targeted</code> - The Capacity Reservation only accepts instances that have matching attributes (instance type, platform, and Availability Zone), and explicitly target the Capacity Reservation. This ensures that only permitted instances can use the reserved capacity. </p> </li>
        /// </ul>
        /// <p>Default: <code>open</code> </p>
        pub fn instance_match_criteria(
            mut self,
            input: crate::model::InstanceMatchCriteria,
        ) -> Self {
            self.inner = self.inner.instance_match_criteria(input);
            self
        }
        /// <p>Indicates the type of instance launches that the Capacity Reservation accepts. The options include:</p>
        /// <ul>
        /// <li> <p> <code>open</code> - The Capacity Reservation automatically matches all instances that have matching attributes (instance type, platform, and Availability Zone). Instances that have matching attributes run in the Capacity Reservation automatically without specifying any additional parameters.</p> </li>
        /// <li> <p> <code>targeted</code> - The Capacity Reservation only accepts instances that have matching attributes (instance type, platform, and Availability Zone), and explicitly target the Capacity Reservation. This ensures that only permitted instances can use the reserved capacity. </p> </li>
        /// </ul>
        /// <p>Default: <code>open</code> </p>
        pub fn set_instance_match_criteria(
            mut self,
            input: std::option::Option<crate::model::InstanceMatchCriteria>,
        ) -> Self {
            self.inner = self.inner.set_instance_match_criteria(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the Capacity Reservation during launch.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the Capacity Reservation during launch.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost on which to create the Capacity Reservation.</p>
        pub fn outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.outpost_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost on which to create the Capacity Reservation.</p>
        pub fn set_outpost_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_outpost_arn(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the cluster placement group in which to create the Capacity Reservation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html"> Capacity Reservations for cluster placement groups</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn placement_group_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.placement_group_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the cluster placement group in which to create the Capacity Reservation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html"> Capacity Reservations for cluster placement groups</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_placement_group_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_placement_group_arn(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateCapacityReservationFleet`.
    ///
    /// <p>Creates a Capacity Reservation Fleet. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-cr-fleets.html#create-crfleet">Create a Capacity Reservation Fleet</a> in the Amazon EC2 User Guide.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateCapacityReservationFleet {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_capacity_reservation_fleet_input::Builder,
    }
    impl CreateCapacityReservationFleet {
        /// Creates a new `CreateCapacityReservationFleet`.
        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::CreateCapacityReservationFleet,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateCapacityReservationFleetError>,
        > {
            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::CreateCapacityReservationFleetOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateCapacityReservationFleetError>,
        > {
            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 strategy used by the Capacity Reservation Fleet to determine which of the specified instance types to use. Currently, only the <code>prioritized</code> allocation strategy is supported. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy"> Allocation strategy</a> in the Amazon EC2 User Guide.</p>
        /// <p>Valid values: <code>prioritized</code> </p>
        pub fn allocation_strategy(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_strategy(input.into());
            self
        }
        /// <p>The strategy used by the Capacity Reservation Fleet to determine which of the specified instance types to use. Currently, only the <code>prioritized</code> allocation strategy is supported. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy"> Allocation strategy</a> in the Amazon EC2 User Guide.</p>
        /// <p>Valid values: <code>prioritized</code> </p>
        pub fn set_allocation_strategy(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_allocation_strategy(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// Appends an item to `InstanceTypeSpecifications`.
        ///
        /// To override the contents of this collection use [`set_instance_type_specifications`](Self::set_instance_type_specifications).
        ///
        /// <p>Information about the instance types for which to reserve the capacity.</p>
        pub fn instance_type_specifications(
            mut self,
            input: crate::model::ReservationFleetInstanceSpecification,
        ) -> Self {
            self.inner = self.inner.instance_type_specifications(input);
            self
        }
        /// <p>Information about the instance types for which to reserve the capacity.</p>
        pub fn set_instance_type_specifications(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::ReservationFleetInstanceSpecification>,
            >,
        ) -> Self {
            self.inner = self.inner.set_instance_type_specifications(input);
            self
        }
        /// <p>Indicates the tenancy of the Capacity Reservation Fleet. All Capacity Reservations in the Fleet inherit this tenancy. The Capacity Reservation Fleet can have one of the following tenancy settings:</p>
        /// <ul>
        /// <li> <p> <code>default</code> - The Capacity Reservation Fleet is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>
        /// <li> <p> <code>dedicated</code> - The Capacity Reservations are created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>
        /// </ul>
        pub fn tenancy(mut self, input: crate::model::FleetCapacityReservationTenancy) -> Self {
            self.inner = self.inner.tenancy(input);
            self
        }
        /// <p>Indicates the tenancy of the Capacity Reservation Fleet. All Capacity Reservations in the Fleet inherit this tenancy. The Capacity Reservation Fleet can have one of the following tenancy settings:</p>
        /// <ul>
        /// <li> <p> <code>default</code> - The Capacity Reservation Fleet is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>
        /// <li> <p> <code>dedicated</code> - The Capacity Reservations are created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>
        /// </ul>
        pub fn set_tenancy(
            mut self,
            input: std::option::Option<crate::model::FleetCapacityReservationTenancy>,
        ) -> Self {
            self.inner = self.inner.set_tenancy(input);
            self
        }
        /// <p>The total number of capacity units to be reserved by the Capacity Reservation Fleet. This value, together with the instance type weights that you assign to each instance type used by the Fleet determine the number of instances for which the Fleet reserves capacity. Both values are based on units that make sense for your workload. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity"> Total target capacity</a> in the Amazon EC2 User Guide.</p>
        pub fn total_target_capacity(mut self, input: i32) -> Self {
            self.inner = self.inner.total_target_capacity(input);
            self
        }
        /// <p>The total number of capacity units to be reserved by the Capacity Reservation Fleet. This value, together with the instance type weights that you assign to each instance type used by the Fleet determine the number of instances for which the Fleet reserves capacity. Both values are based on units that make sense for your workload. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity"> Total target capacity</a> in the Amazon EC2 User Guide.</p>
        pub fn set_total_target_capacity(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_total_target_capacity(input);
            self
        }
        /// <p>The date and time at which the Capacity Reservation Fleet expires. When the Capacity Reservation Fleet expires, its state changes to <code>expired</code> and all of the Capacity Reservations in the Fleet expire.</p>
        /// <p>The Capacity Reservation Fleet expires within an hour after the specified time. For example, if you specify <code>5/31/2019</code>, <code>13:30:55</code>, the Capacity Reservation Fleet is guaranteed to expire between <code>13:30:55</code> and <code>14:30:55</code> on <code>5/31/2019</code>. </p>
        pub fn end_date(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.end_date(input);
            self
        }
        /// <p>The date and time at which the Capacity Reservation Fleet expires. When the Capacity Reservation Fleet expires, its state changes to <code>expired</code> and all of the Capacity Reservations in the Fleet expire.</p>
        /// <p>The Capacity Reservation Fleet expires within an hour after the specified time. For example, if you specify <code>5/31/2019</code>, <code>13:30:55</code>, the Capacity Reservation Fleet is guaranteed to expire between <code>13:30:55</code> and <code>14:30:55</code> on <code>5/31/2019</code>. </p>
        pub fn set_end_date(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_end_date(input);
            self
        }
        /// <p>Indicates the type of instance launches that the Capacity Reservation Fleet accepts. All Capacity Reservations in the Fleet inherit this instance matching criteria.</p>
        /// <p>Currently, Capacity Reservation Fleets support <code>open</code> instance matching criteria only. This means that instances that have matching attributes (instance type, platform, and Availability Zone) run in the Capacity Reservations automatically. Instances do not need to explicitly target a Capacity Reservation Fleet to use its reserved capacity.</p>
        pub fn instance_match_criteria(
            mut self,
            input: crate::model::FleetInstanceMatchCriteria,
        ) -> Self {
            self.inner = self.inner.instance_match_criteria(input);
            self
        }
        /// <p>Indicates the type of instance launches that the Capacity Reservation Fleet accepts. All Capacity Reservations in the Fleet inherit this instance matching criteria.</p>
        /// <p>Currently, Capacity Reservation Fleets support <code>open</code> instance matching criteria only. This means that instances that have matching attributes (instance type, platform, and Availability Zone) run in the Capacity Reservations automatically. Instances do not need to explicitly target a Capacity Reservation Fleet to use its reserved capacity.</p>
        pub fn set_instance_match_criteria(
            mut self,
            input: std::option::Option<crate::model::FleetInstanceMatchCriteria>,
        ) -> Self {
            self.inner = self.inner.set_instance_match_criteria(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the Capacity Reservation Fleet. The tags are automatically assigned to the Capacity Reservations in the Fleet.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the Capacity Reservation Fleet. The tags are automatically assigned to the Capacity Reservations in the Fleet.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateCarrierGateway`.
    ///
    /// <p>Creates a carrier gateway. For more information about carrier gateways, see <a href="https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#wavelength-carrier-gateway">Carrier gateways</a> in the <i>Amazon Web Services Wavelength Developer Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateCarrierGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_carrier_gateway_input::Builder,
    }
    impl CreateCarrierGateway {
        /// Creates a new `CreateCarrierGateway`.
        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::CreateCarrierGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateCarrierGatewayError>,
        > {
            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::CreateCarrierGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateCarrierGatewayError>,
        > {
            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 VPC to associate with the carrier gateway.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC to associate with the carrier gateway.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to associate with the carrier gateway.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to associate with the carrier gateway.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateClientVpnEndpoint`.
    ///
    /// <p>Creates a Client VPN endpoint. A Client VPN endpoint is the resource you create and configure to enable and manage client VPN sessions. It is the destination endpoint at which all client VPN sessions are terminated.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateClientVpnEndpoint {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_client_vpn_endpoint_input::Builder,
    }
    impl CreateClientVpnEndpoint {
        /// Creates a new `CreateClientVpnEndpoint`.
        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::CreateClientVpnEndpoint,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateClientVpnEndpointError>,
        > {
            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::CreateClientVpnEndpointOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateClientVpnEndpointError>,
        > {
            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 IPv4 address range, in CIDR notation, from which to assign client IP addresses. The address range cannot overlap with the local CIDR of the VPC in which the associated subnet is located, or the routes that you add manually. The address range cannot be changed after the Client VPN endpoint has been created. Client CIDR range must have a size of at least /22 and must not be greater than /12.</p>
        pub fn client_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_cidr_block(input.into());
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, from which to assign client IP addresses. The address range cannot overlap with the local CIDR of the VPC in which the associated subnet is located, or the routes that you add manually. The address range cannot be changed after the Client VPN endpoint has been created. Client CIDR range must have a size of at least /22 and must not be greater than /12.</p>
        pub fn set_client_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_cidr_block(input);
            self
        }
        /// <p>The ARN of the server certificate. For more information, see the <a href="https://docs.aws.amazon.com/acm/latest/userguide/">Certificate Manager User Guide</a>.</p>
        pub fn server_certificate_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.server_certificate_arn(input.into());
            self
        }
        /// <p>The ARN of the server certificate. For more information, see the <a href="https://docs.aws.amazon.com/acm/latest/userguide/">Certificate Manager User Guide</a>.</p>
        pub fn set_server_certificate_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_server_certificate_arn(input);
            self
        }
        /// Appends an item to `AuthenticationOptions`.
        ///
        /// To override the contents of this collection use [`set_authentication_options`](Self::set_authentication_options).
        ///
        /// <p>Information about the authentication method to be used to authenticate clients.</p>
        pub fn authentication_options(
            mut self,
            input: crate::model::ClientVpnAuthenticationRequest,
        ) -> Self {
            self.inner = self.inner.authentication_options(input);
            self
        }
        /// <p>Information about the authentication method to be used to authenticate clients.</p>
        pub fn set_authentication_options(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ClientVpnAuthenticationRequest>>,
        ) -> Self {
            self.inner = self.inner.set_authentication_options(input);
            self
        }
        /// <p>Information about the client connection logging options.</p>
        /// <p>If you enable client connection logging, data about client connections is sent to a Cloudwatch Logs log stream. The following information is logged:</p>
        /// <ul>
        /// <li> <p>Client connection requests</p> </li>
        /// <li> <p>Client connection results (successful and unsuccessful)</p> </li>
        /// <li> <p>Reasons for unsuccessful client connection requests</p> </li>
        /// <li> <p>Client connection termination time</p> </li>
        /// </ul>
        pub fn connection_log_options(mut self, input: crate::model::ConnectionLogOptions) -> Self {
            self.inner = self.inner.connection_log_options(input);
            self
        }
        /// <p>Information about the client connection logging options.</p>
        /// <p>If you enable client connection logging, data about client connections is sent to a Cloudwatch Logs log stream. The following information is logged:</p>
        /// <ul>
        /// <li> <p>Client connection requests</p> </li>
        /// <li> <p>Client connection results (successful and unsuccessful)</p> </li>
        /// <li> <p>Reasons for unsuccessful client connection requests</p> </li>
        /// <li> <p>Client connection termination time</p> </li>
        /// </ul>
        pub fn set_connection_log_options(
            mut self,
            input: std::option::Option<crate::model::ConnectionLogOptions>,
        ) -> Self {
            self.inner = self.inner.set_connection_log_options(input);
            self
        }
        /// Appends an item to `DnsServers`.
        ///
        /// To override the contents of this collection use [`set_dns_servers`](Self::set_dns_servers).
        ///
        /// <p>Information about the DNS servers to be used for DNS resolution. A Client VPN endpoint can have up to two DNS servers. If no DNS server is specified, the DNS address configured on the device is used for the DNS server.</p>
        pub fn dns_servers(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.dns_servers(input.into());
            self
        }
        /// <p>Information about the DNS servers to be used for DNS resolution. A Client VPN endpoint can have up to two DNS servers. If no DNS server is specified, the DNS address configured on the device is used for the DNS server.</p>
        pub fn set_dns_servers(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_dns_servers(input);
            self
        }
        /// <p>The transport protocol to be used by the VPN session.</p>
        /// <p>Default value: <code>udp</code> </p>
        pub fn transport_protocol(mut self, input: crate::model::TransportProtocol) -> Self {
            self.inner = self.inner.transport_protocol(input);
            self
        }
        /// <p>The transport protocol to be used by the VPN session.</p>
        /// <p>Default value: <code>udp</code> </p>
        pub fn set_transport_protocol(
            mut self,
            input: std::option::Option<crate::model::TransportProtocol>,
        ) -> Self {
            self.inner = self.inner.set_transport_protocol(input);
            self
        }
        /// <p>The port number to assign to the Client VPN endpoint for TCP and UDP traffic.</p>
        /// <p>Valid Values: <code>443</code> | <code>1194</code> </p>
        /// <p>Default Value: <code>443</code> </p>
        pub fn vpn_port(mut self, input: i32) -> Self {
            self.inner = self.inner.vpn_port(input);
            self
        }
        /// <p>The port number to assign to the Client VPN endpoint for TCP and UDP traffic.</p>
        /// <p>Valid Values: <code>443</code> | <code>1194</code> </p>
        /// <p>Default Value: <code>443</code> </p>
        pub fn set_vpn_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_vpn_port(input);
            self
        }
        /// <p>A brief description of the Client VPN endpoint.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A brief description of the Client VPN endpoint.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Indicates whether split-tunnel is enabled on the Client VPN endpoint.</p>
        /// <p>By default, split-tunnel on a VPN endpoint is disabled.</p>
        /// <p>For information about split-tunnel VPN endpoints, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html">Split-tunnel Client VPN endpoint</a> in the <i>Client VPN Administrator Guide</i>.</p>
        pub fn split_tunnel(mut self, input: bool) -> Self {
            self.inner = self.inner.split_tunnel(input);
            self
        }
        /// <p>Indicates whether split-tunnel is enabled on the Client VPN endpoint.</p>
        /// <p>By default, split-tunnel on a VPN endpoint is disabled.</p>
        /// <p>For information about split-tunnel VPN endpoints, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html">Split-tunnel Client VPN endpoint</a> in the <i>Client VPN Administrator Guide</i>.</p>
        pub fn set_split_tunnel(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_split_tunnel(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the Client VPN endpoint during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the Client VPN endpoint during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// Appends an item to `SecurityGroupIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_ids`](Self::set_security_group_ids).
        ///
        /// <p>The IDs of one or more security groups to apply to the target network. You must also specify the ID of the VPC that contains the security groups.</p>
        pub fn security_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_ids(input.into());
            self
        }
        /// <p>The IDs of one or more security groups to apply to the target network. You must also specify the ID of the VPC that contains the security groups.</p>
        pub fn set_security_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_ids(input);
            self
        }
        /// <p>The ID of the VPC to associate with the Client VPN endpoint. If no security group IDs are specified in the request, the default security group for the VPC is applied.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC to associate with the Client VPN endpoint. If no security group IDs are specified in the request, the default security group for the VPC is applied.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>Specify whether to enable the self-service portal for the Client VPN endpoint.</p>
        /// <p>Default Value: <code>enabled</code> </p>
        pub fn self_service_portal(mut self, input: crate::model::SelfServicePortal) -> Self {
            self.inner = self.inner.self_service_portal(input);
            self
        }
        /// <p>Specify whether to enable the self-service portal for the Client VPN endpoint.</p>
        /// <p>Default Value: <code>enabled</code> </p>
        pub fn set_self_service_portal(
            mut self,
            input: std::option::Option<crate::model::SelfServicePortal>,
        ) -> Self {
            self.inner = self.inner.set_self_service_portal(input);
            self
        }
        /// <p>The options for managing connection authorization for new client connections.</p>
        pub fn client_connect_options(mut self, input: crate::model::ClientConnectOptions) -> Self {
            self.inner = self.inner.client_connect_options(input);
            self
        }
        /// <p>The options for managing connection authorization for new client connections.</p>
        pub fn set_client_connect_options(
            mut self,
            input: std::option::Option<crate::model::ClientConnectOptions>,
        ) -> Self {
            self.inner = self.inner.set_client_connect_options(input);
            self
        }
        /// <p>The maximum VPN session duration time in hours.</p>
        /// <p>Valid values: <code>8 | 10 | 12 | 24</code> </p>
        /// <p>Default value: <code>24</code> </p>
        pub fn session_timeout_hours(mut self, input: i32) -> Self {
            self.inner = self.inner.session_timeout_hours(input);
            self
        }
        /// <p>The maximum VPN session duration time in hours.</p>
        /// <p>Valid values: <code>8 | 10 | 12 | 24</code> </p>
        /// <p>Default value: <code>24</code> </p>
        pub fn set_session_timeout_hours(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_session_timeout_hours(input);
            self
        }
        /// <p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>
        pub fn client_login_banner_options(
            mut self,
            input: crate::model::ClientLoginBannerOptions,
        ) -> Self {
            self.inner = self.inner.client_login_banner_options(input);
            self
        }
        /// <p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>
        pub fn set_client_login_banner_options(
            mut self,
            input: std::option::Option<crate::model::ClientLoginBannerOptions>,
        ) -> Self {
            self.inner = self.inner.set_client_login_banner_options(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateClientVpnRoute`.
    ///
    /// <p>Adds a route to a network to a Client VPN endpoint. Each Client VPN endpoint has a route table that describes the available destination network routes. Each route in the route table specifies the path for traffic to specific resources or networks.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateClientVpnRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_client_vpn_route_input::Builder,
    }
    impl CreateClientVpnRoute {
        /// Creates a new `CreateClientVpnRoute`.
        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::CreateClientVpnRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateClientVpnRouteError>,
        > {
            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::CreateClientVpnRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateClientVpnRouteError>,
        > {
            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 Client VPN endpoint to which to add the route.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint to which to add the route.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, of the route destination. For example:</p>
        /// <ul>
        /// <li> <p>To add a route for Internet access, enter <code>0.0.0.0/0</code> </p> </li>
        /// <li> <p>To add a route for a peered VPC, enter the peered VPC's IPv4 CIDR range</p> </li>
        /// <li> <p>To add a route for an on-premises network, enter the Amazon Web Services Site-to-Site VPN connection's IPv4 CIDR range</p> </li>
        /// <li> <p>To add a route for the local network, enter the client CIDR range</p> </li>
        /// </ul>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, of the route destination. For example:</p>
        /// <ul>
        /// <li> <p>To add a route for Internet access, enter <code>0.0.0.0/0</code> </p> </li>
        /// <li> <p>To add a route for a peered VPC, enter the peered VPC's IPv4 CIDR range</p> </li>
        /// <li> <p>To add a route for an on-premises network, enter the Amazon Web Services Site-to-Site VPN connection's IPv4 CIDR range</p> </li>
        /// <li> <p>To add a route for the local network, enter the client CIDR range</p> </li>
        /// </ul>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The ID of the subnet through which you want to route traffic. The specified subnet must be an existing target network of the Client VPN endpoint.</p>
        /// <p>Alternatively, if you're adding a route for the local network, specify <code>local</code>.</p>
        pub fn target_vpc_subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.target_vpc_subnet_id(input.into());
            self
        }
        /// <p>The ID of the subnet through which you want to route traffic. The specified subnet must be an existing target network of the Client VPN endpoint.</p>
        /// <p>Alternatively, if you're adding a route for the local network, specify <code>local</code>.</p>
        pub fn set_target_vpc_subnet_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_target_vpc_subnet_id(input);
            self
        }
        /// <p>A brief description of the route.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A brief description of the route.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateCoipCidr`.
    ///
    /// <p> Creates a range of customer-owned IP addresses. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateCoipCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_coip_cidr_input::Builder,
    }
    impl CreateCoipCidr {
        /// Creates a new `CreateCoipCidr`.
        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::CreateCoipCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateCoipCidrError>,
        > {
            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::CreateCoipCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateCoipCidrError>,
        > {
            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> A customer-owned IP address range to create. </p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p> A customer-owned IP address range to create. </p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p> The ID of the address pool. </p>
        pub fn coip_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.coip_pool_id(input.into());
            self
        }
        /// <p> The ID of the address pool. </p>
        pub fn set_coip_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_coip_pool_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateCoipPool`.
    ///
    /// <p> Creates a pool of customer-owned IP (CoIP) addresses. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateCoipPool {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_coip_pool_input::Builder,
    }
    impl CreateCoipPool {
        /// Creates a new `CreateCoipPool`.
        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::CreateCoipPool,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateCoipPoolError>,
        > {
            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::CreateCoipPoolOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateCoipPoolError>,
        > {
            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 local gateway route table. </p>
        pub fn local_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_id(input.into());
            self
        }
        /// <p> The ID of the local gateway route table. </p>
        pub fn set_local_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p> The tags to assign to the CoIP address pool. </p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p> The tags to assign to the CoIP address pool. </p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateCustomerGateway`.
    ///
    /// <p>Provides information to Amazon Web Services about your customer gateway device. The customer gateway device is the appliance at your end of the VPN connection. You must provide the IP address of the customer gateway device’s external interface. The IP address must be static and can be behind a device performing network address translation (NAT).</p>
    /// <p>For devices that use Border Gateway Protocol (BGP), you can also provide the device's BGP Autonomous System Number (ASN). You can use an existing ASN assigned to your network. If you don't have an ASN already, you can use a private ASN. For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/cgw-options.html">Customer gateway options for your Site-to-Site VPN connection</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    /// <p>To create more than one customer gateway with the same VPN type, IP address, and BGP ASN, specify a unique device name for each customer gateway. An identical request returns information about the existing customer gateway; it doesn't create a new customer gateway.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateCustomerGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_customer_gateway_input::Builder,
    }
    impl CreateCustomerGateway {
        /// Creates a new `CreateCustomerGateway`.
        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::CreateCustomerGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateCustomerGatewayError>,
        > {
            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::CreateCustomerGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateCustomerGatewayError>,
        > {
            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>For devices that support BGP, the customer gateway's BGP ASN.</p>
        /// <p>Default: 65000</p>
        pub fn bgp_asn(mut self, input: i32) -> Self {
            self.inner = self.inner.bgp_asn(input);
            self
        }
        /// <p>For devices that support BGP, the customer gateway's BGP ASN.</p>
        /// <p>Default: 65000</p>
        pub fn set_bgp_asn(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_bgp_asn(input);
            self
        }
        /// <p> <i>This member has been deprecated.</i> The Internet-routable IP address for the customer gateway's outside interface. The address must be static.</p>
        pub fn public_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ip(input.into());
            self
        }
        /// <p> <i>This member has been deprecated.</i> The Internet-routable IP address for the customer gateway's outside interface. The address must be static.</p>
        pub fn set_public_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_public_ip(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) for the customer gateway certificate.</p>
        pub fn certificate_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.certificate_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) for the customer gateway certificate.</p>
        pub fn set_certificate_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_certificate_arn(input);
            self
        }
        /// <p>The type of VPN connection that this customer gateway supports (<code>ipsec.1</code>).</p>
        pub fn r#type(mut self, input: crate::model::GatewayType) -> Self {
            self.inner = self.inner.r#type(input);
            self
        }
        /// <p>The type of VPN connection that this customer gateway supports (<code>ipsec.1</code>).</p>
        pub fn set_type(mut self, input: std::option::Option<crate::model::GatewayType>) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the customer gateway.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the customer gateway.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A name for the customer gateway device.</p>
        /// <p>Length Constraints: Up to 255 characters.</p>
        pub fn device_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.device_name(input.into());
            self
        }
        /// <p>A name for the customer gateway device.</p>
        /// <p>Length Constraints: Up to 255 characters.</p>
        pub fn set_device_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_device_name(input);
            self
        }
        /// <p> IPv4 address for the customer gateway device's outside interface. The address must be static. </p>
        pub fn ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ip_address(input.into());
            self
        }
        /// <p> IPv4 address for the customer gateway device's outside interface. The address must be static. </p>
        pub fn set_ip_address(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ip_address(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateDefaultSubnet`.
    ///
    /// <p>Creates a default subnet with a size <code>/20</code> IPv4 CIDR block in the specified Availability Zone in your default VPC. You can have only one default subnet per Availability Zone. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet">Creating a default subnet</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateDefaultSubnet {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_default_subnet_input::Builder,
    }
    impl CreateDefaultSubnet {
        /// Creates a new `CreateDefaultSubnet`.
        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::CreateDefaultSubnet,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateDefaultSubnetError>,
        > {
            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::CreateDefaultSubnetOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateDefaultSubnetError>,
        > {
            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 Availability Zone in which to create the default subnet.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>The Availability Zone in which to create the default subnet.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether to create an IPv6 only subnet. If you already have a default subnet for this Availability Zone, you must delete it before you can create an IPv6 only subnet.</p>
        pub fn ipv6_native(mut self, input: bool) -> Self {
            self.inner = self.inner.ipv6_native(input);
            self
        }
        /// <p>Indicates whether to create an IPv6 only subnet. If you already have a default subnet for this Availability Zone, you must delete it before you can create an IPv6 only subnet.</p>
        pub fn set_ipv6_native(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_ipv6_native(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateDefaultVpc`.
    ///
    /// <p>Creates a default VPC with a size <code>/16</code> IPv4 CIDR block and a default subnet in each Availability Zone. For more information about the components of a default VPC, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html">Default VPC and default subnets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>. You cannot specify the components of the default VPC yourself.</p>
    /// <p>If you deleted your previous default VPC, you can create a default VPC. You cannot have more than one default VPC per Region.</p>
    /// <p>If your account supports EC2-Classic, you cannot use this action to create a default VPC in a Region that supports EC2-Classic. If you want a default VPC in a Region that supports EC2-Classic, see "I really want a default VPC for my existing EC2 account. Is that possible?" in the <a href="http://aws.amazon.com/vpc/faqs/#Default_VPCs">Default VPCs FAQ</a>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateDefaultVpc {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_default_vpc_input::Builder,
    }
    impl CreateDefaultVpc {
        /// Creates a new `CreateDefaultVpc`.
        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::CreateDefaultVpc,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateDefaultVpcError>,
        > {
            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::CreateDefaultVpcOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateDefaultVpcError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateDhcpOptions`.
    ///
    /// <p>Creates a set of DHCP options for your VPC. After creating the set, you must associate it with the VPC, causing all existing and new instances that you launch in the VPC to use this set of DHCP options. The following are the individual DHCP options you can specify. For more information about the options, see <a href="http://www.ietf.org/rfc/rfc2132.txt">RFC 2132</a>.</p>
    /// <ul>
    /// <li> <p> <code>domain-name-servers</code> - The IP addresses of up to four domain name servers, or AmazonProvidedDNS. The default DHCP option set specifies AmazonProvidedDNS. If specifying more than one domain name server, specify the IP addresses in a single parameter, separated by commas. To have your instance receive a custom DNS hostname as specified in <code>domain-name</code>, you must set <code>domain-name-servers</code> to a custom DNS server.</p> </li>
    /// <li> <p> <code>domain-name</code> - If you're using AmazonProvidedDNS in <code>us-east-1</code>, specify <code>ec2.internal</code>. If you're using AmazonProvidedDNS in another Region, specify <code>region.compute.internal</code> (for example, <code>ap-northeast-1.compute.internal</code>). Otherwise, specify a domain name (for example, <code>ExampleCompany.com</code>). This value is used to complete unqualified DNS hostnames. <b>Important</b>: Some Linux operating systems accept multiple domain names separated by spaces. However, Windows and other Linux operating systems treat the value as a single domain, which results in unexpected behavior. If your DHCP options set is associated with a VPC that has instances with multiple operating systems, specify only one domain name.</p> </li>
    /// <li> <p> <code>ntp-servers</code> - The IP addresses of up to four Network Time Protocol (NTP) servers.</p> </li>
    /// <li> <p> <code>netbios-name-servers</code> - The IP addresses of up to four NetBIOS name servers.</p> </li>
    /// <li> <p> <code>netbios-node-type</code> - The NetBIOS node type (1, 2, 4, or 8). We recommend that you specify 2 (broadcast and multicast are not currently supported). For more information about these node types, see <a href="http://www.ietf.org/rfc/rfc2132.txt">RFC 2132</a>.</p> </li>
    /// </ul>
    /// <p>Your VPC automatically starts out with a set of DHCP options that includes only a DNS server that we provide (AmazonProvidedDNS). If you create a set of options, and if your VPC has an internet gateway, make sure to set the <code>domain-name-servers</code> option either to <code>AmazonProvidedDNS</code> or to a domain name server of your choice. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html">DHCP options sets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateDhcpOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_dhcp_options_input::Builder,
    }
    impl CreateDhcpOptions {
        /// Creates a new `CreateDhcpOptions`.
        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::CreateDhcpOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateDhcpOptionsError>,
        > {
            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::CreateDhcpOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateDhcpOptionsError>,
        > {
            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 `DhcpConfigurations`.
        ///
        /// To override the contents of this collection use [`set_dhcp_configurations`](Self::set_dhcp_configurations).
        ///
        /// <p>A DHCP configuration option.</p>
        pub fn dhcp_configurations(mut self, input: crate::model::NewDhcpConfiguration) -> Self {
            self.inner = self.inner.dhcp_configurations(input);
            self
        }
        /// <p>A DHCP configuration option.</p>
        pub fn set_dhcp_configurations(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::NewDhcpConfiguration>>,
        ) -> Self {
            self.inner = self.inner.set_dhcp_configurations(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the DHCP option.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the DHCP option.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateEgressOnlyInternetGateway`.
    ///
    /// <p>[IPv6 only] Creates an egress-only internet gateway for your VPC. An egress-only internet gateway is used to enable outbound communication over IPv6 from instances in your VPC to the internet, and prevents hosts outside of your VPC from initiating an IPv6 connection with your instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateEgressOnlyInternetGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_egress_only_internet_gateway_input::Builder,
    }
    impl CreateEgressOnlyInternetGateway {
        /// Creates a new `CreateEgressOnlyInternetGateway`.
        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::CreateEgressOnlyInternetGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateEgressOnlyInternetGatewayError>,
        > {
            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::CreateEgressOnlyInternetGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateEgressOnlyInternetGatewayError>,
        > {
            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>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC for which to create the egress-only internet gateway.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC for which to create the egress-only internet gateway.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the egress-only internet gateway.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the egress-only internet gateway.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateFleet`.
    ///
    /// <p>Launches an EC2 Fleet.</p>
    /// <p>You can create a single EC2 Fleet that includes multiple launch specifications that vary by instance type, AMI, Availability Zone, or subnet.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet.html">EC2 Fleet</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateFleet {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_fleet_input::Builder,
    }
    impl CreateFleet {
        /// Creates a new `CreateFleet`.
        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::CreateFleet,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateFleetError>,
        > {
            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::CreateFleetOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateFleetError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Describes the configuration of Spot Instances in an EC2 Fleet.</p>
        pub fn spot_options(mut self, input: crate::model::SpotOptionsRequest) -> Self {
            self.inner = self.inner.spot_options(input);
            self
        }
        /// <p>Describes the configuration of Spot Instances in an EC2 Fleet.</p>
        pub fn set_spot_options(
            mut self,
            input: std::option::Option<crate::model::SpotOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_spot_options(input);
            self
        }
        /// <p>Describes the configuration of On-Demand Instances in an EC2 Fleet.</p>
        pub fn on_demand_options(mut self, input: crate::model::OnDemandOptionsRequest) -> Self {
            self.inner = self.inner.on_demand_options(input);
            self
        }
        /// <p>Describes the configuration of On-Demand Instances in an EC2 Fleet.</p>
        pub fn set_on_demand_options(
            mut self,
            input: std::option::Option<crate::model::OnDemandOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_on_demand_options(input);
            self
        }
        /// <p>Indicates whether running instances should be terminated if the total target capacity of the EC2 Fleet is decreased below the current size of the EC2 Fleet.</p>
        pub fn excess_capacity_termination_policy(
            mut self,
            input: crate::model::FleetExcessCapacityTerminationPolicy,
        ) -> Self {
            self.inner = self.inner.excess_capacity_termination_policy(input);
            self
        }
        /// <p>Indicates whether running instances should be terminated if the total target capacity of the EC2 Fleet is decreased below the current size of the EC2 Fleet.</p>
        pub fn set_excess_capacity_termination_policy(
            mut self,
            input: std::option::Option<crate::model::FleetExcessCapacityTerminationPolicy>,
        ) -> Self {
            self.inner = self.inner.set_excess_capacity_termination_policy(input);
            self
        }
        /// Appends an item to `LaunchTemplateConfigs`.
        ///
        /// To override the contents of this collection use [`set_launch_template_configs`](Self::set_launch_template_configs).
        ///
        /// <p>The configuration for the EC2 Fleet.</p>
        pub fn launch_template_configs(
            mut self,
            input: crate::model::FleetLaunchTemplateConfigRequest,
        ) -> Self {
            self.inner = self.inner.launch_template_configs(input);
            self
        }
        /// <p>The configuration for the EC2 Fleet.</p>
        pub fn set_launch_template_configs(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::FleetLaunchTemplateConfigRequest>,
            >,
        ) -> Self {
            self.inner = self.inner.set_launch_template_configs(input);
            self
        }
        /// <p>The number of units to request.</p>
        pub fn target_capacity_specification(
            mut self,
            input: crate::model::TargetCapacitySpecificationRequest,
        ) -> Self {
            self.inner = self.inner.target_capacity_specification(input);
            self
        }
        /// <p>The number of units to request.</p>
        pub fn set_target_capacity_specification(
            mut self,
            input: std::option::Option<crate::model::TargetCapacitySpecificationRequest>,
        ) -> Self {
            self.inner = self.inner.set_target_capacity_specification(input);
            self
        }
        /// <p>Indicates whether running instances should be terminated when the EC2 Fleet expires.</p>
        pub fn terminate_instances_with_expiration(mut self, input: bool) -> Self {
            self.inner = self.inner.terminate_instances_with_expiration(input);
            self
        }
        /// <p>Indicates whether running instances should be terminated when the EC2 Fleet expires.</p>
        pub fn set_terminate_instances_with_expiration(
            mut self,
            input: std::option::Option<bool>,
        ) -> Self {
            self.inner = self.inner.set_terminate_instances_with_expiration(input);
            self
        }
        /// <p>The fleet type. The default value is <code>maintain</code>.</p>
        /// <ul>
        /// <li> <p> <code>maintain</code> - The EC2 Fleet places an asynchronous request for your desired capacity, and continues to maintain your desired Spot capacity by replenishing interrupted Spot Instances.</p> </li>
        /// <li> <p> <code>request</code> - The EC2 Fleet places an asynchronous one-time request for your desired capacity, but does submit Spot requests in alternative capacity pools if Spot capacity is unavailable, and does not maintain Spot capacity if Spot Instances are interrupted.</p> </li>
        /// <li> <p> <code>instant</code> - The EC2 Fleet places a synchronous one-time request for your desired capacity, and returns errors for any instances that could not be launched.</p> </li>
        /// </ul>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-request-type.html">EC2 Fleet request types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn r#type(mut self, input: crate::model::FleetType) -> Self {
            self.inner = self.inner.r#type(input);
            self
        }
        /// <p>The fleet type. The default value is <code>maintain</code>.</p>
        /// <ul>
        /// <li> <p> <code>maintain</code> - The EC2 Fleet places an asynchronous request for your desired capacity, and continues to maintain your desired Spot capacity by replenishing interrupted Spot Instances.</p> </li>
        /// <li> <p> <code>request</code> - The EC2 Fleet places an asynchronous one-time request for your desired capacity, but does submit Spot requests in alternative capacity pools if Spot capacity is unavailable, and does not maintain Spot capacity if Spot Instances are interrupted.</p> </li>
        /// <li> <p> <code>instant</code> - The EC2 Fleet places a synchronous one-time request for your desired capacity, and returns errors for any instances that could not be launched.</p> </li>
        /// </ul>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-request-type.html">EC2 Fleet request types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_type(mut self, input: std::option::Option<crate::model::FleetType>) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// <p>The start date and time of the request, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). The default is to start fulfilling the request immediately.</p>
        pub fn valid_from(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.valid_from(input);
            self
        }
        /// <p>The start date and time of the request, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). The default is to start fulfilling the request immediately.</p>
        pub fn set_valid_from(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_valid_from(input);
            self
        }
        /// <p>The end date and time of the request, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). At this point, no new EC2 Fleet requests are placed or able to fulfill the request. If no value is specified, the request remains until you cancel it.</p>
        pub fn valid_until(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.valid_until(input);
            self
        }
        /// <p>The end date and time of the request, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). At this point, no new EC2 Fleet requests are placed or able to fulfill the request. If no value is specified, the request remains until you cancel it.</p>
        pub fn set_valid_until(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_valid_until(input);
            self
        }
        /// <p>Indicates whether EC2 Fleet should replace unhealthy Spot Instances. Supported only for fleets of type <code>maintain</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks">EC2 Fleet health checks</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn replace_unhealthy_instances(mut self, input: bool) -> Self {
            self.inner = self.inner.replace_unhealthy_instances(input);
            self
        }
        /// <p>Indicates whether EC2 Fleet should replace unhealthy Spot Instances. Supported only for fleets of type <code>maintain</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks">EC2 Fleet health checks</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_replace_unhealthy_instances(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_replace_unhealthy_instances(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The key-value pair for tagging the EC2 Fleet request on creation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources">Tagging your resources</a>.</p>
        /// <p>If the fleet type is <code>instant</code>, specify a resource type of <code>fleet</code> to tag the fleet or <code>instance</code> to tag the instances at launch.</p>
        /// <p>If the fleet type is <code>maintain</code> or <code>request</code>, specify a resource type of <code>fleet</code> to tag the fleet. You cannot specify a resource type of <code>instance</code>. To tag instances at launch, specify the tags in a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template">launch template</a>.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The key-value pair for tagging the EC2 Fleet request on creation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources">Tagging your resources</a>.</p>
        /// <p>If the fleet type is <code>instant</code>, specify a resource type of <code>fleet</code> to tag the fleet or <code>instance</code> to tag the instances at launch.</p>
        /// <p>If the fleet type is <code>maintain</code> or <code>request</code>, specify a resource type of <code>fleet</code> to tag the fleet. You cannot specify a resource type of <code>instance</code>. To tag instances at launch, specify the tags in a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template">launch template</a>.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Reserved.</p>
        pub fn context(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.context(input.into());
            self
        }
        /// <p>Reserved.</p>
        pub fn set_context(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_context(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateFlowLogs`.
    ///
    /// <p>Creates one or more flow logs to capture information about IP traffic for a specific network interface, subnet, or VPC. </p>
    /// <p>Flow log data for a monitored network interface is recorded as flow log records, which are log events consisting of fields that describe the traffic flow. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records">Flow log records</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    /// <p>When publishing to CloudWatch Logs, flow log records are published to a log group, and each network interface has a unique log stream in the log group. When publishing to Amazon S3, flow log records for all of the monitored network interfaces are published to a single log file object that is stored in the specified bucket.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html">VPC Flow Logs</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateFlowLogs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_flow_logs_input::Builder,
    }
    impl CreateFlowLogs {
        /// Creates a new `CreateFlowLogs`.
        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::CreateFlowLogs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateFlowLogsError>,
        > {
            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::CreateFlowLogsOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateFlowLogsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>The ARN of the IAM role that allows Amazon EC2 to publish flow logs to a CloudWatch Logs log group in your account.</p>
        /// <p>This parameter is required if the destination type is <code>cloud-watch-logs</code> and unsupported otherwise.</p>
        pub fn deliver_logs_permission_arn(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.deliver_logs_permission_arn(input.into());
            self
        }
        /// <p>The ARN of the IAM role that allows Amazon EC2 to publish flow logs to a CloudWatch Logs log group in your account.</p>
        /// <p>This parameter is required if the destination type is <code>cloud-watch-logs</code> and unsupported otherwise.</p>
        pub fn set_deliver_logs_permission_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_deliver_logs_permission_arn(input);
            self
        }
        /// <p>The ARN of the IAM role that allows Amazon EC2 to publish flow logs across accounts.</p>
        pub fn deliver_cross_account_role(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.deliver_cross_account_role(input.into());
            self
        }
        /// <p>The ARN of the IAM role that allows Amazon EC2 to publish flow logs across accounts.</p>
        pub fn set_deliver_cross_account_role(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_deliver_cross_account_role(input);
            self
        }
        /// <p>The name of a new or existing CloudWatch Logs log group where Amazon EC2 publishes your flow logs.</p>
        /// <p>This parameter is valid only if the destination type is <code>cloud-watch-logs</code>.</p>
        pub fn log_group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.log_group_name(input.into());
            self
        }
        /// <p>The name of a new or existing CloudWatch Logs log group where Amazon EC2 publishes your flow logs.</p>
        /// <p>This parameter is valid only if the destination type is <code>cloud-watch-logs</code>.</p>
        pub fn set_log_group_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_log_group_name(input);
            self
        }
        /// Appends an item to `ResourceIds`.
        ///
        /// To override the contents of this collection use [`set_resource_ids`](Self::set_resource_ids).
        ///
        /// <p>The IDs of the resources to monitor. For example, if the resource type is <code>VPC</code>, specify the IDs of the VPCs.</p>
        /// <p>Constraints: Maximum of 25 for transit gateway resource types. Maximum of 1000 for the other resource types.</p>
        pub fn resource_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_ids(input.into());
            self
        }
        /// <p>The IDs of the resources to monitor. For example, if the resource type is <code>VPC</code>, specify the IDs of the VPCs.</p>
        /// <p>Constraints: Maximum of 25 for transit gateway resource types. Maximum of 1000 for the other resource types.</p>
        pub fn set_resource_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_resource_ids(input);
            self
        }
        /// <p>The type of resource to monitor.</p>
        pub fn resource_type(mut self, input: crate::model::FlowLogsResourceType) -> Self {
            self.inner = self.inner.resource_type(input);
            self
        }
        /// <p>The type of resource to monitor.</p>
        pub fn set_resource_type(
            mut self,
            input: std::option::Option<crate::model::FlowLogsResourceType>,
        ) -> Self {
            self.inner = self.inner.set_resource_type(input);
            self
        }
        /// <p>The type of traffic to monitor (accepted traffic, rejected traffic, or all traffic). This parameter is not supported for transit gateway resource types. It is required for the other resource types.</p>
        pub fn traffic_type(mut self, input: crate::model::TrafficType) -> Self {
            self.inner = self.inner.traffic_type(input);
            self
        }
        /// <p>The type of traffic to monitor (accepted traffic, rejected traffic, or all traffic). This parameter is not supported for transit gateway resource types. It is required for the other resource types.</p>
        pub fn set_traffic_type(
            mut self,
            input: std::option::Option<crate::model::TrafficType>,
        ) -> Self {
            self.inner = self.inner.set_traffic_type(input);
            self
        }
        /// <p>The type of destination for the flow log data.</p>
        /// <p>Default: <code>cloud-watch-logs</code> </p>
        pub fn log_destination_type(mut self, input: crate::model::LogDestinationType) -> Self {
            self.inner = self.inner.log_destination_type(input);
            self
        }
        /// <p>The type of destination for the flow log data.</p>
        /// <p>Default: <code>cloud-watch-logs</code> </p>
        pub fn set_log_destination_type(
            mut self,
            input: std::option::Option<crate::model::LogDestinationType>,
        ) -> Self {
            self.inner = self.inner.set_log_destination_type(input);
            self
        }
        /// <p>The destination for the flow log data. The meaning of this parameter depends on the destination type.</p>
        /// <ul>
        /// <li> <p>If the destination type is <code>cloud-watch-logs</code>, specify the ARN of a CloudWatch Logs log group. For example:</p> <p>arn:aws:logs:<i>region</i>:<i>account_id</i>:log-group:<i>my_group</i> </p> <p>Alternatively, use the <code>LogGroupName</code> parameter.</p> </li>
        /// <li> <p>If the destination type is <code>s3</code>, specify the ARN of an S3 bucket. For example:</p> <p>arn:aws:s3:::<i>my_bucket</i>/<i>my_subfolder</i>/</p> <p>The subfolder is optional. Note that you can't use <code>AWSLogs</code> as a subfolder name.</p> </li>
        /// <li> <p>If the destination type is <code>kinesis-data-firehose</code>, specify the ARN of a Kinesis Data Firehose delivery stream. For example:</p> <p>arn:aws:firehose:<i>region</i>:<i>account_id</i>:deliverystream:<i>my_stream</i> </p> </li>
        /// </ul>
        pub fn log_destination(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.log_destination(input.into());
            self
        }
        /// <p>The destination for the flow log data. The meaning of this parameter depends on the destination type.</p>
        /// <ul>
        /// <li> <p>If the destination type is <code>cloud-watch-logs</code>, specify the ARN of a CloudWatch Logs log group. For example:</p> <p>arn:aws:logs:<i>region</i>:<i>account_id</i>:log-group:<i>my_group</i> </p> <p>Alternatively, use the <code>LogGroupName</code> parameter.</p> </li>
        /// <li> <p>If the destination type is <code>s3</code>, specify the ARN of an S3 bucket. For example:</p> <p>arn:aws:s3:::<i>my_bucket</i>/<i>my_subfolder</i>/</p> <p>The subfolder is optional. Note that you can't use <code>AWSLogs</code> as a subfolder name.</p> </li>
        /// <li> <p>If the destination type is <code>kinesis-data-firehose</code>, specify the ARN of a Kinesis Data Firehose delivery stream. For example:</p> <p>arn:aws:firehose:<i>region</i>:<i>account_id</i>:deliverystream:<i>my_stream</i> </p> </li>
        /// </ul>
        pub fn set_log_destination(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_log_destination(input);
            self
        }
        /// <p>The fields to include in the flow log record. List the fields in the order in which they should appear. If you omit this parameter, the flow log is created using the default format. If you specify this parameter, you must include at least one field. For more information about the available fields, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records">Flow log records</a> in the <i>Amazon VPC User Guide</i> or <a href="https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html#flow-log-records">Transit Gateway Flow Log records</a> in the <i>Amazon Web Services Transit Gateway Guide</i>.</p>
        /// <p>Specify the fields using the <code>${field-id}</code> format, separated by spaces. For the CLI, surround this parameter value with single quotes on Linux or double quotes on Windows.</p>
        pub fn log_format(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.log_format(input.into());
            self
        }
        /// <p>The fields to include in the flow log record. List the fields in the order in which they should appear. If you omit this parameter, the flow log is created using the default format. If you specify this parameter, you must include at least one field. For more information about the available fields, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records">Flow log records</a> in the <i>Amazon VPC User Guide</i> or <a href="https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html#flow-log-records">Transit Gateway Flow Log records</a> in the <i>Amazon Web Services Transit Gateway Guide</i>.</p>
        /// <p>Specify the fields using the <code>${field-id}</code> format, separated by spaces. For the CLI, surround this parameter value with single quotes on Linux or double quotes on Windows.</p>
        pub fn set_log_format(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_log_format(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the flow logs.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the flow logs.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. The possible values are 60 seconds (1 minute) or 600 seconds (10 minutes). This parameter must be 60 seconds for transit gateway resource types.</p>
        /// <p>When a network interface is attached to a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Nitro-based instance</a>, the aggregation interval is always 60 seconds or less, regardless of the value that you specify.</p>
        /// <p>Default: 600</p>
        pub fn max_aggregation_interval(mut self, input: i32) -> Self {
            self.inner = self.inner.max_aggregation_interval(input);
            self
        }
        /// <p>The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. The possible values are 60 seconds (1 minute) or 600 seconds (10 minutes). This parameter must be 60 seconds for transit gateway resource types.</p>
        /// <p>When a network interface is attached to a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Nitro-based instance</a>, the aggregation interval is always 60 seconds or less, regardless of the value that you specify.</p>
        /// <p>Default: 600</p>
        pub fn set_max_aggregation_interval(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_aggregation_interval(input);
            self
        }
        /// <p>The destination options.</p>
        pub fn destination_options(
            mut self,
            input: crate::model::DestinationOptionsRequest,
        ) -> Self {
            self.inner = self.inner.destination_options(input);
            self
        }
        /// <p>The destination options.</p>
        pub fn set_destination_options(
            mut self,
            input: std::option::Option<crate::model::DestinationOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_destination_options(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateFpgaImage`.
    ///
    /// <p>Creates an Amazon FPGA Image (AFI) from the specified design checkpoint (DCP).</p>
    /// <p>The create operation is asynchronous. To verify that the AFI is ready for use, check the output logs.</p>
    /// <p>An AFI contains the FPGA bitstream that is ready to download to an FPGA. You can securely deploy an AFI on multiple FPGA-accelerated instances. For more information, see the <a href="https://github.com/aws/aws-fpga/">Amazon Web Services FPGA Hardware Development Kit</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateFpgaImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_fpga_image_input::Builder,
    }
    impl CreateFpgaImage {
        /// Creates a new `CreateFpgaImage`.
        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::CreateFpgaImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateFpgaImageError>,
        > {
            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::CreateFpgaImageOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateFpgaImageError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The location of the encrypted design checkpoint in Amazon S3. The input must be a tarball.</p>
        pub fn input_storage_location(mut self, input: crate::model::StorageLocation) -> Self {
            self.inner = self.inner.input_storage_location(input);
            self
        }
        /// <p>The location of the encrypted design checkpoint in Amazon S3. The input must be a tarball.</p>
        pub fn set_input_storage_location(
            mut self,
            input: std::option::Option<crate::model::StorageLocation>,
        ) -> Self {
            self.inner = self.inner.set_input_storage_location(input);
            self
        }
        /// <p>The location in Amazon S3 for the output logs.</p>
        pub fn logs_storage_location(mut self, input: crate::model::StorageLocation) -> Self {
            self.inner = self.inner.logs_storage_location(input);
            self
        }
        /// <p>The location in Amazon S3 for the output logs.</p>
        pub fn set_logs_storage_location(
            mut self,
            input: std::option::Option<crate::model::StorageLocation>,
        ) -> Self {
            self.inner = self.inner.set_logs_storage_location(input);
            self
        }
        /// <p>A description for the AFI.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the AFI.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>A name for the AFI.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>A name for the AFI.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the FPGA image during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the FPGA image during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateImage`.
    ///
    /// <p>Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped.</p>
    /// <p>By default, when Amazon EC2 creates the new AMI, it reboots the instance so that it can take snapshots of the attached volumes while data is at rest, in order to ensure a consistent state. You can set the <code>NoReboot</code> parameter to <code>true</code> in the API request, or use the <code>--no-reboot</code> option in the CLI to prevent Amazon EC2 from shutting down and rebooting the instance.</p> <important>
    /// <p>If you choose to bypass the shutdown and reboot process by setting the <code>NoReboot</code> parameter to <code>true</code> in the API request, or by using the <code>--no-reboot</code> option in the CLI, we can't guarantee the file system integrity of the created image.</p>
    /// </important>
    /// <p>If you customized your instance with instance store volumes or Amazon EBS volumes in addition to the root device volume, the new AMI contains block device mapping information for those volumes. When you launch an instance from this new AMI, the instance automatically launches with those additional volumes.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html">Create an Amazon EBS-backed Linux AMI</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_image_input::Builder,
    }
    impl CreateImage {
        /// Creates a new `CreateImage`.
        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::CreateImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateImageError>,
        > {
            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::CreateImageOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateImageError>,
        > {
            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 `BlockDeviceMappings`.
        ///
        /// To override the contents of this collection use [`set_block_device_mappings`](Self::set_block_device_mappings).
        ///
        /// <p>The block device mappings. This parameter cannot be used to modify the encryption status of existing volumes or snapshots. To create an AMI with encrypted snapshots, use the <code>CopyImage</code> action.</p>
        pub fn block_device_mappings(mut self, input: crate::model::BlockDeviceMapping) -> Self {
            self.inner = self.inner.block_device_mappings(input);
            self
        }
        /// <p>The block device mappings. This parameter cannot be used to modify the encryption status of existing volumes or snapshots. To create an AMI with encrypted snapshots, use the <code>CopyImage</code> action.</p>
        pub fn set_block_device_mappings(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::BlockDeviceMapping>>,
        ) -> Self {
            self.inner = self.inner.set_block_device_mappings(input);
            self
        }
        /// <p>A description for the new image.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the new image.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>A name for the new image.</p>
        /// <p>Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>A name for the new image.</p>
        /// <p>Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>By default, when Amazon EC2 creates the new AMI, it reboots the instance so that it can take snapshots of the attached volumes while data is at rest, in order to ensure a consistent state. You can set the <code>NoReboot</code> parameter to <code>true</code> in the API request, or use the <code>--no-reboot</code> option in the CLI to prevent Amazon EC2 from shutting down and rebooting the instance.</p> <important>
        /// <p>If you choose to bypass the shutdown and reboot process by setting the <code>NoReboot</code> parameter to <code>true</code> in the API request, or by using the <code>--no-reboot</code> option in the CLI, we can't guarantee the file system integrity of the created image.</p>
        /// </important>
        /// <p>Default: <code>false</code> (follow standard reboot process)</p>
        pub fn no_reboot(mut self, input: bool) -> Self {
            self.inner = self.inner.no_reboot(input);
            self
        }
        /// <p>By default, when Amazon EC2 creates the new AMI, it reboots the instance so that it can take snapshots of the attached volumes while data is at rest, in order to ensure a consistent state. You can set the <code>NoReboot</code> parameter to <code>true</code> in the API request, or use the <code>--no-reboot</code> option in the CLI to prevent Amazon EC2 from shutting down and rebooting the instance.</p> <important>
        /// <p>If you choose to bypass the shutdown and reboot process by setting the <code>NoReboot</code> parameter to <code>true</code> in the API request, or by using the <code>--no-reboot</code> option in the CLI, we can't guarantee the file system integrity of the created image.</p>
        /// </important>
        /// <p>Default: <code>false</code> (follow standard reboot process)</p>
        pub fn set_no_reboot(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_no_reboot(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the AMI and snapshots on creation. You can tag the AMI, the snapshots, or both.</p>
        /// <ul>
        /// <li> <p>To tag the AMI, the value for <code>ResourceType</code> must be <code>image</code>.</p> </li>
        /// <li> <p>To tag the snapshots that are created of the root volume and of other Amazon EBS volumes that are attached to the instance, the value for <code>ResourceType</code> must be <code>snapshot</code>. The same tag is applied to all of the snapshots that are created.</p> </li>
        /// </ul>
        /// <p>If you specify other values for <code>ResourceType</code>, the request fails.</p>
        /// <p>To tag an AMI or snapshot after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>. </p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the AMI and snapshots on creation. You can tag the AMI, the snapshots, or both.</p>
        /// <ul>
        /// <li> <p>To tag the AMI, the value for <code>ResourceType</code> must be <code>image</code>.</p> </li>
        /// <li> <p>To tag the snapshots that are created of the root volume and of other Amazon EBS volumes that are attached to the instance, the value for <code>ResourceType</code> must be <code>snapshot</code>. The same tag is applied to all of the snapshots that are created.</p> </li>
        /// </ul>
        /// <p>If you specify other values for <code>ResourceType</code>, the request fails.</p>
        /// <p>To tag an AMI or snapshot after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>. </p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateInstanceEventWindow`.
    ///
    /// <p>Creates an event window in which scheduled events for the associated Amazon EC2 instances can run.</p>
    /// <p>You can define either a set of time ranges or a cron expression when creating the event window, but not both. All event window times are in UTC.</p>
    /// <p>You can create up to 200 event windows per Amazon Web Services Region.</p>
    /// <p>When you create the event window, targets (instance IDs, Dedicated Host IDs, or tags) are not yet associated with it. To ensure that the event window can be used, you must associate one or more targets with it by using the <code>AssociateInstanceEventWindow</code> API.</p> <important>
    /// <p>Event windows are applicable only for scheduled events that stop, reboot, or terminate instances.</p>
    /// <p>Event windows are <i>not</i> applicable for:</p>
    /// <ul>
    /// <li> <p>Expedited scheduled events and network maintenance events. </p> </li>
    /// <li> <p>Unscheduled maintenance such as AutoRecovery and unplanned reboots.</p> </li>
    /// </ul>
    /// </important>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html">Define event windows for scheduled events</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateInstanceEventWindow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_instance_event_window_input::Builder,
    }
    impl CreateInstanceEventWindow {
        /// Creates a new `CreateInstanceEventWindow`.
        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::CreateInstanceEventWindow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateInstanceEventWindowError>,
        > {
            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::CreateInstanceEventWindowOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateInstanceEventWindowError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The name of the event window.</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 event window.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// Appends an item to `TimeRanges`.
        ///
        /// To override the contents of this collection use [`set_time_ranges`](Self::set_time_ranges).
        ///
        /// <p>The time range for the event window. If you specify a time range, you can't specify a cron expression.</p>
        pub fn time_ranges(
            mut self,
            input: crate::model::InstanceEventWindowTimeRangeRequest,
        ) -> Self {
            self.inner = self.inner.time_ranges(input);
            self
        }
        /// <p>The time range for the event window. If you specify a time range, you can't specify a cron expression.</p>
        pub fn set_time_ranges(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::InstanceEventWindowTimeRangeRequest>,
            >,
        ) -> Self {
            self.inner = self.inner.set_time_ranges(input);
            self
        }
        /// <p>The cron expression for the event window, for example, <code>* 0-4,20-23 * * 1,5</code>. If you specify a cron expression, you can't specify a time range.</p>
        /// <p>Constraints:</p>
        /// <ul>
        /// <li> <p>Only hour and day of the week values are supported.</p> </li>
        /// <li> <p>For day of the week values, you can specify either integers <code>0</code> through <code>6</code>, or alternative single values <code>SUN</code> through <code>SAT</code>.</p> </li>
        /// <li> <p>The minute, month, and year must be specified by <code>*</code>.</p> </li>
        /// <li> <p>The hour value must be one or a multiple range, for example, <code>0-4</code> or <code>0-4,20-23</code>.</p> </li>
        /// <li> <p>Each hour range must be &gt;= 2 hours, for example, <code>0-2</code> or <code>20-23</code>.</p> </li>
        /// <li> <p>The event window must be &gt;= 4 hours. The combined total time ranges in the event window must be &gt;= 4 hours.</p> </li>
        /// </ul>
        /// <p>For more information about cron expressions, see <a href="https://en.wikipedia.org/wiki/Cron">cron</a> on the <i>Wikipedia website</i>.</p>
        pub fn cron_expression(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cron_expression(input.into());
            self
        }
        /// <p>The cron expression for the event window, for example, <code>* 0-4,20-23 * * 1,5</code>. If you specify a cron expression, you can't specify a time range.</p>
        /// <p>Constraints:</p>
        /// <ul>
        /// <li> <p>Only hour and day of the week values are supported.</p> </li>
        /// <li> <p>For day of the week values, you can specify either integers <code>0</code> through <code>6</code>, or alternative single values <code>SUN</code> through <code>SAT</code>.</p> </li>
        /// <li> <p>The minute, month, and year must be specified by <code>*</code>.</p> </li>
        /// <li> <p>The hour value must be one or a multiple range, for example, <code>0-4</code> or <code>0-4,20-23</code>.</p> </li>
        /// <li> <p>Each hour range must be &gt;= 2 hours, for example, <code>0-2</code> or <code>20-23</code>.</p> </li>
        /// <li> <p>The event window must be &gt;= 4 hours. The combined total time ranges in the event window must be &gt;= 4 hours.</p> </li>
        /// </ul>
        /// <p>For more information about cron expressions, see <a href="https://en.wikipedia.org/wiki/Cron">cron</a> on the <i>Wikipedia website</i>.</p>
        pub fn set_cron_expression(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_cron_expression(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the event window.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the event window.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateInstanceExportTask`.
    ///
    /// <p>Exports a running or stopped instance to an Amazon S3 bucket.</p>
    /// <p>For information about the supported operating systems, image formats, and known limitations for the types of instances you can export, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html">Exporting an instance as a VM Using VM Import/Export</a> in the <i>VM Import/Export User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateInstanceExportTask {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_instance_export_task_input::Builder,
    }
    impl CreateInstanceExportTask {
        /// Creates a new `CreateInstanceExportTask`.
        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::CreateInstanceExportTask,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateInstanceExportTaskError>,
        > {
            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::CreateInstanceExportTaskOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateInstanceExportTaskError>,
        > {
            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>A description for the conversion task or the resource being exported. The maximum length is 255 characters.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the conversion task or the resource being exported. The maximum length is 255 characters.</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 format and location for an export instance task.</p>
        pub fn export_to_s3_task(
            mut self,
            input: crate::model::ExportToS3TaskSpecification,
        ) -> Self {
            self.inner = self.inner.export_to_s3_task(input);
            self
        }
        /// <p>The format and location for an export instance task.</p>
        pub fn set_export_to_s3_task(
            mut self,
            input: std::option::Option<crate::model::ExportToS3TaskSpecification>,
        ) -> Self {
            self.inner = self.inner.set_export_to_s3_task(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The target virtualization environment.</p>
        pub fn target_environment(mut self, input: crate::model::ExportEnvironment) -> Self {
            self.inner = self.inner.target_environment(input);
            self
        }
        /// <p>The target virtualization environment.</p>
        pub fn set_target_environment(
            mut self,
            input: std::option::Option<crate::model::ExportEnvironment>,
        ) -> Self {
            self.inner = self.inner.set_target_environment(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the export instance task during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the export instance task during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateInternetGateway`.
    ///
    /// <p>Creates an internet gateway for use with a VPC. After creating the internet gateway, you attach it to a VPC using <code>AttachInternetGateway</code>.</p>
    /// <p>For more information about your VPC and internet gateway, see the <a href="https://docs.aws.amazon.com/vpc/latest/userguide/">Amazon Virtual Private Cloud User Guide</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateInternetGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_internet_gateway_input::Builder,
    }
    impl CreateInternetGateway {
        /// Creates a new `CreateInternetGateway`.
        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::CreateInternetGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateInternetGatewayError>,
        > {
            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::CreateInternetGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateInternetGatewayError>,
        > {
            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 `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the internet gateway.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the internet gateway.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateIpam`.
    ///
    /// <p>Create an IPAM. Amazon VPC IP Address Manager (IPAM) is a VPC feature that you can use to automate your IP address management workflows including assigning, tracking, troubleshooting, and auditing IP addresses across Amazon Web Services Regions and accounts throughout your Amazon Web Services Organization.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html">Create an IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateIpam {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_ipam_input::Builder,
    }
    impl CreateIpam {
        /// Creates a new `CreateIpam`.
        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::CreateIpam,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateIpamError>,
        > {
            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::CreateIpamOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateIpamError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A description for the IPAM.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the IPAM.</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 `OperatingRegions`.
        ///
        /// To override the contents of this collection use [`set_operating_regions`](Self::set_operating_regions).
        ///
        /// <p>The operating Regions for the IPAM. Operating Regions are Amazon Web Services Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only discovers and monitors resources in the Amazon Web Services Regions you select as operating Regions.</p>
        /// <p>For more information about operating Regions, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html">Create an IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
        pub fn operating_regions(mut self, input: crate::model::AddIpamOperatingRegion) -> Self {
            self.inner = self.inner.operating_regions(input);
            self
        }
        /// <p>The operating Regions for the IPAM. Operating Regions are Amazon Web Services Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only discovers and monitors resources in the Amazon Web Services Regions you select as operating Regions.</p>
        /// <p>For more information about operating Regions, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html">Create an IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
        pub fn set_operating_regions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::AddIpamOperatingRegion>>,
        ) -> Self {
            self.inner = self.inner.set_operating_regions(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateIpamPool`.
    ///
    /// <p>Create an IP address pool for Amazon VPC IP Address Manager (IPAM). In IPAM, a pool is a collection of contiguous IP addresses CIDRs. Pools enable you to organize your IP addresses according to your routing and security needs. For example, if you have separate routing and security needs for development and production applications, you can create a pool for each.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html">Create a top-level pool</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateIpamPool {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_ipam_pool_input::Builder,
    }
    impl CreateIpamPool {
        /// Creates a new `CreateIpamPool`.
        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::CreateIpamPool,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateIpamPoolError>,
        > {
            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::CreateIpamPoolOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateIpamPoolError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the scope in which you would like to create the IPAM pool.</p>
        pub fn ipam_scope_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_scope_id(input.into());
            self
        }
        /// <p>The ID of the scope in which you would like to create the IPAM pool.</p>
        pub fn set_ipam_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipam_scope_id(input);
            self
        }
        /// <p>In IPAM, the locale is the Amazon Web Services Region where you want to make an IPAM pool available for allocations. Only resources in the same Region as the locale of the pool can get IP address allocations from the pool. You can only allocate a CIDR for a VPC, for example, from an IPAM pool that shares a locale with the VPC’s Region. Note that once you choose a Locale for a pool, you cannot modify it. If you do not choose a locale, resources in Regions others than the IPAM's home region cannot use CIDRs from this pool.</p>
        /// <p>Possible values: Any Amazon Web Services Region, such as us-east-1.</p>
        pub fn locale(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.locale(input.into());
            self
        }
        /// <p>In IPAM, the locale is the Amazon Web Services Region where you want to make an IPAM pool available for allocations. Only resources in the same Region as the locale of the pool can get IP address allocations from the pool. You can only allocate a CIDR for a VPC, for example, from an IPAM pool that shares a locale with the VPC’s Region. Note that once you choose a Locale for a pool, you cannot modify it. If you do not choose a locale, resources in Regions others than the IPAM's home region cannot use CIDRs from this pool.</p>
        /// <p>Possible values: Any Amazon Web Services Region, such as us-east-1.</p>
        pub fn set_locale(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_locale(input);
            self
        }
        /// <p>The ID of the source IPAM pool. Use this option to create a pool within an existing pool. Note that the CIDR you provision for the pool within the source pool must be available in the source pool's CIDR range.</p>
        pub fn source_ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the source IPAM pool. Use this option to create a pool within an existing pool. Note that the CIDR you provision for the pool within the source pool must be available in the source pool's CIDR range.</p>
        pub fn set_source_ipam_pool_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_ipam_pool_id(input);
            self
        }
        /// <p>A description for the IPAM pool.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the IPAM pool.</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 IP protocol assigned to this IPAM pool. You must choose either IPv4 or IPv6 protocol for a pool.</p>
        pub fn address_family(mut self, input: crate::model::AddressFamily) -> Self {
            self.inner = self.inner.address_family(input);
            self
        }
        /// <p>The IP protocol assigned to this IPAM pool. You must choose either IPv4 or IPv6 protocol for a pool.</p>
        pub fn set_address_family(
            mut self,
            input: std::option::Option<crate::model::AddressFamily>,
        ) -> Self {
            self.inner = self.inner.set_address_family(input);
            self
        }
        /// <p>If selected, IPAM will continuously look for resources within the CIDR range of this pool and automatically import them as allocations into your IPAM. The CIDRs that will be allocated for these resources must not already be allocated to other resources in order for the import to succeed. IPAM will import a CIDR regardless of its compliance with the pool's allocation rules, so a resource might be imported and subsequently marked as noncompliant. If IPAM discovers multiple CIDRs that overlap, IPAM will import the largest CIDR only. If IPAM discovers multiple CIDRs with matching CIDRs, IPAM will randomly import one of them only. </p>
        /// <p>A locale must be set on the pool for this feature to work.</p>
        pub fn auto_import(mut self, input: bool) -> Self {
            self.inner = self.inner.auto_import(input);
            self
        }
        /// <p>If selected, IPAM will continuously look for resources within the CIDR range of this pool and automatically import them as allocations into your IPAM. The CIDRs that will be allocated for these resources must not already be allocated to other resources in order for the import to succeed. IPAM will import a CIDR regardless of its compliance with the pool's allocation rules, so a resource might be imported and subsequently marked as noncompliant. If IPAM discovers multiple CIDRs that overlap, IPAM will import the largest CIDR only. If IPAM discovers multiple CIDRs with matching CIDRs, IPAM will randomly import one of them only. </p>
        /// <p>A locale must be set on the pool for this feature to work.</p>
        pub fn set_auto_import(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_auto_import(input);
            self
        }
        /// <p>Determines if the pool is publicly advertisable. This option is not available for pools with AddressFamily set to <code>ipv4</code>.</p>
        pub fn publicly_advertisable(mut self, input: bool) -> Self {
            self.inner = self.inner.publicly_advertisable(input);
            self
        }
        /// <p>Determines if the pool is publicly advertisable. This option is not available for pools with AddressFamily set to <code>ipv4</code>.</p>
        pub fn set_publicly_advertisable(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_publicly_advertisable(input);
            self
        }
        /// <p>The minimum netmask length required for CIDR allocations in this IPAM pool to be compliant. The minimum netmask length must be less than the maximum netmask length. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
        pub fn allocation_min_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.allocation_min_netmask_length(input);
            self
        }
        /// <p>The minimum netmask length required for CIDR allocations in this IPAM pool to be compliant. The minimum netmask length must be less than the maximum netmask length. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
        pub fn set_allocation_min_netmask_length(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_allocation_min_netmask_length(input);
            self
        }
        /// <p>The maximum netmask length possible for CIDR allocations in this IPAM pool to be compliant. The maximum netmask length must be greater than the minimum netmask length. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
        pub fn allocation_max_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.allocation_max_netmask_length(input);
            self
        }
        /// <p>The maximum netmask length possible for CIDR allocations in this IPAM pool to be compliant. The maximum netmask length must be greater than the minimum netmask length. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.</p>
        pub fn set_allocation_max_netmask_length(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_allocation_max_netmask_length(input);
            self
        }
        /// <p>The default netmask length for allocations added to this pool. If, for example, the CIDR assigned to this pool is 10.0.0.0/8 and you enter 16 here, new allocations will default to 10.0.0.0/16.</p>
        pub fn allocation_default_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.allocation_default_netmask_length(input);
            self
        }
        /// <p>The default netmask length for allocations added to this pool. If, for example, the CIDR assigned to this pool is 10.0.0.0/8 and you enter 16 here, new allocations will default to 10.0.0.0/16.</p>
        pub fn set_allocation_default_netmask_length(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_allocation_default_netmask_length(input);
            self
        }
        /// Appends an item to `AllocationResourceTags`.
        ///
        /// To override the contents of this collection use [`set_allocation_resource_tags`](Self::set_allocation_resource_tags).
        ///
        /// <p>Tags that are required for resources that use CIDRs from this IPAM pool. Resources that do not have these tags will not be allowed to allocate space from the pool. If the resources have their tags changed after they have allocated space or if the allocation tagging requirements are changed on the pool, the resource may be marked as noncompliant.</p>
        pub fn allocation_resource_tags(
            mut self,
            input: crate::model::RequestIpamResourceTag,
        ) -> Self {
            self.inner = self.inner.allocation_resource_tags(input);
            self
        }
        /// <p>Tags that are required for resources that use CIDRs from this IPAM pool. Resources that do not have these tags will not be allowed to allocate space from the pool. If the resources have their tags changed after they have allocated space or if the allocation tagging requirements are changed on the pool, the resource may be marked as noncompliant.</p>
        pub fn set_allocation_resource_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::RequestIpamResourceTag>>,
        ) -> Self {
            self.inner = self.inner.set_allocation_resource_tags(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Limits which service in Amazon Web Services that the pool can be used in. "ec2", for example, allows users to use space for Elastic IP addresses and VPCs.</p>
        pub fn aws_service(mut self, input: crate::model::IpamPoolAwsService) -> Self {
            self.inner = self.inner.aws_service(input);
            self
        }
        /// <p>Limits which service in Amazon Web Services that the pool can be used in. "ec2", for example, allows users to use space for Elastic IP addresses and VPCs.</p>
        pub fn set_aws_service(
            mut self,
            input: std::option::Option<crate::model::IpamPoolAwsService>,
        ) -> Self {
            self.inner = self.inner.set_aws_service(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateIpamScope`.
    ///
    /// <p>Create an IPAM scope. In IPAM, a scope is the highest-level container within IPAM. An IPAM contains two default scopes. Each scope represents the IP space for a single network. The private scope is intended for all private IP address space. The public scope is intended for all public IP address space. Scopes enable you to reuse IP addresses across multiple unconnected networks without causing IP address overlap or conflict.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/add-scope-ipam.html">Add a scope</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateIpamScope {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_ipam_scope_input::Builder,
    }
    impl CreateIpamScope {
        /// Creates a new `CreateIpamScope`.
        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::CreateIpamScope,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateIpamScopeError>,
        > {
            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::CreateIpamScopeOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateIpamScopeError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM for which you're creating this scope.</p>
        pub fn ipam_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_id(input.into());
            self
        }
        /// <p>The ID of the IPAM for which you're creating this scope.</p>
        pub fn set_ipam_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_id(input);
            self
        }
        /// <p>A description for the scope you're creating.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the scope you're creating.</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 `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateKeyPair`.
    ///
    /// <p>Creates an ED25519 or 2048-bit RSA key pair with the specified name and in the specified PEM or PPK format. Amazon EC2 stores the public key and displays the private key for you to save to a file. The private key is returned as an unencrypted PEM encoded PKCS#1 private key or an unencrypted PPK formatted private key for use with PuTTY. If a key with the specified name already exists, Amazon EC2 returns an error.</p>
    /// <p>The key pair returned to you is available only in the Amazon Web Services Region in which you create it. If you prefer, you can create your own key pair using a third-party tool and upload it to any Region using <code>ImportKeyPair</code>.</p>
    /// <p>You can have up to 5,000 key pairs per Amazon Web Services Region.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html">Amazon EC2 key pairs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateKeyPair {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_key_pair_input::Builder,
    }
    impl CreateKeyPair {
        /// Creates a new `CreateKeyPair`.
        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::CreateKeyPair,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateKeyPairError>,
        > {
            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::CreateKeyPairOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateKeyPairError>,
        > {
            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>A unique name for the key pair.</p>
        /// <p>Constraints: Up to 255 ASCII characters</p>
        pub fn key_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.key_name(input.into());
            self
        }
        /// <p>A unique name for the key pair.</p>
        /// <p>Constraints: Up to 255 ASCII characters</p>
        pub fn set_key_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_key_name(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The type of key pair. Note that ED25519 keys are not supported for Windows instances.</p>
        /// <p>Default: <code>rsa</code> </p>
        pub fn key_type(mut self, input: crate::model::KeyType) -> Self {
            self.inner = self.inner.key_type(input);
            self
        }
        /// <p>The type of key pair. Note that ED25519 keys are not supported for Windows instances.</p>
        /// <p>Default: <code>rsa</code> </p>
        pub fn set_key_type(mut self, input: std::option::Option<crate::model::KeyType>) -> Self {
            self.inner = self.inner.set_key_type(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the new key pair.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the new key pair.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>The format of the key pair.</p>
        /// <p>Default: <code>pem</code> </p>
        pub fn key_format(mut self, input: crate::model::KeyFormat) -> Self {
            self.inner = self.inner.key_format(input);
            self
        }
        /// <p>The format of the key pair.</p>
        /// <p>Default: <code>pem</code> </p>
        pub fn set_key_format(
            mut self,
            input: std::option::Option<crate::model::KeyFormat>,
        ) -> Self {
            self.inner = self.inner.set_key_format(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateLaunchTemplate`.
    ///
    /// <p>Creates a launch template.</p>
    /// <p>A launch template contains the parameters to launch an instance. When you launch an instance using <code>RunInstances</code>, you can specify a launch template instead of providing the launch parameters in the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html">Launch an instance from a launch template</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>If you want to clone an existing launch template as the basis for creating a new launch template, you can use the Amazon EC2 console. The API, SDKs, and CLI do not support cloning a template. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template-from-existing-launch-template">Create a launch template from an existing launch template</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateLaunchTemplate {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_launch_template_input::Builder,
    }
    impl CreateLaunchTemplate {
        /// Creates a new `CreateLaunchTemplate`.
        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::CreateLaunchTemplate,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateLaunchTemplateError>,
        > {
            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::CreateLaunchTemplateOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateLaunchTemplateError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        /// <p>Constraint: Maximum 128 ASCII characters.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        /// <p>Constraint: Maximum 128 ASCII characters.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>A name for the launch template.</p>
        pub fn launch_template_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_name(input.into());
            self
        }
        /// <p>A name for the launch template.</p>
        pub fn set_launch_template_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_name(input);
            self
        }
        /// <p>A description for the first version of the launch template.</p>
        pub fn version_description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.version_description(input.into());
            self
        }
        /// <p>A description for the first version of the launch template.</p>
        pub fn set_version_description(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_version_description(input);
            self
        }
        /// <p>The information for the launch template.</p>
        pub fn launch_template_data(
            mut self,
            input: crate::model::RequestLaunchTemplateData,
        ) -> Self {
            self.inner = self.inner.launch_template_data(input);
            self
        }
        /// <p>The information for the launch template.</p>
        pub fn set_launch_template_data(
            mut self,
            input: std::option::Option<crate::model::RequestLaunchTemplateData>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_data(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the launch template on creation. To tag the launch template, the resource type must be <code>launch-template</code>.</p> <note>
        /// <p>To specify the tags for the resources that are created when an instance is launched, you must use the <code>TagSpecifications</code> parameter in the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html">launch template data</a> structure.</p>
        /// </note>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the launch template on creation. To tag the launch template, the resource type must be <code>launch-template</code>.</p> <note>
        /// <p>To specify the tags for the resources that are created when an instance is launched, you must use the <code>TagSpecifications</code> parameter in the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html">launch template data</a> structure.</p>
        /// </note>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateLaunchTemplateVersion`.
    ///
    /// <p>Creates a new version of a launch template. You can specify an existing version of launch template from which to base the new version.</p>
    /// <p>Launch template versions are numbered in the order in which they are created. You cannot specify, change, or replace the numbering of launch template versions.</p>
    /// <p>Launch templates are immutable; after you create a launch template, you can't modify it. Instead, you can create a new version of the launch template that includes any changes you require.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#manage-launch-template-versions">Modify a launch template (manage launch template versions)</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateLaunchTemplateVersion {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_launch_template_version_input::Builder,
    }
    impl CreateLaunchTemplateVersion {
        /// Creates a new `CreateLaunchTemplateVersion`.
        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::CreateLaunchTemplateVersion,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateLaunchTemplateVersionError>,
        > {
            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::CreateLaunchTemplateVersionOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateLaunchTemplateVersionError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        /// <p>Constraint: Maximum 128 ASCII characters.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        /// <p>Constraint: Maximum 128 ASCII characters.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        pub fn launch_template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_id(input.into());
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        pub fn set_launch_template_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_id(input);
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>You must specify the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        pub fn launch_template_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_name(input.into());
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>You must specify the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        pub fn set_launch_template_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_name(input);
            self
        }
        /// <p>The version number of the launch template version on which to base the new version. The new version inherits the same launch parameters as the source version, except for parameters that you specify in <code>LaunchTemplateData</code>. Snapshots applied to the block device mapping are ignored when creating a new version unless they are explicitly included.</p>
        pub fn source_version(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_version(input.into());
            self
        }
        /// <p>The version number of the launch template version on which to base the new version. The new version inherits the same launch parameters as the source version, except for parameters that you specify in <code>LaunchTemplateData</code>. Snapshots applied to the block device mapping are ignored when creating a new version unless they are explicitly included.</p>
        pub fn set_source_version(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_version(input);
            self
        }
        /// <p>A description for the version of the launch template.</p>
        pub fn version_description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.version_description(input.into());
            self
        }
        /// <p>A description for the version of the launch template.</p>
        pub fn set_version_description(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_version_description(input);
            self
        }
        /// <p>The information for the launch template.</p>
        pub fn launch_template_data(
            mut self,
            input: crate::model::RequestLaunchTemplateData,
        ) -> Self {
            self.inner = self.inner.launch_template_data(input);
            self
        }
        /// <p>The information for the launch template.</p>
        pub fn set_launch_template_data(
            mut self,
            input: std::option::Option<crate::model::RequestLaunchTemplateData>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_data(input);
            self
        }
        /// <p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageID</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn resolve_alias(mut self, input: bool) -> Self {
            self.inner = self.inner.resolve_alias(input);
            self
        }
        /// <p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageID</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn set_resolve_alias(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_resolve_alias(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateLocalGatewayRoute`.
    ///
    /// <p>Creates a static route for the specified local gateway route table. You must specify one of the following targets: </p>
    /// <ul>
    /// <li> <p> <code>LocalGatewayVirtualInterfaceGroupId</code> </p> </li>
    /// <li> <p> <code>NetworkInterfaceId</code> </p> </li>
    /// </ul>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateLocalGatewayRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_local_gateway_route_input::Builder,
    }
    impl CreateLocalGatewayRoute {
        /// Creates a new `CreateLocalGatewayRoute`.
        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::CreateLocalGatewayRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateLocalGatewayRouteError>,
        > {
            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::CreateLocalGatewayRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateLocalGatewayRouteError>,
        > {
            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 CIDR range used for destination matches. Routing decisions are based on the most specific match.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The CIDR range used for destination matches. Routing decisions are based on the most specific match.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn local_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn set_local_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the virtual interface group.</p>
        pub fn local_gateway_virtual_interface_group_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .local_gateway_virtual_interface_group_id(input.into());
            self
        }
        /// <p>The ID of the virtual interface group.</p>
        pub fn set_local_gateway_virtual_interface_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_local_gateway_virtual_interface_group_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateLocalGatewayRouteTable`.
    ///
    /// <p> Creates a local gateway route table. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateLocalGatewayRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_local_gateway_route_table_input::Builder,
    }
    impl CreateLocalGatewayRouteTable {
        /// Creates a new `CreateLocalGatewayRouteTable`.
        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::CreateLocalGatewayRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateLocalGatewayRouteTableError>,
        > {
            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::CreateLocalGatewayRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateLocalGatewayRouteTableError>,
        > {
            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 local gateway. </p>
        pub fn local_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.local_gateway_id(input.into());
            self
        }
        /// <p> The ID of the local gateway. </p>
        pub fn set_local_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_id(input);
            self
        }
        /// <p> The mode of the local gateway route table. </p>
        pub fn mode(mut self, input: crate::model::LocalGatewayRouteTableMode) -> Self {
            self.inner = self.inner.mode(input);
            self
        }
        /// <p> The mode of the local gateway route table. </p>
        pub fn set_mode(
            mut self,
            input: std::option::Option<crate::model::LocalGatewayRouteTableMode>,
        ) -> Self {
            self.inner = self.inner.set_mode(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p> The tags assigned to the local gateway route table. </p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p> The tags assigned to the local gateway route table. </p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation`.
    ///
    /// <p> Creates a local gateway route table virtual interface group association. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation {
                            handle: std::sync::Arc<super::Handle>,
                            inner: crate::input::create_local_gateway_route_table_virtual_interface_group_association_input::Builder
                        }
    impl CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation {
        /// Creates a new `CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation`.
        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::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationError,
            >,
        > {
            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::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationError,
            >,
        > {
            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 local gateway route table. </p>
        pub fn local_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_id(input.into());
            self
        }
        /// <p> The ID of the local gateway route table. </p>
        pub fn set_local_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_id(input);
            self
        }
        /// <p> The ID of the local gateway route table virtual interface group association. </p>
        pub fn local_gateway_virtual_interface_group_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .local_gateway_virtual_interface_group_id(input.into());
            self
        }
        /// <p> The ID of the local gateway route table virtual interface group association. </p>
        pub fn set_local_gateway_virtual_interface_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_local_gateway_virtual_interface_group_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p> The tags assigned to the local gateway route table virtual interface group association. </p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p> The tags assigned to the local gateway route table virtual interface group association. </p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateLocalGatewayRouteTableVpcAssociation`.
    ///
    /// <p>Associates the specified VPC with the specified local gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateLocalGatewayRouteTableVpcAssociation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_local_gateway_route_table_vpc_association_input::Builder,
    }
    impl CreateLocalGatewayRouteTableVpcAssociation {
        /// Creates a new `CreateLocalGatewayRouteTableVpcAssociation`.
        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::CreateLocalGatewayRouteTableVpcAssociation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::CreateLocalGatewayRouteTableVpcAssociationError,
            >,
        > {
            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::CreateLocalGatewayRouteTableVpcAssociationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::CreateLocalGatewayRouteTableVpcAssociationError,
            >,
        > {
            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 local gateway route table.</p>
        pub fn local_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn set_local_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the local gateway route table VPC association.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the local gateway route table VPC association.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateManagedPrefixList`.
    ///
    /// <p>Creates a managed prefix list. You can specify one or more entries for the prefix list. Each entry consists of a CIDR block and an optional description.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateManagedPrefixList {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_managed_prefix_list_input::Builder,
    }
    impl CreateManagedPrefixList {
        /// Creates a new `CreateManagedPrefixList`.
        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::CreateManagedPrefixList,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateManagedPrefixListError>,
        > {
            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::CreateManagedPrefixListOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateManagedPrefixListError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A name for the prefix list.</p>
        /// <p>Constraints: Up to 255 characters in length. The name cannot start with <code>com.amazonaws</code>.</p>
        pub fn prefix_list_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_name(input.into());
            self
        }
        /// <p>A name for the prefix list.</p>
        /// <p>Constraints: Up to 255 characters in length. The name cannot start with <code>com.amazonaws</code>.</p>
        pub fn set_prefix_list_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_name(input);
            self
        }
        /// Appends an item to `Entries`.
        ///
        /// To override the contents of this collection use [`set_entries`](Self::set_entries).
        ///
        /// <p>One or more entries for the prefix list.</p>
        pub fn entries(mut self, input: crate::model::AddPrefixListEntry) -> Self {
            self.inner = self.inner.entries(input);
            self
        }
        /// <p>One or more entries for the prefix list.</p>
        pub fn set_entries(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::AddPrefixListEntry>>,
        ) -> Self {
            self.inner = self.inner.set_entries(input);
            self
        }
        /// <p>The maximum number of entries for the prefix list.</p>
        pub fn max_entries(mut self, input: i32) -> Self {
            self.inner = self.inner.max_entries(input);
            self
        }
        /// <p>The maximum number of entries for the prefix list.</p>
        pub fn set_max_entries(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_entries(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the prefix list during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the prefix list during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>The IP address type.</p>
        /// <p>Valid Values: <code>IPv4</code> | <code>IPv6</code> </p>
        pub fn address_family(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.address_family(input.into());
            self
        }
        /// <p>The IP address type.</p>
        /// <p>Valid Values: <code>IPv4</code> | <code>IPv6</code> </p>
        pub fn set_address_family(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_address_family(input);
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        /// <p>Constraints: Up to 255 UTF-8 characters in length.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        /// <p>Constraints: Up to 255 UTF-8 characters in length.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNatGateway`.
    ///
    /// <p>Creates a NAT gateway in the specified subnet. This action creates a network interface in the specified subnet with a private IP address from the IP address range of the subnet. You can create either a public NAT gateway or a private NAT gateway.</p>
    /// <p>With a public NAT gateway, internet-bound traffic from a private subnet can be routed to the NAT gateway, so that instances in a private subnet can connect to the internet.</p>
    /// <p>With a private NAT gateway, private communication is routed across VPCs and on-premises networks through a transit gateway or virtual private gateway. Common use cases include running large workloads behind a small pool of allowlisted IPv4 addresses, preserving private IPv4 addresses, and communicating between overlapping networks.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html">NAT gateways</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNatGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_nat_gateway_input::Builder,
    }
    impl CreateNatGateway {
        /// Creates a new `CreateNatGateway`.
        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::CreateNatGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNatGatewayError>,
        > {
            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::CreateNatGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNatGatewayError>,
        > {
            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>[Public NAT gateways only] The allocation ID of an Elastic IP address to associate with the NAT gateway. You cannot specify an Elastic IP address with a private NAT gateway. If the Elastic IP address is associated with another resource, you must first disassociate it.</p>
        pub fn allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_id(input.into());
            self
        }
        /// <p>[Public NAT gateways only] The allocation ID of an Elastic IP address to associate with the NAT gateway. You cannot specify an Elastic IP address with a private NAT gateway. If the Elastic IP address is associated with another resource, you must first disassociate it.</p>
        pub fn set_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_allocation_id(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        /// <p>Constraint: Maximum 64 ASCII characters.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        /// <p>Constraint: Maximum 64 ASCII characters.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The subnet in which to create the NAT gateway.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The subnet in which to create the NAT gateway.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the NAT gateway.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the NAT gateway.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Indicates whether the NAT gateway supports public or private connectivity. The default is public connectivity.</p>
        pub fn connectivity_type(mut self, input: crate::model::ConnectivityType) -> Self {
            self.inner = self.inner.connectivity_type(input);
            self
        }
        /// <p>Indicates whether the NAT gateway supports public or private connectivity. The default is public connectivity.</p>
        pub fn set_connectivity_type(
            mut self,
            input: std::option::Option<crate::model::ConnectivityType>,
        ) -> Self {
            self.inner = self.inner.set_connectivity_type(input);
            self
        }
        /// <p>The private IPv4 address to assign to the NAT gateway. If you don't provide an address, a private IPv4 address will be automatically assigned.</p>
        pub fn private_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.private_ip_address(input.into());
            self
        }
        /// <p>The private IPv4 address to assign to the NAT gateway. If you don't provide an address, a private IPv4 address will be automatically assigned.</p>
        pub fn set_private_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_private_ip_address(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNetworkAcl`.
    ///
    /// <p>Creates a network ACL in a VPC. Network ACLs provide an optional layer of security (in addition to security groups) for the instances in your VPC.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html">Network ACLs</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNetworkAcl {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_network_acl_input::Builder,
    }
    impl CreateNetworkAcl {
        /// Creates a new `CreateNetworkAcl`.
        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::CreateNetworkAcl,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkAclError>,
        > {
            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::CreateNetworkAclOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkAclError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the network ACL.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the network ACL.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNetworkAclEntry`.
    ///
    /// <p>Creates an entry (a rule) in a network ACL with the specified rule number. Each network ACL has a set of numbered ingress rules and a separate set of numbered egress rules. When determining whether a packet should be allowed in or out of a subnet associated with the ACL, we process the entries in the ACL according to the rule numbers, in ascending order. Each network ACL has a set of ingress rules and a separate set of egress rules.</p>
    /// <p>We recommend that you leave room between the rule numbers (for example, 100, 110, 120, ...), and not number them one right after the other (for example, 101, 102, 103, ...). This makes it easier to add a rule between existing ones without having to renumber the rules.</p>
    /// <p>After you add an entry, you can't modify it; you must either replace it, or create an entry and delete the old one.</p>
    /// <p>For more information about network ACLs, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html">Network ACLs</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNetworkAclEntry {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_network_acl_entry_input::Builder,
    }
    impl CreateNetworkAclEntry {
        /// Creates a new `CreateNetworkAclEntry`.
        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::CreateNetworkAclEntry,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkAclEntryError>,
        > {
            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::CreateNetworkAclEntryOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkAclEntryError>,
        > {
            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 IPv4 network range to allow or deny, in CIDR notation (for example <code>172.16.0.0/24</code>). We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
        pub fn cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_block(input.into());
            self
        }
        /// <p>The IPv4 network range to allow or deny, in CIDR notation (for example <code>172.16.0.0/24</code>). We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
        pub fn set_cidr_block(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_block(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether this is an egress rule (rule is applied to traffic leaving the subnet).</p>
        pub fn egress(mut self, input: bool) -> Self {
            self.inner = self.inner.egress(input);
            self
        }
        /// <p>Indicates whether this is an egress rule (rule is applied to traffic leaving the subnet).</p>
        pub fn set_egress(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_egress(input);
            self
        }
        /// <p>ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.</p>
        pub fn icmp_type_code(mut self, input: crate::model::IcmpTypeCode) -> Self {
            self.inner = self.inner.icmp_type_code(input);
            self
        }
        /// <p>ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.</p>
        pub fn set_icmp_type_code(
            mut self,
            input: std::option::Option<crate::model::IcmpTypeCode>,
        ) -> Self {
            self.inner = self.inner.set_icmp_type_code(input);
            self
        }
        /// <p>The IPv6 network range to allow or deny, in CIDR notation (for example <code>2001:db8:1234:1a00::/64</code>).</p>
        pub fn ipv6_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_cidr_block(input.into());
            self
        }
        /// <p>The IPv6 network range to allow or deny, in CIDR notation (for example <code>2001:db8:1234:1a00::/64</code>).</p>
        pub fn set_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_cidr_block(input);
            self
        }
        /// <p>The ID of the network ACL.</p>
        pub fn network_acl_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_acl_id(input.into());
            self
        }
        /// <p>The ID of the network ACL.</p>
        pub fn set_network_acl_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_acl_id(input);
            self
        }
        /// <p>TCP or UDP protocols: The range of ports the rule applies to. Required if specifying protocol 6 (TCP) or 17 (UDP).</p>
        pub fn port_range(mut self, input: crate::model::PortRange) -> Self {
            self.inner = self.inner.port_range(input);
            self
        }
        /// <p>TCP or UDP protocols: The range of ports the rule applies to. Required if specifying protocol 6 (TCP) or 17 (UDP).</p>
        pub fn set_port_range(
            mut self,
            input: std::option::Option<crate::model::PortRange>,
        ) -> Self {
            self.inner = self.inner.set_port_range(input);
            self
        }
        /// <p>The protocol number. A value of "-1" means all protocols. If you specify "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), traffic on all ports is allowed, regardless of any ports or ICMP types or codes that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.</p>
        pub fn protocol(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.protocol(input.into());
            self
        }
        /// <p>The protocol number. A value of "-1" means all protocols. If you specify "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), traffic on all ports is allowed, regardless of any ports or ICMP types or codes that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.</p>
        pub fn set_protocol(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_protocol(input);
            self
        }
        /// <p>Indicates whether to allow or deny the traffic that matches the rule.</p>
        pub fn rule_action(mut self, input: crate::model::RuleAction) -> Self {
            self.inner = self.inner.rule_action(input);
            self
        }
        /// <p>Indicates whether to allow or deny the traffic that matches the rule.</p>
        pub fn set_rule_action(
            mut self,
            input: std::option::Option<crate::model::RuleAction>,
        ) -> Self {
            self.inner = self.inner.set_rule_action(input);
            self
        }
        /// <p>The rule number for the entry (for example, 100). ACL entries are processed in ascending order by rule number.</p>
        /// <p>Constraints: Positive integer from 1 to 32766. The range 32767 to 65535 is reserved for internal use.</p>
        pub fn rule_number(mut self, input: i32) -> Self {
            self.inner = self.inner.rule_number(input);
            self
        }
        /// <p>The rule number for the entry (for example, 100). ACL entries are processed in ascending order by rule number.</p>
        /// <p>Constraints: Positive integer from 1 to 32766. The range 32767 to 65535 is reserved for internal use.</p>
        pub fn set_rule_number(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_rule_number(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNetworkInsightsAccessScope`.
    ///
    /// <p>Creates a Network Access Scope.</p>
    /// <p>Amazon Web Services Network Access Analyzer enables cloud networking and cloud operations teams to verify that their networks on Amazon Web Services conform to their network security and governance objectives. For more information, see the <a href="https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/">Amazon Web Services Network Access Analyzer Guide</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNetworkInsightsAccessScope {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_network_insights_access_scope_input::Builder,
    }
    impl CreateNetworkInsightsAccessScope {
        /// Creates a new `CreateNetworkInsightsAccessScope`.
        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::CreateNetworkInsightsAccessScope,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkInsightsAccessScopeError>,
        > {
            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::CreateNetworkInsightsAccessScopeOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkInsightsAccessScopeError>,
        > {
            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 `MatchPaths`.
        ///
        /// To override the contents of this collection use [`set_match_paths`](Self::set_match_paths).
        ///
        /// <p>The paths to match.</p>
        pub fn match_paths(mut self, input: crate::model::AccessScopePathRequest) -> Self {
            self.inner = self.inner.match_paths(input);
            self
        }
        /// <p>The paths to match.</p>
        pub fn set_match_paths(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::AccessScopePathRequest>>,
        ) -> Self {
            self.inner = self.inner.set_match_paths(input);
            self
        }
        /// Appends an item to `ExcludePaths`.
        ///
        /// To override the contents of this collection use [`set_exclude_paths`](Self::set_exclude_paths).
        ///
        /// <p>The paths to exclude.</p>
        pub fn exclude_paths(mut self, input: crate::model::AccessScopePathRequest) -> Self {
            self.inner = self.inner.exclude_paths(input);
            self
        }
        /// <p>The paths to exclude.</p>
        pub fn set_exclude_paths(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::AccessScopePathRequest>>,
        ) -> Self {
            self.inner = self.inner.set_exclude_paths(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNetworkInsightsPath`.
    ///
    /// <p>Creates a path to analyze for reachability.</p>
    /// <p>Reachability Analyzer enables you to analyze and debug network reachability between two resources in your virtual private cloud (VPC). For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/reachability/">What is Reachability Analyzer</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNetworkInsightsPath {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_network_insights_path_input::Builder,
    }
    impl CreateNetworkInsightsPath {
        /// Creates a new `CreateNetworkInsightsPath`.
        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::CreateNetworkInsightsPath,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkInsightsPathError>,
        > {
            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::CreateNetworkInsightsPathOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkInsightsPathError>,
        > {
            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 IP address of the Amazon Web Services resource that is the source of the path.</p>
        pub fn source_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_ip(input.into());
            self
        }
        /// <p>The IP address of the Amazon Web Services resource that is the source of the path.</p>
        pub fn set_source_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_source_ip(input);
            self
        }
        /// <p>The IP address of the Amazon Web Services resource that is the destination of the path.</p>
        pub fn destination_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_ip(input.into());
            self
        }
        /// <p>The IP address of the Amazon Web Services resource that is the destination of the path.</p>
        pub fn set_destination_ip(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_ip(input);
            self
        }
        /// <p>The Amazon Web Services resource that is the source of the path.</p>
        pub fn source(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source(input.into());
            self
        }
        /// <p>The Amazon Web Services resource that is the source of the path.</p>
        pub fn set_source(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_source(input);
            self
        }
        /// <p>The Amazon Web Services resource that is the destination of the path.</p>
        pub fn destination(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination(input.into());
            self
        }
        /// <p>The Amazon Web Services resource that is the destination of the path.</p>
        pub fn set_destination(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_destination(input);
            self
        }
        /// <p>The protocol.</p>
        pub fn protocol(mut self, input: crate::model::Protocol) -> Self {
            self.inner = self.inner.protocol(input);
            self
        }
        /// <p>The protocol.</p>
        pub fn set_protocol(mut self, input: std::option::Option<crate::model::Protocol>) -> Self {
            self.inner = self.inner.set_protocol(input);
            self
        }
        /// <p>The destination port.</p>
        pub fn destination_port(mut self, input: i32) -> Self {
            self.inner = self.inner.destination_port(input);
            self
        }
        /// <p>The destination port.</p>
        pub fn set_destination_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_destination_port(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to add to the path.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to add to the path.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNetworkInterface`.
    ///
    /// <p>Creates a network interface in the specified subnet.</p>
    /// <p>The number of IP addresses you can assign to a network interface varies by instance type. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI">IP Addresses Per ENI Per Instance Type</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    /// <p>For more information about network interfaces, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html">Elastic network interfaces</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNetworkInterface {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_network_interface_input::Builder,
    }
    impl CreateNetworkInterface {
        /// Creates a new `CreateNetworkInterface`.
        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::CreateNetworkInterface,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkInterfaceError>,
        > {
            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::CreateNetworkInterfaceOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkInterfaceError>,
        > {
            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>A description for the network interface.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the network interface.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Groups`.
        ///
        /// To override the contents of this collection use [`set_groups`](Self::set_groups).
        ///
        /// <p>The IDs of one or more security groups.</p>
        pub fn groups(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.groups(input.into());
            self
        }
        /// <p>The IDs of one or more security groups.</p>
        pub fn set_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_groups(input);
            self
        }
        /// <p>The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range.</p>
        /// <p>You can't specify a count of IPv6 addresses using this parameter if you've specified one of the following: specific IPv6 addresses, specific IPv6 prefixes, or a count of IPv6 prefixes.</p>
        /// <p>If your subnet has the <code>AssignIpv6AddressOnCreation</code> attribute set, you can override that setting by specifying 0 as the IPv6 address count.</p>
        pub fn ipv6_address_count(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv6_address_count(input);
            self
        }
        /// <p>The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range.</p>
        /// <p>You can't specify a count of IPv6 addresses using this parameter if you've specified one of the following: specific IPv6 addresses, specific IPv6 prefixes, or a count of IPv6 prefixes.</p>
        /// <p>If your subnet has the <code>AssignIpv6AddressOnCreation</code> attribute set, you can override that setting by specifying 0 as the IPv6 address count.</p>
        pub fn set_ipv6_address_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv6_address_count(input);
            self
        }
        /// Appends an item to `Ipv6Addresses`.
        ///
        /// To override the contents of this collection use [`set_ipv6_addresses`](Self::set_ipv6_addresses).
        ///
        /// <p>The IPv6 addresses from the IPv6 CIDR block range of your subnet.</p>
        /// <p>You can't specify IPv6 addresses using this parameter if you've specified one of the following: a count of IPv6 addresses, specific IPv6 prefixes, or a count of IPv6 prefixes.</p>
        pub fn ipv6_addresses(mut self, input: crate::model::InstanceIpv6Address) -> Self {
            self.inner = self.inner.ipv6_addresses(input);
            self
        }
        /// <p>The IPv6 addresses from the IPv6 CIDR block range of your subnet.</p>
        /// <p>You can't specify IPv6 addresses using this parameter if you've specified one of the following: a count of IPv6 addresses, specific IPv6 prefixes, or a count of IPv6 prefixes.</p>
        pub fn set_ipv6_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::InstanceIpv6Address>>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_addresses(input);
            self
        }
        /// <p>The primary private IPv4 address of the network interface. If you don't specify an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR range. If you specify an IP address, you cannot indicate any IP addresses specified in <code>privateIpAddresses</code> as primary (only one IP address can be designated as primary).</p>
        pub fn private_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.private_ip_address(input.into());
            self
        }
        /// <p>The primary private IPv4 address of the network interface. If you don't specify an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR range. If you specify an IP address, you cannot indicate any IP addresses specified in <code>privateIpAddresses</code> as primary (only one IP address can be designated as primary).</p>
        pub fn set_private_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_private_ip_address(input);
            self
        }
        /// Appends an item to `PrivateIpAddresses`.
        ///
        /// To override the contents of this collection use [`set_private_ip_addresses`](Self::set_private_ip_addresses).
        ///
        /// <p>The private IPv4 addresses.</p>
        /// <p>You can't specify private IPv4 addresses if you've specified one of the following: a count of private IPv4 addresses, specific IPv4 prefixes, or a count of IPv4 prefixes.</p>
        pub fn private_ip_addresses(
            mut self,
            input: crate::model::PrivateIpAddressSpecification,
        ) -> Self {
            self.inner = self.inner.private_ip_addresses(input);
            self
        }
        /// <p>The private IPv4 addresses.</p>
        /// <p>You can't specify private IPv4 addresses if you've specified one of the following: a count of private IPv4 addresses, specific IPv4 prefixes, or a count of IPv4 prefixes.</p>
        pub fn set_private_ip_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::PrivateIpAddressSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_private_ip_addresses(input);
            self
        }
        /// <p>The number of secondary private IPv4 addresses to assign to a network interface. When you specify a number of secondary IPv4 addresses, Amazon EC2 selects these IP addresses within the subnet's IPv4 CIDR range. You can't specify this option and specify more than one private IP address using <code>privateIpAddresses</code>.</p>
        /// <p>You can't specify a count of private IPv4 addresses if you've specified one of the following: specific private IPv4 addresses, specific IPv4 prefixes, or a count of IPv4 prefixes.</p>
        pub fn secondary_private_ip_address_count(mut self, input: i32) -> Self {
            self.inner = self.inner.secondary_private_ip_address_count(input);
            self
        }
        /// <p>The number of secondary private IPv4 addresses to assign to a network interface. When you specify a number of secondary IPv4 addresses, Amazon EC2 selects these IP addresses within the subnet's IPv4 CIDR range. You can't specify this option and specify more than one private IP address using <code>privateIpAddresses</code>.</p>
        /// <p>You can't specify a count of private IPv4 addresses if you've specified one of the following: specific private IPv4 addresses, specific IPv4 prefixes, or a count of IPv4 prefixes.</p>
        pub fn set_secondary_private_ip_address_count(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_secondary_private_ip_address_count(input);
            self
        }
        /// Appends an item to `Ipv4Prefixes`.
        ///
        /// To override the contents of this collection use [`set_ipv4_prefixes`](Self::set_ipv4_prefixes).
        ///
        /// <p>The IPv4 prefixes assigned to the network interface.</p>
        /// <p>You can't specify IPv4 prefixes if you've specified one of the following: a count of IPv4 prefixes, specific private IPv4 addresses, or a count of private IPv4 addresses.</p>
        pub fn ipv4_prefixes(
            mut self,
            input: crate::model::Ipv4PrefixSpecificationRequest,
        ) -> Self {
            self.inner = self.inner.ipv4_prefixes(input);
            self
        }
        /// <p>The IPv4 prefixes assigned to the network interface.</p>
        /// <p>You can't specify IPv4 prefixes if you've specified one of the following: a count of IPv4 prefixes, specific private IPv4 addresses, or a count of private IPv4 addresses.</p>
        pub fn set_ipv4_prefixes(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Ipv4PrefixSpecificationRequest>>,
        ) -> Self {
            self.inner = self.inner.set_ipv4_prefixes(input);
            self
        }
        /// <p>The number of IPv4 prefixes that Amazon Web Services automatically assigns to the network interface.</p>
        /// <p>You can't specify a count of IPv4 prefixes if you've specified one of the following: specific IPv4 prefixes, specific private IPv4 addresses, or a count of private IPv4 addresses.</p>
        pub fn ipv4_prefix_count(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv4_prefix_count(input);
            self
        }
        /// <p>The number of IPv4 prefixes that Amazon Web Services automatically assigns to the network interface.</p>
        /// <p>You can't specify a count of IPv4 prefixes if you've specified one of the following: specific IPv4 prefixes, specific private IPv4 addresses, or a count of private IPv4 addresses.</p>
        pub fn set_ipv4_prefix_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv4_prefix_count(input);
            self
        }
        /// Appends an item to `Ipv6Prefixes`.
        ///
        /// To override the contents of this collection use [`set_ipv6_prefixes`](Self::set_ipv6_prefixes).
        ///
        /// <p>The IPv6 prefixes assigned to the network interface.</p>
        /// <p>You can't specify IPv6 prefixes if you've specified one of the following: a count of IPv6 prefixes, specific IPv6 addresses, or a count of IPv6 addresses.</p>
        pub fn ipv6_prefixes(
            mut self,
            input: crate::model::Ipv6PrefixSpecificationRequest,
        ) -> Self {
            self.inner = self.inner.ipv6_prefixes(input);
            self
        }
        /// <p>The IPv6 prefixes assigned to the network interface.</p>
        /// <p>You can't specify IPv6 prefixes if you've specified one of the following: a count of IPv6 prefixes, specific IPv6 addresses, or a count of IPv6 addresses.</p>
        pub fn set_ipv6_prefixes(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Ipv6PrefixSpecificationRequest>>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_prefixes(input);
            self
        }
        /// <p>The number of IPv6 prefixes that Amazon Web Services automatically assigns to the network interface.</p>
        /// <p>You can't specify a count of IPv6 prefixes if you've specified one of the following: specific IPv6 prefixes, specific IPv6 addresses, or a count of IPv6 addresses.</p>
        pub fn ipv6_prefix_count(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv6_prefix_count(input);
            self
        }
        /// <p>The number of IPv6 prefixes that Amazon Web Services automatically assigns to the network interface.</p>
        /// <p>You can't specify a count of IPv6 prefixes if you've specified one of the following: specific IPv6 prefixes, specific IPv6 addresses, or a count of IPv6 addresses.</p>
        pub fn set_ipv6_prefix_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv6_prefix_count(input);
            self
        }
        /// <p>The type of network interface. The default is <code>interface</code>.</p>
        /// <p>The only supported values are <code>efa</code> and <code>trunk</code>.</p>
        pub fn interface_type(mut self, input: crate::model::NetworkInterfaceCreationType) -> Self {
            self.inner = self.inner.interface_type(input);
            self
        }
        /// <p>The type of network interface. The default is <code>interface</code>.</p>
        /// <p>The only supported values are <code>efa</code> and <code>trunk</code>.</p>
        pub fn set_interface_type(
            mut self,
            input: std::option::Option<crate::model::NetworkInterfaceCreationType>,
        ) -> Self {
            self.inner = self.inner.set_interface_type(input);
            self
        }
        /// <p>The ID of the subnet to associate with the network interface.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The ID of the subnet to associate with the network interface.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the new network interface.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the new network interface.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateNetworkInterfacePermission`.
    ///
    /// <p>Grants an Amazon Web Services-authorized account permission to attach the specified network interface to an instance in their account.</p>
    /// <p>You can grant permission to a single Amazon Web Services account only, and only one account at a time.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateNetworkInterfacePermission {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_network_interface_permission_input::Builder,
    }
    impl CreateNetworkInterfacePermission {
        /// Creates a new `CreateNetworkInterfacePermission`.
        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::CreateNetworkInterfacePermission,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkInterfacePermissionError>,
        > {
            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::CreateNetworkInterfacePermissionOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateNetworkInterfacePermissionError>,
        > {
            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 network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>The Amazon Web Services account ID.</p>
        pub fn aws_account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.aws_account_id(input.into());
            self
        }
        /// <p>The Amazon Web Services account ID.</p>
        pub fn set_aws_account_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_aws_account_id(input);
            self
        }
        /// <p>The Amazon Web Service. Currently not supported.</p>
        pub fn aws_service(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.aws_service(input.into());
            self
        }
        /// <p>The Amazon Web Service. Currently not supported.</p>
        pub fn set_aws_service(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_aws_service(input);
            self
        }
        /// <p>The type of permission to grant.</p>
        pub fn permission(mut self, input: crate::model::InterfacePermissionType) -> Self {
            self.inner = self.inner.permission(input);
            self
        }
        /// <p>The type of permission to grant.</p>
        pub fn set_permission(
            mut self,
            input: std::option::Option<crate::model::InterfacePermissionType>,
        ) -> Self {
            self.inner = self.inner.set_permission(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreatePlacementGroup`.
    ///
    /// <p>Creates a placement group in which to launch instances. The strategy of the placement group determines how the instances are organized within the group. </p>
    /// <p>A <code>cluster</code> placement group is a logical grouping of instances within a single Availability Zone that benefit from low network latency, high network throughput. A <code>spread</code> placement group places instances on distinct hardware. A <code>partition</code> placement group places groups of instances in different partitions, where instances in one partition do not share the same hardware with instances in another partition.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html">Placement groups</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreatePlacementGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_placement_group_input::Builder,
    }
    impl CreatePlacementGroup {
        /// Creates a new `CreatePlacementGroup`.
        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::CreatePlacementGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreatePlacementGroupError>,
        > {
            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::CreatePlacementGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::CreatePlacementGroupError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A name for the placement group. Must be unique within the scope of your account for the Region.</p>
        /// <p>Constraints: Up to 255 ASCII characters</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>A name for the placement group. Must be unique within the scope of your account for the Region.</p>
        /// <p>Constraints: Up to 255 ASCII characters</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// <p>The placement strategy.</p>
        pub fn strategy(mut self, input: crate::model::PlacementStrategy) -> Self {
            self.inner = self.inner.strategy(input);
            self
        }
        /// <p>The placement strategy.</p>
        pub fn set_strategy(
            mut self,
            input: std::option::Option<crate::model::PlacementStrategy>,
        ) -> Self {
            self.inner = self.inner.set_strategy(input);
            self
        }
        /// <p>The number of partitions. Valid only when <b>Strategy</b> is set to <code>partition</code>.</p>
        pub fn partition_count(mut self, input: i32) -> Self {
            self.inner = self.inner.partition_count(input);
            self
        }
        /// <p>The number of partitions. Valid only when <b>Strategy</b> is set to <code>partition</code>.</p>
        pub fn set_partition_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_partition_count(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the new placement group.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the new placement group.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Determines how placement groups spread instances. </p>
        /// <ul>
        /// <li> <p>Host – You can use <code>host</code> only with Outpost placement groups.</p> </li>
        /// <li> <p>Rack – No usage restrictions.</p> </li>
        /// </ul>
        pub fn spread_level(mut self, input: crate::model::SpreadLevel) -> Self {
            self.inner = self.inner.spread_level(input);
            self
        }
        /// <p>Determines how placement groups spread instances. </p>
        /// <ul>
        /// <li> <p>Host – You can use <code>host</code> only with Outpost placement groups.</p> </li>
        /// <li> <p>Rack – No usage restrictions.</p> </li>
        /// </ul>
        pub fn set_spread_level(
            mut self,
            input: std::option::Option<crate::model::SpreadLevel>,
        ) -> Self {
            self.inner = self.inner.set_spread_level(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreatePublicIpv4Pool`.
    ///
    /// <p>Creates a public IPv4 address pool. A public IPv4 pool is an EC2 IP address pool required for the public IPv4 CIDRs that you own and bring to Amazon Web Services to manage with IPAM. IPv6 addresses you bring to Amazon Web Services, however, use IPAM pools only. To monitor the status of pool creation, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribePublicIpv4Pools.html">DescribePublicIpv4Pools</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreatePublicIpv4Pool {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_public_ipv4_pool_input::Builder,
    }
    impl CreatePublicIpv4Pool {
        /// Creates a new `CreatePublicIpv4Pool`.
        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::CreatePublicIpv4Pool,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreatePublicIpv4PoolError>,
        > {
            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::CreatePublicIpv4PoolOutput,
            aws_smithy_http::result::SdkError<crate::error::CreatePublicIpv4PoolError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateReplaceRootVolumeTask`.
    ///
    /// <p>Replaces the EBS-backed root volume for a <code>running</code> instance with a new volume that is restored to the original root volume's launch state, that is restored to a specific snapshot taken from the original root volume, or that is restored from an AMI that has the same key characteristics as that of the instance.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html">Replace a root volume</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateReplaceRootVolumeTask {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_replace_root_volume_task_input::Builder,
    }
    impl CreateReplaceRootVolumeTask {
        /// Creates a new `CreateReplaceRootVolumeTask`.
        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::CreateReplaceRootVolumeTask,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateReplaceRootVolumeTaskError>,
        > {
            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::CreateReplaceRootVolumeTaskOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateReplaceRootVolumeTaskError>,
        > {
            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 instance for which to replace the root volume.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance for which to replace the root volume.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The ID of the snapshot from which to restore the replacement root volume. The specified snapshot must be a snapshot that you previously created from the original root volume.</p>
        /// <p>If you want to restore the replacement root volume to the initial launch state, or if you want to restore the replacement root volume from an AMI, omit this parameter.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The ID of the snapshot from which to restore the replacement root volume. The specified snapshot must be a snapshot that you previously created from the original root volume.</p>
        /// <p>If you want to restore the replacement root volume to the initial launch state, or if you want to restore the replacement root volume from an AMI, omit this parameter.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the root volume replacement task.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the root volume replacement task.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>The ID of the AMI to use to restore the root volume. The specified AMI must have the same product code, billing information, architecture type, and virtualization type as that of the instance.</p>
        /// <p>If you want to restore the replacement volume from a specific snapshot, or if you want to restore it to its launch state, omit this parameter.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI to use to restore the root volume. The specified AMI must have the same product code, billing information, architecture type, and virtualization type as that of the instance.</p>
        /// <p>If you want to restore the replacement volume from a specific snapshot, or if you want to restore it to its launch state, omit this parameter.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>Indicates whether to automatically delete the original root volume after the root volume replacement task completes. To delete the original root volume, specify <code>true</code>. If you choose to keep the original root volume after the replacement task completes, you must manually delete it when you no longer need it.</p>
        pub fn delete_replaced_root_volume(mut self, input: bool) -> Self {
            self.inner = self.inner.delete_replaced_root_volume(input);
            self
        }
        /// <p>Indicates whether to automatically delete the original root volume after the root volume replacement task completes. To delete the original root volume, specify <code>true</code>. If you choose to keep the original root volume after the replacement task completes, you must manually delete it when you no longer need it.</p>
        pub fn set_delete_replaced_root_volume(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_delete_replaced_root_volume(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateReservedInstancesListing`.
    ///
    /// <p>Creates a listing for Amazon EC2 Standard Reserved Instances to be sold in the Reserved Instance Marketplace. You can submit one Standard Reserved Instance listing at a time. To get a list of your Standard Reserved Instances, you can use the <code>DescribeReservedInstances</code> operation.</p> <note>
    /// <p>Only Standard Reserved Instances can be sold in the Reserved Instance Marketplace. Convertible Reserved Instances cannot be sold.</p>
    /// </note>
    /// <p>The Reserved Instance Marketplace matches sellers who want to resell Standard Reserved Instance capacity that they no longer need with buyers who want to purchase additional capacity. Reserved Instances bought and sold through the Reserved Instance Marketplace work like any other Reserved Instances.</p>
    /// <p>To sell your Standard Reserved Instances, you must first register as a seller in the Reserved Instance Marketplace. After completing the registration process, you can create a Reserved Instance Marketplace listing of some or all of your Standard Reserved Instances, and specify the upfront price to receive for them. Your Standard Reserved Instance listings then become available for purchase. To view the details of your Standard Reserved Instance listing, you can use the <code>DescribeReservedInstancesListings</code> operation.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html">Reserved Instance Marketplace</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateReservedInstancesListing {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_reserved_instances_listing_input::Builder,
    }
    impl CreateReservedInstancesListing {
        /// Creates a new `CreateReservedInstancesListing`.
        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::CreateReservedInstancesListing,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateReservedInstancesListingError>,
        > {
            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::CreateReservedInstancesListingOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateReservedInstancesListingError>,
        > {
            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>Unique, case-sensitive identifier you provide to ensure idempotency of your listings. This helps avoid duplicate listings. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure idempotency of your listings. This helps avoid duplicate listings. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>The number of instances that are a part of a Reserved Instance account to be listed in the Reserved Instance Marketplace. This number should be less than or equal to the instance count associated with the Reserved Instance ID specified in this call.</p>
        pub fn instance_count(mut self, input: i32) -> Self {
            self.inner = self.inner.instance_count(input);
            self
        }
        /// <p>The number of instances that are a part of a Reserved Instance account to be listed in the Reserved Instance Marketplace. This number should be less than or equal to the instance count associated with the Reserved Instance ID specified in this call.</p>
        pub fn set_instance_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_instance_count(input);
            self
        }
        /// Appends an item to `PriceSchedules`.
        ///
        /// To override the contents of this collection use [`set_price_schedules`](Self::set_price_schedules).
        ///
        /// <p>A list specifying the price of the Standard Reserved Instance for each month remaining in the Reserved Instance term.</p>
        pub fn price_schedules(mut self, input: crate::model::PriceScheduleSpecification) -> Self {
            self.inner = self.inner.price_schedules(input);
            self
        }
        /// <p>A list specifying the price of the Standard Reserved Instance for each month remaining in the Reserved Instance term.</p>
        pub fn set_price_schedules(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::PriceScheduleSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_price_schedules(input);
            self
        }
        /// <p>The ID of the active Standard Reserved Instance.</p>
        pub fn reserved_instances_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.reserved_instances_id(input.into());
            self
        }
        /// <p>The ID of the active Standard Reserved Instance.</p>
        pub fn set_reserved_instances_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateRestoreImageTask`.
    ///
    /// <p>Starts a task that restores an AMI from an Amazon S3 object that was previously created by using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html">CreateStoreImageTask</a>.</p>
    /// <p>To use this API, you must have the required permissions. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions">Permissions for storing and restoring AMIs using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html">Store and restore an AMI using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateRestoreImageTask {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_restore_image_task_input::Builder,
    }
    impl CreateRestoreImageTask {
        /// Creates a new `CreateRestoreImageTask`.
        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::CreateRestoreImageTask,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateRestoreImageTaskError>,
        > {
            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::CreateRestoreImageTaskOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateRestoreImageTaskError>,
        > {
            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 Amazon S3 bucket that contains the stored AMI object.</p>
        pub fn bucket(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.bucket(input.into());
            self
        }
        /// <p>The name of the Amazon S3 bucket that contains the stored AMI object.</p>
        pub fn set_bucket(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_bucket(input);
            self
        }
        /// <p>The name of the stored AMI object in the bucket.</p>
        pub fn object_key(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.object_key(input.into());
            self
        }
        /// <p>The name of the stored AMI object in the bucket.</p>
        pub fn set_object_key(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_object_key(input);
            self
        }
        /// <p>The name for the restored AMI. The name must be unique for AMIs in the Region for this account. If you do not provide a name, the new AMI gets the same name as the original AMI.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>The name for the restored AMI. The name must be unique for AMIs in the Region for this account. If you do not provide a name, the new AMI gets the same name as the original AMI.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the AMI and snapshots on restoration. You can tag the AMI, the snapshots, or both.</p>
        /// <ul>
        /// <li> <p>To tag the AMI, the value for <code>ResourceType</code> must be <code>image</code>.</p> </li>
        /// <li> <p>To tag the snapshots, the value for <code>ResourceType</code> must be <code>snapshot</code>. The same tag is applied to all of the snapshots that are created.</p> </li>
        /// </ul>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the AMI and snapshots on restoration. You can tag the AMI, the snapshots, or both.</p>
        /// <ul>
        /// <li> <p>To tag the AMI, the value for <code>ResourceType</code> must be <code>image</code>.</p> </li>
        /// <li> <p>To tag the snapshots, the value for <code>ResourceType</code> must be <code>snapshot</code>. The same tag is applied to all of the snapshots that are created.</p> </li>
        /// </ul>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateRoute`.
    ///
    /// <p>Creates a route in a route table within a VPC.</p>
    /// <p>You must specify either a destination CIDR block or a prefix list ID. You must also specify exactly one of the resources from the parameter list.</p>
    /// <p>When determining how to route traffic, we use the route with the most specific match. For example, traffic is destined for the IPv4 address <code>192.0.2.3</code>, and the route table includes the following two IPv4 routes:</p>
    /// <ul>
    /// <li> <p> <code>192.0.2.0/24</code> (goes to some target A)</p> </li>
    /// <li> <p> <code>192.0.2.0/28</code> (goes to some target B)</p> </li>
    /// </ul>
    /// <p>Both routes apply to the traffic destined for <code>192.0.2.3</code>. However, the second route in the list covers a smaller number of IP addresses and is therefore more specific, so we use that route to determine where to target the traffic.</p>
    /// <p>For more information about route tables, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html">Route tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_route_input::Builder,
    }
    impl CreateRoute {
        /// Creates a new `CreateRoute`.
        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::CreateRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateRouteError>,
        > {
            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::CreateRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateRouteError>,
        > {
            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 IPv4 CIDR address block used for the destination match. Routing decisions are based on the most specific match. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The IPv4 CIDR address block used for the destination match. Routing decisions are based on the most specific match. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The IPv6 CIDR block used for the destination match. Routing decisions are based on the most specific match.</p>
        pub fn destination_ipv6_cidr_block(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.destination_ipv6_cidr_block(input.into());
            self
        }
        /// <p>The IPv6 CIDR block used for the destination match. Routing decisions are based on the most specific match.</p>
        pub fn set_destination_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_ipv6_cidr_block(input);
            self
        }
        /// <p>The ID of a prefix list used for the destination match.</p>
        pub fn destination_prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_prefix_list_id(input.into());
            self
        }
        /// <p>The ID of a prefix list used for the destination match.</p>
        pub fn set_destination_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_prefix_list_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints only.</p>
        pub fn vpc_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_endpoint_id(input.into());
            self
        }
        /// <p>The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints only.</p>
        pub fn set_vpc_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_id(input);
            self
        }
        /// <p>[IPv6 traffic only] The ID of an egress-only internet gateway.</p>
        pub fn egress_only_internet_gateway_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.egress_only_internet_gateway_id(input.into());
            self
        }
        /// <p>[IPv6 traffic only] The ID of an egress-only internet gateway.</p>
        pub fn set_egress_only_internet_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_egress_only_internet_gateway_id(input);
            self
        }
        /// <p>The ID of an internet gateway or virtual private gateway attached to your VPC.</p>
        pub fn gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.gateway_id(input.into());
            self
        }
        /// <p>The ID of an internet gateway or virtual private gateway attached to your VPC.</p>
        pub fn set_gateway_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_gateway_id(input);
            self
        }
        /// <p>The ID of a NAT instance in your VPC. The operation fails if you specify an instance ID unless exactly one network interface is attached.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of a NAT instance in your VPC. The operation fails if you specify an instance ID unless exactly one network interface is attached.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>[IPv4 traffic only] The ID of a NAT gateway.</p>
        pub fn nat_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.nat_gateway_id(input.into());
            self
        }
        /// <p>[IPv4 traffic only] The ID of a NAT gateway.</p>
        pub fn set_nat_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_nat_gateway_id(input);
            self
        }
        /// <p>The ID of a transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of a transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>The ID of the local gateway.</p>
        pub fn local_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.local_gateway_id(input.into());
            self
        }
        /// <p>The ID of the local gateway.</p>
        pub fn set_local_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_id(input);
            self
        }
        /// <p>The ID of the carrier gateway.</p>
        /// <p>You can only use this option when the VPC contains a subnet which is associated with a Wavelength Zone.</p>
        pub fn carrier_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.carrier_gateway_id(input.into());
            self
        }
        /// <p>The ID of the carrier gateway.</p>
        /// <p>You can only use this option when the VPC contains a subnet which is associated with a Wavelength Zone.</p>
        pub fn set_carrier_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_carrier_gateway_id(input);
            self
        }
        /// <p>The ID of a network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of a network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>The ID of the route table for the route.</p>
        pub fn route_table_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table for the route.</p>
        pub fn set_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_route_table_id(input);
            self
        }
        /// <p>The ID of a VPC peering connection.</p>
        pub fn vpc_peering_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_peering_connection_id(input.into());
            self
        }
        /// <p>The ID of a VPC peering connection.</p>
        pub fn set_vpc_peering_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_peering_connection_id(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the core network.</p>
        pub fn core_network_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.core_network_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the core network.</p>
        pub fn set_core_network_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_core_network_arn(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateRouteTable`.
    ///
    /// <p>Creates a route table for the specified VPC. After you create a route table, you can add routes and associate the table with a subnet.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html">Route tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_route_table_input::Builder,
    }
    impl CreateRouteTable {
        /// Creates a new `CreateRouteTable`.
        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::CreateRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateRouteTableError>,
        > {
            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::CreateRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateRouteTableError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the route table.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the route table.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateSecurityGroup`.
    ///
    /// <p>Creates a security group.</p>
    /// <p>A security group acts as a virtual firewall for your instance to control inbound and outbound traffic. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">Amazon EC2 security groups</a> in the <i>Amazon Elastic Compute Cloud User Guide</i> and <a href="https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html">Security groups for your VPC</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    /// <p>When you create a security group, you specify a friendly name of your choice. You can have a security group for use in EC2-Classic with the same name as a security group for use in a VPC. However, you can't have two security groups for use in EC2-Classic with the same name or two security groups for use in a VPC with the same name.</p>
    /// <p>You have a default security group for use in EC2-Classic and a default security group for use in your VPC. If you don't specify a security group when you launch an instance, the instance is launched into the appropriate default security group. A default security group includes a default rule that grants instances unrestricted network access to each other.</p>
    /// <p>You can add or remove rules from your security groups using <code>AuthorizeSecurityGroupIngress</code>, <code>AuthorizeSecurityGroupEgress</code>, <code>RevokeSecurityGroupIngress</code>, and <code>RevokeSecurityGroupEgress</code>.</p>
    /// <p>For more information about VPC security group limits, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html">Amazon VPC Limits</a>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateSecurityGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_security_group_input::Builder,
    }
    impl CreateSecurityGroup {
        /// Creates a new `CreateSecurityGroup`.
        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::CreateSecurityGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateSecurityGroupError>,
        > {
            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::CreateSecurityGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateSecurityGroupError>,
        > {
            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>A description for the security group. This is informational only.</p>
        /// <p>Constraints: Up to 255 characters in length</p>
        /// <p>Constraints for EC2-Classic: ASCII characters</p>
        /// <p>Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&amp;;{}!$*</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the security group. This is informational only.</p>
        /// <p>Constraints: Up to 255 characters in length</p>
        /// <p>Constraints for EC2-Classic: ASCII characters</p>
        /// <p>Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&amp;;{}!$*</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 name of the security group.</p>
        /// <p>Constraints: Up to 255 characters in length. Cannot start with <code>sg-</code>.</p>
        /// <p>Constraints for EC2-Classic: ASCII characters</p>
        /// <p>Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&amp;;{}!$*</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>The name of the security group.</p>
        /// <p>Constraints: Up to 255 characters in length. Cannot start with <code>sg-</code>.</p>
        /// <p>Constraints for EC2-Classic: ASCII characters</p>
        /// <p>Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&amp;;{}!$*</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// <p>[EC2-VPC] The ID of the VPC. Required for EC2-VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>[EC2-VPC] The ID of the VPC. Required for EC2-VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the security group.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the security group.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateSnapshot`.
    ///
    /// <p>Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance.</p>
    /// <p>You can create snapshots of volumes in a Region and volumes on an Outpost. If you create a snapshot of a volume in a Region, the snapshot must be stored in the same Region as the volume. If you create a snapshot of a volume on an Outpost, the snapshot can be stored on the same Outpost as the volume, or in the Region for that Outpost.</p>
    /// <p>When a snapshot is created, any Amazon Web Services Marketplace product codes that are associated with the source volume are propagated to the snapshot.</p>
    /// <p>You can take a snapshot of an attached volume that is in use. However, snapshots only capture data that has been written to your Amazon EBS volume at the time the snapshot command is issued; this might exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the volume long enough to take a snapshot, your snapshot should be complete. However, if you cannot pause all file writes to the volume, you should unmount the volume from within the instance, issue the snapshot command, and then remount the volume to ensure a consistent and complete snapshot. You may remount and use your volume while the snapshot status is <code>pending</code>.</p>
    /// <p>To create a snapshot for Amazon EBS volumes that serve as root devices, you should stop the instance before taking the snapshot.</p>
    /// <p>Snapshots that are taken from encrypted volumes are automatically encrypted. Volumes that are created from encrypted snapshots are also automatically encrypted. Your encrypted volumes and any associated snapshots always remain protected.</p>
    /// <p>You can tag your snapshots during creation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html">Tag your Amazon EC2 resources</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html">Amazon Elastic Block Store</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateSnapshot {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_snapshot_input::Builder,
    }
    impl CreateSnapshot {
        /// Creates a new `CreateSnapshot`.
        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::CreateSnapshot,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateSnapshotError>,
        > {
            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::CreateSnapshotOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateSnapshotError>,
        > {
            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>A description for the snapshot.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the snapshot.</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 Amazon Resource Name (ARN) of the Outpost on which to create a local snapshot.</p>
        /// <ul>
        /// <li> <p>To create a snapshot of a volume in a Region, omit this parameter. The snapshot is created in the same Region as the volume.</p> </li>
        /// <li> <p>To create a snapshot of a volume on an Outpost and store the snapshot in the Region, omit this parameter. The snapshot is created in the Region for the Outpost.</p> </li>
        /// <li> <p>To create a snapshot of a volume on an Outpost and store the snapshot on an Outpost, specify the ARN of the destination Outpost. The snapshot must be created on the same Outpost as the volume.</p> </li>
        /// </ul>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-snapshot">Create local snapshots from volumes on an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.outpost_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost on which to create a local snapshot.</p>
        /// <ul>
        /// <li> <p>To create a snapshot of a volume in a Region, omit this parameter. The snapshot is created in the same Region as the volume.</p> </li>
        /// <li> <p>To create a snapshot of a volume on an Outpost and store the snapshot in the Region, omit this parameter. The snapshot is created in the Region for the Outpost.</p> </li>
        /// <li> <p>To create a snapshot of a volume on an Outpost and store the snapshot on an Outpost, specify the ARN of the destination Outpost. The snapshot must be created on the same Outpost as the volume.</p> </li>
        /// </ul>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-snapshot">Create local snapshots from volumes on an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn set_outpost_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_outpost_arn(input);
            self
        }
        /// <p>The ID of the Amazon EBS volume.</p>
        pub fn volume_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_id(input.into());
            self
        }
        /// <p>The ID of the Amazon EBS volume.</p>
        pub fn set_volume_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_volume_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the snapshot during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the snapshot during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateSnapshots`.
    ///
    /// <p>Creates crash-consistent snapshots of multiple EBS volumes and stores the data in S3. Volumes are chosen by specifying an instance. Any attached volumes will produce one snapshot each that is crash-consistent across the instance.</p>
    /// <p>You can include all of the volumes currently attached to the instance, or you can exclude the root volume or specific data (non-root) volumes from the multi-volume snapshot set.</p>
    /// <p>You can create multi-volume snapshots of instances in a Region and instances on an Outpost. If you create snapshots from an instance in a Region, the snapshots must be stored in the same Region as the instance. If you create snapshots from an instance on an Outpost, the snapshots can be stored on the same Outpost as the instance, or in the Region for that Outpost.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateSnapshots {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_snapshots_input::Builder,
    }
    impl CreateSnapshots {
        /// Creates a new `CreateSnapshots`.
        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::CreateSnapshots,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateSnapshotsError>,
        > {
            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::CreateSnapshotsOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateSnapshotsError>,
        > {
            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> A description propagated to every snapshot specified by the instance.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p> A description propagated to every snapshot specified by the instance.</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 instance to specify which volumes should be included in the snapshots.</p>
        pub fn instance_specification(
            mut self,
            input: crate::model::InstanceSpecification,
        ) -> Self {
            self.inner = self.inner.instance_specification(input);
            self
        }
        /// <p>The instance to specify which volumes should be included in the snapshots.</p>
        pub fn set_instance_specification(
            mut self,
            input: std::option::Option<crate::model::InstanceSpecification>,
        ) -> Self {
            self.inner = self.inner.set_instance_specification(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost on which to create the local snapshots.</p>
        /// <ul>
        /// <li> <p>To create snapshots from an instance in a Region, omit this parameter. The snapshots are created in the same Region as the instance.</p> </li>
        /// <li> <p>To create snapshots from an instance on an Outpost and store the snapshots in the Region, omit this parameter. The snapshots are created in the Region for the Outpost.</p> </li>
        /// <li> <p>To create snapshots from an instance on an Outpost and store the snapshots on an Outpost, specify the ARN of the destination Outpost. The snapshots must be created on the same Outpost as the instance.</p> </li>
        /// </ul>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-multivol-snapshot"> Create multi-volume local snapshots from instances on an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.outpost_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost on which to create the local snapshots.</p>
        /// <ul>
        /// <li> <p>To create snapshots from an instance in a Region, omit this parameter. The snapshots are created in the same Region as the instance.</p> </li>
        /// <li> <p>To create snapshots from an instance on an Outpost and store the snapshots in the Region, omit this parameter. The snapshots are created in the Region for the Outpost.</p> </li>
        /// <li> <p>To create snapshots from an instance on an Outpost and store the snapshots on an Outpost, specify the ARN of the destination Outpost. The snapshots must be created on the same Outpost as the instance.</p> </li>
        /// </ul>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-multivol-snapshot"> Create multi-volume local snapshots from instances on an Outpost</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn set_outpost_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_outpost_arn(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>Tags to apply to every snapshot specified by the instance.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>Tags to apply to every snapshot specified by the instance.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Copies the tags from the specified volume to corresponding snapshot.</p>
        pub fn copy_tags_from_source(mut self, input: crate::model::CopyTagsFromSource) -> Self {
            self.inner = self.inner.copy_tags_from_source(input);
            self
        }
        /// <p>Copies the tags from the specified volume to corresponding snapshot.</p>
        pub fn set_copy_tags_from_source(
            mut self,
            input: std::option::Option<crate::model::CopyTagsFromSource>,
        ) -> Self {
            self.inner = self.inner.set_copy_tags_from_source(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateSpotDatafeedSubscription`.
    ///
    /// <p>Creates a data feed for Spot Instances, enabling you to view Spot Instance usage logs. You can create one data feed per Amazon Web Services account. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html">Spot Instance data feed</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateSpotDatafeedSubscription {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_spot_datafeed_subscription_input::Builder,
    }
    impl CreateSpotDatafeedSubscription {
        /// Creates a new `CreateSpotDatafeedSubscription`.
        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::CreateSpotDatafeedSubscription,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateSpotDatafeedSubscriptionError>,
        > {
            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::CreateSpotDatafeedSubscriptionOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateSpotDatafeedSubscriptionError>,
        > {
            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 Amazon S3 bucket in which to store the Spot Instance data feed. For more information about bucket names, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules">Rules for bucket naming</a> in the <i>Amazon S3 Developer Guide</i>.</p>
        pub fn bucket(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.bucket(input.into());
            self
        }
        /// <p>The name of the Amazon S3 bucket in which to store the Spot Instance data feed. For more information about bucket names, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules">Rules for bucket naming</a> in the <i>Amazon S3 Developer Guide</i>.</p>
        pub fn set_bucket(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_bucket(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The prefix for the data feed file names.</p>
        pub fn prefix(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix(input.into());
            self
        }
        /// <p>The prefix for the data feed file names.</p>
        pub fn set_prefix(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_prefix(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateStoreImageTask`.
    ///
    /// <p>Stores an AMI as a single object in an Amazon S3 bucket.</p>
    /// <p>To use this API, you must have the required permissions. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions">Permissions for storing and restoring AMIs using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html">Store and restore an AMI using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateStoreImageTask {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_store_image_task_input::Builder,
    }
    impl CreateStoreImageTask {
        /// Creates a new `CreateStoreImageTask`.
        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::CreateStoreImageTask,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateStoreImageTaskError>,
        > {
            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::CreateStoreImageTaskOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateStoreImageTaskError>,
        > {
            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 AMI.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>The name of the Amazon S3 bucket in which the AMI object will be stored. The bucket must be in the Region in which the request is being made. The AMI object appears in the bucket only after the upload task has completed. </p>
        pub fn bucket(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.bucket(input.into());
            self
        }
        /// <p>The name of the Amazon S3 bucket in which the AMI object will be stored. The bucket must be in the Region in which the request is being made. The AMI object appears in the bucket only after the upload task has completed. </p>
        pub fn set_bucket(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_bucket(input);
            self
        }
        /// Appends an item to `S3ObjectTags`.
        ///
        /// To override the contents of this collection use [`set_s3_object_tags`](Self::set_s3_object_tags).
        ///
        /// <p>The tags to apply to the AMI object that will be stored in the Amazon S3 bucket. </p>
        pub fn s3_object_tags(mut self, input: crate::model::S3ObjectTag) -> Self {
            self.inner = self.inner.s3_object_tags(input);
            self
        }
        /// <p>The tags to apply to the AMI object that will be stored in the Amazon S3 bucket. </p>
        pub fn set_s3_object_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::S3ObjectTag>>,
        ) -> Self {
            self.inner = self.inner.set_s3_object_tags(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateSubnet`.
    ///
    /// <p>Creates a subnet in the specified VPC. For an IPv4 only subnet, specify an IPv4 CIDR block. If the VPC has an IPv6 CIDR block, you can create an IPv6 only subnet or a dual stack subnet instead. For an IPv6 only subnet, specify an IPv6 CIDR block. For a dual stack subnet, specify both an IPv4 CIDR block and an IPv6 CIDR block.</p>
    /// <p>A subnet CIDR block must not overlap the CIDR block of an existing subnet in the VPC. After you create a subnet, you can't change its CIDR block.</p>
    /// <p>The allowed size for an IPv4 subnet is between a /28 netmask (16 IP addresses) and a /16 netmask (65,536 IP addresses). Amazon Web Services reserves both the first four and the last IPv4 address in each subnet's CIDR block. They're not available for your use.</p>
    /// <p>If you've associated an IPv6 CIDR block with your VPC, you can associate an IPv6 CIDR block with a subnet when you create it. The allowed block size for an IPv6 subnet is a /64 netmask.</p>
    /// <p>If you add more than one subnet to a VPC, they're set up in a star topology with a logical router in the middle.</p>
    /// <p>When you stop an instance in a subnet, it retains its private IPv4 address. It's therefore possible to have a subnet with no running instances (they're all stopped), but no remaining IP addresses available.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html">Subnets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateSubnet {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_subnet_input::Builder,
    }
    impl CreateSubnet {
        /// Creates a new `CreateSubnet`.
        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::CreateSubnet,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateSubnetError>,
        > {
            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::CreateSubnetOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateSubnetError>,
        > {
            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 `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the subnet.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the subnet.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>The Availability Zone or Local Zone for the subnet.</p>
        /// <p>Default: Amazon Web Services selects one for you. If you create more than one subnet in your VPC, we do not necessarily select a different zone for each subnet.</p>
        /// <p>To create a subnet in a Local Zone, set this value to the Local Zone ID, for example <code>us-west-2-lax-1a</code>. For information about the Regions that support Local Zones, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions">Available Regions</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>To create a subnet in an Outpost, set this value to the Availability Zone for the Outpost and specify the Outpost ARN.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>The Availability Zone or Local Zone for the subnet.</p>
        /// <p>Default: Amazon Web Services selects one for you. If you create more than one subnet in your VPC, we do not necessarily select a different zone for each subnet.</p>
        /// <p>To create a subnet in a Local Zone, set this value to the Local Zone ID, for example <code>us-west-2-lax-1a</code>. For information about the Regions that support Local Zones, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions">Available Regions</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>To create a subnet in an Outpost, set this value to the Availability Zone for the Outpost and specify the Outpost ARN.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// <p>The AZ ID or the Local Zone ID of the subnet.</p>
        pub fn availability_zone_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone_id(input.into());
            self
        }
        /// <p>The AZ ID or the Local Zone ID of the subnet.</p>
        pub fn set_availability_zone_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone_id(input);
            self
        }
        /// <p>The IPv4 network range for the subnet, in CIDR notation. For example, <code>10.0.0.0/24</code>. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
        /// <p>This parameter is not supported for an IPv6 only subnet.</p>
        pub fn cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_block(input.into());
            self
        }
        /// <p>The IPv4 network range for the subnet, in CIDR notation. For example, <code>10.0.0.0/24</code>. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
        /// <p>This parameter is not supported for an IPv6 only subnet.</p>
        pub fn set_cidr_block(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_block(input);
            self
        }
        /// <p>The IPv6 network range for the subnet, in CIDR notation. The subnet size must use a /64 prefix length.</p>
        /// <p>This parameter is required for an IPv6 only subnet.</p>
        pub fn ipv6_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_cidr_block(input.into());
            self
        }
        /// <p>The IPv6 network range for the subnet, in CIDR notation. The subnet size must use a /64 prefix length.</p>
        /// <p>This parameter is required for an IPv6 only subnet.</p>
        pub fn set_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_cidr_block(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost. If you specify an Outpost ARN, you must also specify the Availability Zone of the Outpost subnet.</p>
        pub fn outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.outpost_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost. If you specify an Outpost ARN, you must also specify the Availability Zone of the Outpost subnet.</p>
        pub fn set_outpost_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_outpost_arn(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether to create an IPv6 only subnet.</p>
        pub fn ipv6_native(mut self, input: bool) -> Self {
            self.inner = self.inner.ipv6_native(input);
            self
        }
        /// <p>Indicates whether to create an IPv6 only subnet.</p>
        pub fn set_ipv6_native(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_ipv6_native(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateSubnetCidrReservation`.
    ///
    /// <p>Creates a subnet CIDR reservation. For information about subnet CIDR reservations, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/subnet-cidr-reservation.html">Subnet CIDR reservations</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateSubnetCidrReservation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_subnet_cidr_reservation_input::Builder,
    }
    impl CreateSubnetCidrReservation {
        /// Creates a new `CreateSubnetCidrReservation`.
        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::CreateSubnetCidrReservation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateSubnetCidrReservationError>,
        > {
            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::CreateSubnetCidrReservationOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateSubnetCidrReservationError>,
        > {
            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 subnet.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The ID of the subnet.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// <p>The IPv4 or IPV6 CIDR range to reserve.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The IPv4 or IPV6 CIDR range to reserve.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>The type of reservation.</p>
        /// <p>The following are valid values:</p>
        /// <ul>
        /// <li> <p> <code>prefix</code>: The Amazon EC2 Prefix Delegation feature assigns the IP addresses to network interfaces that are associated with an instance. For information about Prefix Delegation, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-delegation.html">Prefix Delegation for Amazon EC2 network interfaces</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </li>
        /// <li> <p> <code>explicit</code>: You manually assign the IP addresses to resources that reside in your subnet. </p> </li>
        /// </ul>
        pub fn reservation_type(mut self, input: crate::model::SubnetCidrReservationType) -> Self {
            self.inner = self.inner.reservation_type(input);
            self
        }
        /// <p>The type of reservation.</p>
        /// <p>The following are valid values:</p>
        /// <ul>
        /// <li> <p> <code>prefix</code>: The Amazon EC2 Prefix Delegation feature assigns the IP addresses to network interfaces that are associated with an instance. For information about Prefix Delegation, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-delegation.html">Prefix Delegation for Amazon EC2 network interfaces</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </li>
        /// <li> <p> <code>explicit</code>: You manually assign the IP addresses to resources that reside in your subnet. </p> </li>
        /// </ul>
        pub fn set_reservation_type(
            mut self,
            input: std::option::Option<crate::model::SubnetCidrReservationType>,
        ) -> Self {
            self.inner = self.inner.set_reservation_type(input);
            self
        }
        /// <p>The description to assign to the subnet CIDR reservation.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description to assign to the subnet CIDR reservation.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the subnet CIDR reservation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the subnet CIDR reservation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTags`.
    ///
    /// <p>Adds or overwrites only the specified tags for the specified Amazon EC2 resource or resources. When you specify an existing tag key, the value is overwritten with the new value. Each resource can have a maximum of 50 tags. Each tag consists of a key and optional value. Tag keys must be unique per resource.</p>
    /// <p>For more information about tags, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html">Tag your Amazon EC2 resources</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. For more information about creating IAM policies that control users' access to resources based on tags, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html">Supported resource-level permissions for Amazon EC2 API actions</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTags {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_tags_input::Builder,
    }
    impl CreateTags {
        /// Creates a new `CreateTags`.
        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::CreateTags,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTagsError>,
        > {
            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::CreateTagsOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTagsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Resources`.
        ///
        /// To override the contents of this collection use [`set_resources`](Self::set_resources).
        ///
        /// <p>The IDs of the resources, separated by spaces.</p>
        /// <p>Constraints: Up to 1000 resource IDs. We recommend breaking up this request into smaller batches.</p>
        pub fn resources(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resources(input.into());
            self
        }
        /// <p>The IDs of the resources, separated by spaces.</p>
        /// <p>Constraints: Up to 1000 resource IDs. We recommend breaking up this request into smaller batches.</p>
        pub fn set_resources(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_resources(input);
            self
        }
        /// Appends an item to `Tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>The tags. The <code>value</code> parameter is required, but if you don't want the tag to have a value, specify the parameter with no value, and we set the value to an empty string.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            self.inner = self.inner.tags(input);
            self
        }
        /// <p>The tags. The <code>value</code> parameter is required, but if you don't want the tag to have a value, specify the parameter with no value, and we set the value to an empty string.</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 `CreateTrafficMirrorFilter`.
    ///
    /// <p>Creates a Traffic Mirror filter.</p>
    /// <p>A Traffic Mirror filter is a set of rules that defines the traffic to mirror.</p>
    /// <p>By default, no traffic is mirrored. To mirror traffic, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilterRule.htm">CreateTrafficMirrorFilterRule</a> to add Traffic Mirror rules to the filter. The rules you add define what traffic gets mirrored. You can also use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyTrafficMirrorFilterNetworkServices.html">ModifyTrafficMirrorFilterNetworkServices</a> to mirror supported network services.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTrafficMirrorFilter {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_traffic_mirror_filter_input::Builder,
    }
    impl CreateTrafficMirrorFilter {
        /// Creates a new `CreateTrafficMirrorFilter`.
        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::CreateTrafficMirrorFilter,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTrafficMirrorFilterError>,
        > {
            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::CreateTrafficMirrorFilterOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTrafficMirrorFilterError>,
        > {
            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 description of the Traffic Mirror filter.</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 Traffic Mirror filter.</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 `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to a Traffic Mirror filter.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to a Traffic Mirror filter.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTrafficMirrorFilterRule`.
    ///
    /// <p>Creates a Traffic Mirror filter rule.</p>
    /// <p>A Traffic Mirror rule defines the Traffic Mirror source traffic to mirror.</p>
    /// <p>You need the Traffic Mirror filter ID when you create the rule.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTrafficMirrorFilterRule {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_traffic_mirror_filter_rule_input::Builder,
    }
    impl CreateTrafficMirrorFilterRule {
        /// Creates a new `CreateTrafficMirrorFilterRule`.
        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::CreateTrafficMirrorFilterRule,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTrafficMirrorFilterRuleError>,
        > {
            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::CreateTrafficMirrorFilterRuleOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTrafficMirrorFilterRuleError>,
        > {
            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 filter that this rule is associated with.</p>
        pub fn traffic_mirror_filter_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_filter_id(input.into());
            self
        }
        /// <p>The ID of the filter that this rule is associated with.</p>
        pub fn set_traffic_mirror_filter_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_filter_id(input);
            self
        }
        /// <p>The type of traffic.</p>
        pub fn traffic_direction(mut self, input: crate::model::TrafficDirection) -> Self {
            self.inner = self.inner.traffic_direction(input);
            self
        }
        /// <p>The type of traffic.</p>
        pub fn set_traffic_direction(
            mut self,
            input: std::option::Option<crate::model::TrafficDirection>,
        ) -> Self {
            self.inner = self.inner.set_traffic_direction(input);
            self
        }
        /// <p>The number of the Traffic Mirror rule. This number must be unique for each Traffic Mirror rule in a given direction. The rules are processed in ascending order by rule number.</p>
        pub fn rule_number(mut self, input: i32) -> Self {
            self.inner = self.inner.rule_number(input);
            self
        }
        /// <p>The number of the Traffic Mirror rule. This number must be unique for each Traffic Mirror rule in a given direction. The rules are processed in ascending order by rule number.</p>
        pub fn set_rule_number(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_rule_number(input);
            self
        }
        /// <p>The action to take on the filtered traffic.</p>
        pub fn rule_action(mut self, input: crate::model::TrafficMirrorRuleAction) -> Self {
            self.inner = self.inner.rule_action(input);
            self
        }
        /// <p>The action to take on the filtered traffic.</p>
        pub fn set_rule_action(
            mut self,
            input: std::option::Option<crate::model::TrafficMirrorRuleAction>,
        ) -> Self {
            self.inner = self.inner.set_rule_action(input);
            self
        }
        /// <p>The destination port range.</p>
        pub fn destination_port_range(
            mut self,
            input: crate::model::TrafficMirrorPortRangeRequest,
        ) -> Self {
            self.inner = self.inner.destination_port_range(input);
            self
        }
        /// <p>The destination port range.</p>
        pub fn set_destination_port_range(
            mut self,
            input: std::option::Option<crate::model::TrafficMirrorPortRangeRequest>,
        ) -> Self {
            self.inner = self.inner.set_destination_port_range(input);
            self
        }
        /// <p>The source port range.</p>
        pub fn source_port_range(
            mut self,
            input: crate::model::TrafficMirrorPortRangeRequest,
        ) -> Self {
            self.inner = self.inner.source_port_range(input);
            self
        }
        /// <p>The source port range.</p>
        pub fn set_source_port_range(
            mut self,
            input: std::option::Option<crate::model::TrafficMirrorPortRangeRequest>,
        ) -> Self {
            self.inner = self.inner.set_source_port_range(input);
            self
        }
        /// <p>The protocol, for example UDP, to assign to the Traffic Mirror rule.</p>
        /// <p>For information about the protocol value, see <a href="https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a> on the Internet Assigned Numbers Authority (IANA) website.</p>
        pub fn protocol(mut self, input: i32) -> Self {
            self.inner = self.inner.protocol(input);
            self
        }
        /// <p>The protocol, for example UDP, to assign to the Traffic Mirror rule.</p>
        /// <p>For information about the protocol value, see <a href="https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a> on the Internet Assigned Numbers Authority (IANA) website.</p>
        pub fn set_protocol(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_protocol(input);
            self
        }
        /// <p>The destination CIDR block to assign to the Traffic Mirror rule.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The destination CIDR block to assign to the Traffic Mirror rule.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The source CIDR block to assign to the Traffic Mirror rule.</p>
        pub fn source_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_cidr_block(input.into());
            self
        }
        /// <p>The source CIDR block to assign to the Traffic Mirror rule.</p>
        pub fn set_source_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_cidr_block(input);
            self
        }
        /// <p>The description of the Traffic Mirror rule.</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 Traffic Mirror rule.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTrafficMirrorSession`.
    ///
    /// <p>Creates a Traffic Mirror session.</p>
    /// <p>A Traffic Mirror session actively copies packets from a Traffic Mirror source to a Traffic Mirror target. Create a filter, and then assign it to the session to define a subset of the traffic to mirror, for example all TCP traffic.</p>
    /// <p>The Traffic Mirror source and the Traffic Mirror target (monitoring appliances) can be in the same VPC, or in a different VPC connected via VPC peering or a transit gateway. </p>
    /// <p>By default, no traffic is mirrored. Use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilter.htm">CreateTrafficMirrorFilter</a> to create filter rules that specify the traffic to mirror.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTrafficMirrorSession {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_traffic_mirror_session_input::Builder,
    }
    impl CreateTrafficMirrorSession {
        /// Creates a new `CreateTrafficMirrorSession`.
        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::CreateTrafficMirrorSession,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTrafficMirrorSessionError>,
        > {
            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::CreateTrafficMirrorSessionOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTrafficMirrorSessionError>,
        > {
            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 source network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the source network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>The ID of the Traffic Mirror target.</p>
        pub fn traffic_mirror_target_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_target_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror target.</p>
        pub fn set_traffic_mirror_target_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_target_id(input);
            self
        }
        /// <p>The ID of the Traffic Mirror filter.</p>
        pub fn traffic_mirror_filter_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_filter_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror filter.</p>
        pub fn set_traffic_mirror_filter_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_filter_id(input);
            self
        }
        /// <p>The number of bytes in each packet to mirror. These are bytes after the VXLAN header. Do not specify this parameter when you want to mirror the entire packet. To mirror a subset of the packet, set this to the length (in bytes) that you want to mirror. For example, if you set this value to 100, then the first 100 bytes that meet the filter criteria are copied to the target.</p>
        /// <p>If you do not want to mirror the entire packet, use the <code>PacketLength</code> parameter to specify the number of bytes in each packet to mirror.</p>
        pub fn packet_length(mut self, input: i32) -> Self {
            self.inner = self.inner.packet_length(input);
            self
        }
        /// <p>The number of bytes in each packet to mirror. These are bytes after the VXLAN header. Do not specify this parameter when you want to mirror the entire packet. To mirror a subset of the packet, set this to the length (in bytes) that you want to mirror. For example, if you set this value to 100, then the first 100 bytes that meet the filter criteria are copied to the target.</p>
        /// <p>If you do not want to mirror the entire packet, use the <code>PacketLength</code> parameter to specify the number of bytes in each packet to mirror.</p>
        pub fn set_packet_length(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_packet_length(input);
            self
        }
        /// <p>The session number determines the order in which sessions are evaluated when an interface is used by multiple sessions. The first session with a matching filter is the one that mirrors the packets.</p>
        /// <p>Valid values are 1-32766.</p>
        pub fn session_number(mut self, input: i32) -> Self {
            self.inner = self.inner.session_number(input);
            self
        }
        /// <p>The session number determines the order in which sessions are evaluated when an interface is used by multiple sessions. The first session with a matching filter is the one that mirrors the packets.</p>
        /// <p>Valid values are 1-32766.</p>
        pub fn set_session_number(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_session_number(input);
            self
        }
        /// <p>The VXLAN ID for the Traffic Mirror session. For more information about the VXLAN protocol, see <a href="https://tools.ietf.org/html/rfc7348">RFC 7348</a>. If you do not specify a <code>VirtualNetworkId</code>, an account-wide unique id is chosen at random.</p>
        pub fn virtual_network_id(mut self, input: i32) -> Self {
            self.inner = self.inner.virtual_network_id(input);
            self
        }
        /// <p>The VXLAN ID for the Traffic Mirror session. For more information about the VXLAN protocol, see <a href="https://tools.ietf.org/html/rfc7348">RFC 7348</a>. If you do not specify a <code>VirtualNetworkId</code>, an account-wide unique id is chosen at random.</p>
        pub fn set_virtual_network_id(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_virtual_network_id(input);
            self
        }
        /// <p>The description of the Traffic Mirror session.</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 Traffic Mirror session.</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 `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to a Traffic Mirror session.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to a Traffic Mirror session.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTrafficMirrorTarget`.
    ///
    /// <p>Creates a target for your Traffic Mirror session.</p>
    /// <p>A Traffic Mirror target is the destination for mirrored traffic. The Traffic Mirror source and the Traffic Mirror target (monitoring appliances) can be in the same VPC, or in different VPCs connected via VPC peering or a transit gateway.</p>
    /// <p>A Traffic Mirror target can be a network interface, a Network Load Balancer, or a Gateway Load Balancer endpoint.</p>
    /// <p>To use the target in a Traffic Mirror session, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorSession.htm">CreateTrafficMirrorSession</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTrafficMirrorTarget {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_traffic_mirror_target_input::Builder,
    }
    impl CreateTrafficMirrorTarget {
        /// Creates a new `CreateTrafficMirrorTarget`.
        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::CreateTrafficMirrorTarget,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTrafficMirrorTargetError>,
        > {
            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::CreateTrafficMirrorTargetOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTrafficMirrorTargetError>,
        > {
            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 network interface ID that is associated with the target.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The network interface ID that is associated with the target.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Network Load Balancer that is associated with the target.</p>
        pub fn network_load_balancer_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_load_balancer_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Network Load Balancer that is associated with the target.</p>
        pub fn set_network_load_balancer_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_load_balancer_arn(input);
            self
        }
        /// <p>The description of the Traffic Mirror target.</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 Traffic Mirror target.</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 `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the Traffic Mirror target.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the Traffic Mirror target.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>The ID of the Gateway Load Balancer endpoint.</p>
        pub fn gateway_load_balancer_endpoint_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.gateway_load_balancer_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Gateway Load Balancer endpoint.</p>
        pub fn set_gateway_load_balancer_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_gateway_load_balancer_endpoint_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGateway`.
    ///
    /// <p>Creates a transit gateway.</p>
    /// <p>You can use a transit gateway to interconnect your virtual private clouds (VPC) and on-premises networks. After the transit gateway enters the <code>available</code> state, you can attach your VPCs and VPN connections to the transit gateway.</p>
    /// <p>To attach your VPCs, use <code>CreateTransitGatewayVpcAttachment</code>.</p>
    /// <p>To attach a VPN connection, use <code>CreateCustomerGateway</code> to create a customer gateway and specify the ID of the customer gateway and the ID of the transit gateway in a call to <code>CreateVpnConnection</code>.</p>
    /// <p>When you create a transit gateway, we create a default transit gateway route table and use it as the default association route table and the default propagation route table. You can use <code>CreateTransitGatewayRouteTable</code> to create additional transit gateway route tables. If you disable automatic route propagation, we do not create a default transit gateway route table. You can use <code>EnableTransitGatewayRouteTablePropagation</code> to propagate routes from a resource attachment to a transit gateway route table. If you disable automatic associations, you can use <code>AssociateTransitGatewayRouteTable</code> to associate a resource attachment with a transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_input::Builder,
    }
    impl CreateTransitGateway {
        /// Creates a new `CreateTransitGateway`.
        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::CreateTransitGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayError>,
        > {
            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::CreateTransitGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayError>,
        > {
            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>A description of the transit gateway.</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 transit gateway.</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 transit gateway options.</p>
        pub fn options(mut self, input: crate::model::TransitGatewayRequestOptions) -> Self {
            self.inner = self.inner.options(input);
            self
        }
        /// <p>The transit gateway options.</p>
        pub fn set_options(
            mut self,
            input: std::option::Option<crate::model::TransitGatewayRequestOptions>,
        ) -> Self {
            self.inner = self.inner.set_options(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the transit gateway.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the transit gateway.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayConnect`.
    ///
    /// <p>Creates a Connect attachment from a specified transit gateway attachment. A Connect attachment is a GRE-based tunnel attachment that you can use to establish a connection between a transit gateway and an appliance.</p>
    /// <p>A Connect attachment uses an existing VPC or Amazon Web Services Direct Connect attachment as the underlying transport mechanism.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayConnect {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_connect_input::Builder,
    }
    impl CreateTransitGatewayConnect {
        /// Creates a new `CreateTransitGatewayConnect`.
        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::CreateTransitGatewayConnect,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayConnectError>,
        > {
            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::CreateTransitGatewayConnectOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayConnectError>,
        > {
            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 transit gateway attachment. You can specify a VPC attachment or Amazon Web Services Direct Connect attachment.</p>
        pub fn transport_transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .transport_transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway attachment. You can specify a VPC attachment or Amazon Web Services Direct Connect attachment.</p>
        pub fn set_transport_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_transport_transit_gateway_attachment_id(input);
            self
        }
        /// <p>The Connect attachment options.</p>
        pub fn options(
            mut self,
            input: crate::model::CreateTransitGatewayConnectRequestOptions,
        ) -> Self {
            self.inner = self.inner.options(input);
            self
        }
        /// <p>The Connect attachment options.</p>
        pub fn set_options(
            mut self,
            input: std::option::Option<crate::model::CreateTransitGatewayConnectRequestOptions>,
        ) -> Self {
            self.inner = self.inner.set_options(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the Connect attachment.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the Connect attachment.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayConnectPeer`.
    ///
    /// <p>Creates a Connect peer for a specified transit gateway Connect attachment between a transit gateway and an appliance.</p>
    /// <p>The peer address and transit gateway address must be the same IP address family (IPv4 or IPv6).</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html#tgw-connect-peer">Connect peers</a> in the <i>Transit Gateways Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayConnectPeer {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_connect_peer_input::Builder,
    }
    impl CreateTransitGatewayConnectPeer {
        /// Creates a new `CreateTransitGatewayConnectPeer`.
        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::CreateTransitGatewayConnectPeer,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayConnectPeerError>,
        > {
            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::CreateTransitGatewayConnectPeerOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayConnectPeerError>,
        > {
            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 Connect attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the Connect attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>The peer IP address (GRE outer IP address) on the transit gateway side of the Connect peer, which must be specified from a transit gateway CIDR block. If not specified, Amazon automatically assigns the first available IP address from the transit gateway CIDR block.</p>
        pub fn transit_gateway_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_address(input.into());
            self
        }
        /// <p>The peer IP address (GRE outer IP address) on the transit gateway side of the Connect peer, which must be specified from a transit gateway CIDR block. If not specified, Amazon automatically assigns the first available IP address from the transit gateway CIDR block.</p>
        pub fn set_transit_gateway_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_address(input);
            self
        }
        /// <p>The peer IP address (GRE outer IP address) on the appliance side of the Connect peer.</p>
        pub fn peer_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.peer_address(input.into());
            self
        }
        /// <p>The peer IP address (GRE outer IP address) on the appliance side of the Connect peer.</p>
        pub fn set_peer_address(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_peer_address(input);
            self
        }
        /// <p>The BGP options for the Connect peer.</p>
        pub fn bgp_options(
            mut self,
            input: crate::model::TransitGatewayConnectRequestBgpOptions,
        ) -> Self {
            self.inner = self.inner.bgp_options(input);
            self
        }
        /// <p>The BGP options for the Connect peer.</p>
        pub fn set_bgp_options(
            mut self,
            input: std::option::Option<crate::model::TransitGatewayConnectRequestBgpOptions>,
        ) -> Self {
            self.inner = self.inner.set_bgp_options(input);
            self
        }
        /// Appends an item to `InsideCidrBlocks`.
        ///
        /// To override the contents of this collection use [`set_inside_cidr_blocks`](Self::set_inside_cidr_blocks).
        ///
        /// <p>The range of inside IP addresses that are used for BGP peering. You must specify a size /29 IPv4 CIDR block from the <code>169.254.0.0/16</code> range. The first address from the range must be configured on the appliance as the BGP IP address. You can also optionally specify a size /125 IPv6 CIDR block from the <code>fd00::/8</code> range.</p>
        pub fn inside_cidr_blocks(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.inside_cidr_blocks(input.into());
            self
        }
        /// <p>The range of inside IP addresses that are used for BGP peering. You must specify a size /29 IPv4 CIDR block from the <code>169.254.0.0/16</code> range. The first address from the range must be configured on the appliance as the BGP IP address. You can also optionally specify a size /125 IPv6 CIDR block from the <code>fd00::/8</code> range.</p>
        pub fn set_inside_cidr_blocks(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_inside_cidr_blocks(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the Connect peer.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the Connect peer.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayMulticastDomain`.
    ///
    /// <p>Creates a multicast domain using the specified transit gateway.</p>
    /// <p>The transit gateway must be in the available state before you create a domain. Use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTransitGateways.html">DescribeTransitGateways</a> to see the state of transit gateway.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayMulticastDomain {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_multicast_domain_input::Builder,
    }
    impl CreateTransitGatewayMulticastDomain {
        /// Creates a new `CreateTransitGatewayMulticastDomain`.
        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::CreateTransitGatewayMulticastDomain,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::CreateTransitGatewayMulticastDomainError,
            >,
        > {
            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::CreateTransitGatewayMulticastDomainOutput,
            aws_smithy_http::result::SdkError<
                crate::error::CreateTransitGatewayMulticastDomainError,
            >,
        > {
            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 transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>The options for the transit gateway multicast domain.</p>
        pub fn options(
            mut self,
            input: crate::model::CreateTransitGatewayMulticastDomainRequestOptions,
        ) -> Self {
            self.inner = self.inner.options(input);
            self
        }
        /// <p>The options for the transit gateway multicast domain.</p>
        pub fn set_options(
            mut self,
            input: std::option::Option<
                crate::model::CreateTransitGatewayMulticastDomainRequestOptions,
            >,
        ) -> Self {
            self.inner = self.inner.set_options(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags for the transit gateway multicast domain.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags for the transit gateway multicast domain.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayPeeringAttachment`.
    ///
    /// <p>Requests a transit gateway peering attachment between the specified transit gateway (requester) and a peer transit gateway (accepter). The peer transit gateway can be in your account or a different Amazon Web Services account.</p>
    /// <p>After you create the peering attachment, the owner of the accepter transit gateway must accept the attachment request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayPeeringAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_peering_attachment_input::Builder,
    }
    impl CreateTransitGatewayPeeringAttachment {
        /// Creates a new `CreateTransitGatewayPeeringAttachment`.
        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::CreateTransitGatewayPeeringAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::CreateTransitGatewayPeeringAttachmentError,
            >,
        > {
            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::CreateTransitGatewayPeeringAttachmentOutput,
            aws_smithy_http::result::SdkError<
                crate::error::CreateTransitGatewayPeeringAttachmentError,
            >,
        > {
            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 transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>The ID of the peer transit gateway with which to create the peering attachment.</p>
        pub fn peer_transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.peer_transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the peer transit gateway with which to create the peering attachment.</p>
        pub fn set_peer_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_peer_transit_gateway_id(input);
            self
        }
        /// <p>The ID of the Amazon Web Services account that owns the peer transit gateway.</p>
        pub fn peer_account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.peer_account_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services account that owns the peer transit gateway.</p>
        pub fn set_peer_account_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_peer_account_id(input);
            self
        }
        /// <p>The Region where the peer transit gateway is located.</p>
        pub fn peer_region(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.peer_region(input.into());
            self
        }
        /// <p>The Region where the peer transit gateway is located.</p>
        pub fn set_peer_region(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_peer_region(input);
            self
        }
        /// <p>Requests a transit gateway peering attachment.</p>
        pub fn options(
            mut self,
            input: crate::model::CreateTransitGatewayPeeringAttachmentRequestOptions,
        ) -> Self {
            self.inner = self.inner.options(input);
            self
        }
        /// <p>Requests a transit gateway peering attachment.</p>
        pub fn set_options(
            mut self,
            input: std::option::Option<
                crate::model::CreateTransitGatewayPeeringAttachmentRequestOptions,
            >,
        ) -> Self {
            self.inner = self.inner.set_options(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the transit gateway peering attachment.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the transit gateway peering attachment.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayPolicyTable`.
    ///
    /// <p>Creates a transit gateway policy table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayPolicyTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_policy_table_input::Builder,
    }
    impl CreateTransitGatewayPolicyTable {
        /// Creates a new `CreateTransitGatewayPolicyTable`.
        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::CreateTransitGatewayPolicyTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayPolicyTableError>,
        > {
            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::CreateTransitGatewayPolicyTableOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayPolicyTableError>,
        > {
            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 transit gateway used for the policy table.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway used for the policy table.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags specification for the transit gateway policy table created during the request.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags specification for the transit gateway policy table created during the request.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayPrefixListReference`.
    ///
    /// <p>Creates a reference (route) to a prefix list in a specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayPrefixListReference {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_prefix_list_reference_input::Builder,
    }
    impl CreateTransitGatewayPrefixListReference {
        /// Creates a new `CreateTransitGatewayPrefixListReference`.
        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::CreateTransitGatewayPrefixListReference,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::CreateTransitGatewayPrefixListReferenceError,
            >,
        > {
            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::CreateTransitGatewayPrefixListReferenceOutput,
            aws_smithy_http::result::SdkError<
                crate::error::CreateTransitGatewayPrefixListReferenceError,
            >,
        > {
            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 transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the prefix list that is used for destination matches.</p>
        pub fn prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list that is used for destination matches.</p>
        pub fn set_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_id(input);
            self
        }
        /// <p>The ID of the attachment to which traffic is routed.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment to which traffic is routed.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Indicates whether to drop traffic that matches this route.</p>
        pub fn blackhole(mut self, input: bool) -> Self {
            self.inner = self.inner.blackhole(input);
            self
        }
        /// <p>Indicates whether to drop traffic that matches this route.</p>
        pub fn set_blackhole(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_blackhole(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayRoute`.
    ///
    /// <p>Creates a static route for the specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_route_input::Builder,
    }
    impl CreateTransitGatewayRoute {
        /// Creates a new `CreateTransitGatewayRoute`.
        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::CreateTransitGatewayRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayRouteError>,
        > {
            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::CreateTransitGatewayRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayRouteError>,
        > {
            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 CIDR range used for destination matches. Routing decisions are based on the most specific match.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The CIDR range used for destination matches. Routing decisions are based on the most specific match.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Indicates whether to drop traffic that matches this route.</p>
        pub fn blackhole(mut self, input: bool) -> Self {
            self.inner = self.inner.blackhole(input);
            self
        }
        /// <p>Indicates whether to drop traffic that matches this route.</p>
        pub fn set_blackhole(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_blackhole(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayRouteTable`.
    ///
    /// <p>Creates a route table for the specified transit gateway.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_route_table_input::Builder,
    }
    impl CreateTransitGatewayRouteTable {
        /// Creates a new `CreateTransitGatewayRouteTable`.
        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::CreateTransitGatewayRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayRouteTableError>,
        > {
            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::CreateTransitGatewayRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayRouteTableError>,
        > {
            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 transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the transit gateway route table.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the transit gateway route table.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayRouteTableAnnouncement`.
    ///
    /// <p>Advertises a new transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayRouteTableAnnouncement {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_route_table_announcement_input::Builder,
    }
    impl CreateTransitGatewayRouteTableAnnouncement {
        /// Creates a new `CreateTransitGatewayRouteTableAnnouncement`.
        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::CreateTransitGatewayRouteTableAnnouncement,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::CreateTransitGatewayRouteTableAnnouncementError,
            >,
        > {
            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::CreateTransitGatewayRouteTableAnnouncementOutput,
            aws_smithy_http::result::SdkError<
                crate::error::CreateTransitGatewayRouteTableAnnouncementError,
            >,
        > {
            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 transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the peering attachment.</p>
        pub fn peering_attachment_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.peering_attachment_id(input.into());
            self
        }
        /// <p>The ID of the peering attachment.</p>
        pub fn set_peering_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_peering_attachment_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags specifications applied to the transit gateway route table announcement.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags specifications applied to the transit gateway route table announcement.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateTransitGatewayVpcAttachment`.
    ///
    /// <p>Attaches the specified VPC to the specified transit gateway.</p>
    /// <p>If you attach a VPC with a CIDR range that overlaps the CIDR range of a VPC that is already attached, the new VPC CIDR range is not propagated to the default propagation route table.</p>
    /// <p>To send VPC traffic to an attached transit gateway, add a route to the VPC route table using <code>CreateRoute</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateTransitGatewayVpcAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_transit_gateway_vpc_attachment_input::Builder,
    }
    impl CreateTransitGatewayVpcAttachment {
        /// Creates a new `CreateTransitGatewayVpcAttachment`.
        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::CreateTransitGatewayVpcAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayVpcAttachmentError>,
        > {
            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::CreateTransitGatewayVpcAttachmentOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateTransitGatewayVpcAttachmentError>,
        > {
            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 transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// Appends an item to `SubnetIds`.
        ///
        /// To override the contents of this collection use [`set_subnet_ids`](Self::set_subnet_ids).
        ///
        /// <p>The IDs of one or more subnets. You can specify only one subnet per Availability Zone. You must specify at least one subnet, but we recommend that you specify two subnets for better availability. The transit gateway uses one IP address from each specified subnet.</p>
        pub fn subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_ids(input.into());
            self
        }
        /// <p>The IDs of one or more subnets. You can specify only one subnet per Availability Zone. You must specify at least one subnet, but we recommend that you specify two subnets for better availability. The transit gateway uses one IP address from each specified subnet.</p>
        pub fn set_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_subnet_ids(input);
            self
        }
        /// <p>The VPC attachment options.</p>
        pub fn options(
            mut self,
            input: crate::model::CreateTransitGatewayVpcAttachmentRequestOptions,
        ) -> Self {
            self.inner = self.inner.options(input);
            self
        }
        /// <p>The VPC attachment options.</p>
        pub fn set_options(
            mut self,
            input: std::option::Option<
                crate::model::CreateTransitGatewayVpcAttachmentRequestOptions,
            >,
        ) -> Self {
            self.inner = self.inner.set_options(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the VPC attachment.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the VPC attachment.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVerifiedAccessEndpoint`.
    ///
    /// <p>An Amazon Web Services Verified Access endpoint is where you define your application along with an optional endpoint-level access policy.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVerifiedAccessEndpoint {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_verified_access_endpoint_input::Builder,
    }
    impl CreateVerifiedAccessEndpoint {
        /// Creates a new `CreateVerifiedAccessEndpoint`.
        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::CreateVerifiedAccessEndpoint,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVerifiedAccessEndpointError>,
        > {
            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::CreateVerifiedAccessEndpointOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVerifiedAccessEndpointError>,
        > {
            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 Verified Access group to associate the endpoint with.</p>
        pub fn verified_access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.verified_access_group_id(input.into());
            self
        }
        /// <p>The ID of the Verified Access group to associate the endpoint with.</p>
        pub fn set_verified_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_group_id(input);
            self
        }
        /// <p>The type of Amazon Web Services Verified Access endpoint to create.</p>
        pub fn endpoint_type(mut self, input: crate::model::VerifiedAccessEndpointType) -> Self {
            self.inner = self.inner.endpoint_type(input);
            self
        }
        /// <p>The type of Amazon Web Services Verified Access endpoint to create.</p>
        pub fn set_endpoint_type(
            mut self,
            input: std::option::Option<crate::model::VerifiedAccessEndpointType>,
        ) -> Self {
            self.inner = self.inner.set_endpoint_type(input);
            self
        }
        /// <p>The Amazon Web Services network component Verified Access attaches to.</p>
        pub fn attachment_type(
            mut self,
            input: crate::model::VerifiedAccessEndpointAttachmentType,
        ) -> Self {
            self.inner = self.inner.attachment_type(input);
            self
        }
        /// <p>The Amazon Web Services network component Verified Access attaches to.</p>
        pub fn set_attachment_type(
            mut self,
            input: std::option::Option<crate::model::VerifiedAccessEndpointAttachmentType>,
        ) -> Self {
            self.inner = self.inner.set_attachment_type(input);
            self
        }
        /// <p>The ARN of the public TLS/SSL certificate in Amazon Web Services Certificate Manager to associate with the endpoint. The CN in the certificate must match the DNS name your end users will use to reach your application.</p>
        pub fn domain_certificate_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.domain_certificate_arn(input.into());
            self
        }
        /// <p>The ARN of the public TLS/SSL certificate in Amazon Web Services Certificate Manager to associate with the endpoint. The CN in the certificate must match the DNS name your end users will use to reach your application.</p>
        pub fn set_domain_certificate_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_domain_certificate_arn(input);
            self
        }
        /// <p>The DNS name for users to reach your application.</p>
        pub fn application_domain(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.application_domain(input.into());
            self
        }
        /// <p>The DNS name for users to reach your application.</p>
        pub fn set_application_domain(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_application_domain(input);
            self
        }
        /// <p>A custom identifier that gets prepended to a DNS name that is generated for the endpoint.</p>
        pub fn endpoint_domain_prefix(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.endpoint_domain_prefix(input.into());
            self
        }
        /// <p>A custom identifier that gets prepended to a DNS name that is generated for the endpoint.</p>
        pub fn set_endpoint_domain_prefix(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_endpoint_domain_prefix(input);
            self
        }
        /// Appends an item to `SecurityGroupIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_ids`](Self::set_security_group_ids).
        ///
        /// <p>The Amazon EC2 security groups to associate with the Amazon Web Services Verified Access endpoint.</p>
        pub fn security_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_ids(input.into());
            self
        }
        /// <p>The Amazon EC2 security groups to associate with the Amazon Web Services Verified Access endpoint.</p>
        pub fn set_security_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_ids(input);
            self
        }
        /// <p>The load balancer details if creating the Amazon Web Services Verified Access endpoint as <code>load-balancer</code>type.</p>
        pub fn load_balancer_options(
            mut self,
            input: crate::model::CreateVerifiedAccessEndpointLoadBalancerOptions,
        ) -> Self {
            self.inner = self.inner.load_balancer_options(input);
            self
        }
        /// <p>The load balancer details if creating the Amazon Web Services Verified Access endpoint as <code>load-balancer</code>type.</p>
        pub fn set_load_balancer_options(
            mut self,
            input: std::option::Option<
                crate::model::CreateVerifiedAccessEndpointLoadBalancerOptions,
            >,
        ) -> Self {
            self.inner = self.inner.set_load_balancer_options(input);
            self
        }
        /// <p>The network interface details if creating the Amazon Web Services Verified Access endpoint as <code>network-interface</code>type.</p>
        pub fn network_interface_options(
            mut self,
            input: crate::model::CreateVerifiedAccessEndpointEniOptions,
        ) -> Self {
            self.inner = self.inner.network_interface_options(input);
            self
        }
        /// <p>The network interface details if creating the Amazon Web Services Verified Access endpoint as <code>network-interface</code>type.</p>
        pub fn set_network_interface_options(
            mut self,
            input: std::option::Option<crate::model::CreateVerifiedAccessEndpointEniOptions>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_options(input);
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access endpoint.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access endpoint.</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 Amazon Web Services Verified Access policy document.</p>
        pub fn policy_document(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.policy_document(input.into());
            self
        }
        /// <p>The Amazon Web Services Verified Access policy document.</p>
        pub fn set_policy_document(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_policy_document(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the Amazon Web Services Verified Access endpoint.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the Amazon Web Services Verified Access endpoint.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVerifiedAccessGroup`.
    ///
    /// <p>An Amazon Web Services Verified Access group is a collection of Amazon Web Services Verified Access endpoints who's associated applications have similar security requirements. Each instance within an Amazon Web Services Verified Access group shares an Amazon Web Services Verified Access policy. For example, you can group all Amazon Web Services Verified Access instances associated with “sales” applications together and use one common Amazon Web Services Verified Access policy.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVerifiedAccessGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_verified_access_group_input::Builder,
    }
    impl CreateVerifiedAccessGroup {
        /// Creates a new `CreateVerifiedAccessGroup`.
        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::CreateVerifiedAccessGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVerifiedAccessGroupError>,
        > {
            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::CreateVerifiedAccessGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVerifiedAccessGroupError>,
        > {
            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 Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access group.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access group.</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 Amazon Web Services Verified Access policy document.</p>
        pub fn policy_document(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.policy_document(input.into());
            self
        }
        /// <p>The Amazon Web Services Verified Access policy document.</p>
        pub fn set_policy_document(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_policy_document(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the Amazon Web Services Verified Access group.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the Amazon Web Services Verified Access group.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVerifiedAccessInstance`.
    ///
    /// <p>An Amazon Web Services Verified Access instance is a regional entity that evaluates application requests and grants access only when your security requirements are met.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVerifiedAccessInstance {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_verified_access_instance_input::Builder,
    }
    impl CreateVerifiedAccessInstance {
        /// Creates a new `CreateVerifiedAccessInstance`.
        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::CreateVerifiedAccessInstance,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVerifiedAccessInstanceError>,
        > {
            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::CreateVerifiedAccessInstanceOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVerifiedAccessInstanceError>,
        > {
            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>A description for the Amazon Web Services Verified Access instance.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access instance.</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 `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the Amazon Web Services Verified Access instance.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the Amazon Web Services Verified Access instance.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVerifiedAccessTrustProvider`.
    ///
    /// <p>A trust provider is a third-party entity that creates, maintains, and manages identity information for users and devices. When an application request is made, the identity information sent by the trust provider will be evaluated by Amazon Web Services Verified Access, before allowing or denying the application request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVerifiedAccessTrustProvider {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_verified_access_trust_provider_input::Builder,
    }
    impl CreateVerifiedAccessTrustProvider {
        /// Creates a new `CreateVerifiedAccessTrustProvider`.
        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::CreateVerifiedAccessTrustProvider,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVerifiedAccessTrustProviderError>,
        > {
            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::CreateVerifiedAccessTrustProviderOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVerifiedAccessTrustProviderError>,
        > {
            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 type of trust provider can be either user or device-based.</p>
        pub fn trust_provider_type(mut self, input: crate::model::TrustProviderType) -> Self {
            self.inner = self.inner.trust_provider_type(input);
            self
        }
        /// <p>The type of trust provider can be either user or device-based.</p>
        pub fn set_trust_provider_type(
            mut self,
            input: std::option::Option<crate::model::TrustProviderType>,
        ) -> Self {
            self.inner = self.inner.set_trust_provider_type(input);
            self
        }
        /// <p>The type of user-based trust provider.</p>
        pub fn user_trust_provider_type(
            mut self,
            input: crate::model::UserTrustProviderType,
        ) -> Self {
            self.inner = self.inner.user_trust_provider_type(input);
            self
        }
        /// <p>The type of user-based trust provider.</p>
        pub fn set_user_trust_provider_type(
            mut self,
            input: std::option::Option<crate::model::UserTrustProviderType>,
        ) -> Self {
            self.inner = self.inner.set_user_trust_provider_type(input);
            self
        }
        /// <p>The type of device-based trust provider.</p>
        pub fn device_trust_provider_type(
            mut self,
            input: crate::model::DeviceTrustProviderType,
        ) -> Self {
            self.inner = self.inner.device_trust_provider_type(input);
            self
        }
        /// <p>The type of device-based trust provider.</p>
        pub fn set_device_trust_provider_type(
            mut self,
            input: std::option::Option<crate::model::DeviceTrustProviderType>,
        ) -> Self {
            self.inner = self.inner.set_device_trust_provider_type(input);
            self
        }
        /// <p>The OpenID Connect details for an <code>oidc</code>-type, user-identity based trust provider.</p>
        pub fn oidc_options(
            mut self,
            input: crate::model::CreateVerifiedAccessTrustProviderOidcOptions,
        ) -> Self {
            self.inner = self.inner.oidc_options(input);
            self
        }
        /// <p>The OpenID Connect details for an <code>oidc</code>-type, user-identity based trust provider.</p>
        pub fn set_oidc_options(
            mut self,
            input: std::option::Option<crate::model::CreateVerifiedAccessTrustProviderOidcOptions>,
        ) -> Self {
            self.inner = self.inner.set_oidc_options(input);
            self
        }
        /// <p>The options for device identity based trust providers.</p>
        pub fn device_options(
            mut self,
            input: crate::model::CreateVerifiedAccessTrustProviderDeviceOptions,
        ) -> Self {
            self.inner = self.inner.device_options(input);
            self
        }
        /// <p>The options for device identity based trust providers.</p>
        pub fn set_device_options(
            mut self,
            input: std::option::Option<
                crate::model::CreateVerifiedAccessTrustProviderDeviceOptions,
            >,
        ) -> Self {
            self.inner = self.inner.set_device_options(input);
            self
        }
        /// <p>The identifier to be used when working with policy rules.</p>
        pub fn policy_reference_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.policy_reference_name(input.into());
            self
        }
        /// <p>The identifier to be used when working with policy rules.</p>
        pub fn set_policy_reference_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_policy_reference_name(input);
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access trust provider.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access trust provider.</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 `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the Amazon Web Services Verified Access trust provider.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the Amazon Web Services Verified Access trust provider.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVolume`.
    ///
    /// <p>Creates an EBS volume that can be attached to an instance in the same Availability Zone.</p>
    /// <p>You can create a new empty volume or restore a volume from an EBS snapshot. Any Amazon Web Services Marketplace product codes from the snapshot are propagated to the volume.</p>
    /// <p>You can create encrypted volumes. Encrypted volumes must be attached to instances that support Amazon EBS encryption. Volumes that are created from encrypted snapshots are also automatically encrypted. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>You can tag your volumes during creation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html">Tag your Amazon EC2 resources</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html">Create an Amazon EBS volume</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVolume {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_volume_input::Builder,
    }
    impl CreateVolume {
        /// Creates a new `CreateVolume`.
        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::CreateVolume,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVolumeError>,
        > {
            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::CreateVolumeOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVolumeError>,
        > {
            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 Availability Zone in which to create the volume.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>The Availability Zone in which to create the volume.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// <p>Indicates whether the volume should be encrypted. The effect of setting the encryption state to <code>true</code> depends on the volume origin (new or from a snapshot), starting encryption state, ownership, and whether encryption by default is enabled. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default">Encryption by default</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Encrypted Amazon EBS volumes must be attached to instances that support Amazon EBS encryption. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances">Supported instance types</a>.</p>
        pub fn encrypted(mut self, input: bool) -> Self {
            self.inner = self.inner.encrypted(input);
            self
        }
        /// <p>Indicates whether the volume should be encrypted. The effect of setting the encryption state to <code>true</code> depends on the volume origin (new or from a snapshot), starting encryption state, ownership, and whether encryption by default is enabled. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default">Encryption by default</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Encrypted Amazon EBS volumes must be attached to instances that support Amazon EBS encryption. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances">Supported instance types</a>.</p>
        pub fn set_encrypted(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_encrypted(input);
            self
        }
        /// <p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p>
        /// <p>The following are the supported values for each volume type:</p>
        /// <ul>
        /// <li> <p> <code>gp3</code>: 3,000-16,000 IOPS</p> </li>
        /// <li> <p> <code>io1</code>: 100-64,000 IOPS</p> </li>
        /// <li> <p> <code>io2</code>: 100-64,000 IOPS</p> </li>
        /// </ul>
        /// <p> <code>io1</code> and <code>io2</code> volumes support up to 64,000 IOPS only on <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Instances built on the Nitro System</a>. Other instance families support performance up to 32,000 IOPS.</p>
        /// <p>This parameter is required for <code>io1</code> and <code>io2</code> volumes. The default for <code>gp3</code> volumes is 3,000 IOPS. This parameter is not supported for <code>gp2</code>, <code>st1</code>, <code>sc1</code>, or <code>standard</code> volumes.</p>
        pub fn iops(mut self, input: i32) -> Self {
            self.inner = self.inner.iops(input);
            self
        }
        /// <p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p>
        /// <p>The following are the supported values for each volume type:</p>
        /// <ul>
        /// <li> <p> <code>gp3</code>: 3,000-16,000 IOPS</p> </li>
        /// <li> <p> <code>io1</code>: 100-64,000 IOPS</p> </li>
        /// <li> <p> <code>io2</code>: 100-64,000 IOPS</p> </li>
        /// </ul>
        /// <p> <code>io1</code> and <code>io2</code> volumes support up to 64,000 IOPS only on <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Instances built on the Nitro System</a>. Other instance families support performance up to 32,000 IOPS.</p>
        /// <p>This parameter is required for <code>io1</code> and <code>io2</code> volumes. The default for <code>gp3</code> volumes is 3,000 IOPS. This parameter is not supported for <code>gp2</code>, <code>st1</code>, <code>sc1</code>, or <code>standard</code> volumes.</p>
        pub fn set_iops(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_iops(input);
            self
        }
        /// <p>The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>
        /// <p>You can specify the KMS key using any of the following:</p>
        /// <ul>
        /// <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>
        /// <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>
        /// </ul>
        /// <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>
        pub fn kms_key_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.kms_key_id(input.into());
            self
        }
        /// <p>The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>
        /// <p>You can specify the KMS key using any of the following:</p>
        /// <ul>
        /// <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>
        /// <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>
        /// </ul>
        /// <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>
        pub fn set_kms_key_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_kms_key_id(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost.</p>
        pub fn outpost_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.outpost_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the Outpost.</p>
        pub fn set_outpost_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_outpost_arn(input);
            self
        }
        /// <p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size. You can specify a volume size that is equal to or larger than the snapshot size.</p>
        /// <p>The following are the supported volumes sizes for each volume type:</p>
        /// <ul>
        /// <li> <p> <code>gp2</code> and <code>gp3</code>: 1-16,384</p> </li>
        /// <li> <p> <code>io1</code> and <code>io2</code>: 4-16,384</p> </li>
        /// <li> <p> <code>st1</code> and <code>sc1</code>: 125-16,384</p> </li>
        /// <li> <p> <code>standard</code>: 1-1,024</p> </li>
        /// </ul>
        pub fn size(mut self, input: i32) -> Self {
            self.inner = self.inner.size(input);
            self
        }
        /// <p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size. You can specify a volume size that is equal to or larger than the snapshot size.</p>
        /// <p>The following are the supported volumes sizes for each volume type:</p>
        /// <ul>
        /// <li> <p> <code>gp2</code> and <code>gp3</code>: 1-16,384</p> </li>
        /// <li> <p> <code>io1</code> and <code>io2</code>: 4-16,384</p> </li>
        /// <li> <p> <code>st1</code> and <code>sc1</code>: 125-16,384</p> </li>
        /// <li> <p> <code>standard</code>: 1-1,024</p> </li>
        /// </ul>
        pub fn set_size(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_size(input);
            self
        }
        /// <p>The snapshot from which to create the volume. You must specify either a snapshot ID or a volume size.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The snapshot from which to create the volume. You must specify either a snapshot ID or a volume size.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// <p>The volume type. This parameter can be one of the following values:</p>
        /// <ul>
        /// <li> <p>General Purpose SSD: <code>gp2</code> | <code>gp3</code> </p> </li>
        /// <li> <p>Provisioned IOPS SSD: <code>io1</code> | <code>io2</code> </p> </li>
        /// <li> <p>Throughput Optimized HDD: <code>st1</code> </p> </li>
        /// <li> <p>Cold HDD: <code>sc1</code> </p> </li>
        /// <li> <p>Magnetic: <code>standard</code> </p> </li>
        /// </ul>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html">Amazon EBS volume types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Default: <code>gp2</code> </p>
        pub fn volume_type(mut self, input: crate::model::VolumeType) -> Self {
            self.inner = self.inner.volume_type(input);
            self
        }
        /// <p>The volume type. This parameter can be one of the following values:</p>
        /// <ul>
        /// <li> <p>General Purpose SSD: <code>gp2</code> | <code>gp3</code> </p> </li>
        /// <li> <p>Provisioned IOPS SSD: <code>io1</code> | <code>io2</code> </p> </li>
        /// <li> <p>Throughput Optimized HDD: <code>st1</code> </p> </li>
        /// <li> <p>Cold HDD: <code>sc1</code> </p> </li>
        /// <li> <p>Magnetic: <code>standard</code> </p> </li>
        /// </ul>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html">Amazon EBS volume types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Default: <code>gp2</code> </p>
        pub fn set_volume_type(
            mut self,
            input: std::option::Option<crate::model::VolumeType>,
        ) -> Self {
            self.inner = self.inner.set_volume_type(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the volume during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the volume during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Indicates whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Instances built on the Nitro System</a> in the same Availability Zone. This parameter is supported with <code>io1</code> and <code>io2</code> volumes only. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html"> Amazon EBS Multi-Attach</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn multi_attach_enabled(mut self, input: bool) -> Self {
            self.inner = self.inner.multi_attach_enabled(input);
            self
        }
        /// <p>Indicates whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">Instances built on the Nitro System</a> in the same Availability Zone. This parameter is supported with <code>io1</code> and <code>io2</code> volumes only. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html"> Amazon EBS Multi-Attach</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn set_multi_attach_enabled(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_multi_attach_enabled(input);
            self
        }
        /// <p>The throughput to provision for a volume, with a maximum of 1,000 MiB/s.</p>
        /// <p>This parameter is valid only for <code>gp3</code> volumes.</p>
        /// <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>
        pub fn throughput(mut self, input: i32) -> Self {
            self.inner = self.inner.throughput(input);
            self
        }
        /// <p>The throughput to provision for a volume, with a maximum of 1,000 MiB/s.</p>
        /// <p>This parameter is valid only for <code>gp3</code> volumes.</p>
        /// <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>
        pub fn set_throughput(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_throughput(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensure Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVpc`.
    ///
    /// <p>Creates a VPC with the specified CIDR blocks. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/configure-your-vpc.html#vpc-cidr-blocks">VPC CIDR blocks</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    /// <p>You can optionally request an IPv6 CIDR block for the VPC. You can request an Amazon-provided IPv6 CIDR block from Amazon's pool of IPv6 addresses, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses (<a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html">BYOIP</a>).</p>
    /// <p>By default, each instance that you launch in the VPC has the default DHCP options, which include only a default DNS server that we provide (AmazonProvidedDNS). For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html">DHCP option sets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    /// <p>You can specify the instance tenancy value for the VPC when you create it. You can't change this value for the VPC after you create it. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html">Dedicated Instances</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVpc {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_vpc_input::Builder,
    }
    impl CreateVpc {
        /// Creates a new `CreateVpc`.
        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::CreateVpc,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVpcError>,
        > {
            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::CreateVpcOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVpcError>,
        > {
            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 IPv4 network range for the VPC, in CIDR notation. For example, <code>10.0.0.0/16</code>. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
        pub fn cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_block(input.into());
            self
        }
        /// <p>The IPv4 network range for the VPC, in CIDR notation. For example, <code>10.0.0.0/16</code>. We modify the specified CIDR block to its canonical form; for example, if you specify <code>100.68.0.18/18</code>, we modify it to <code>100.68.0.0/18</code>.</p>
        pub fn set_cidr_block(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_block(input);
            self
        }
        /// <p>Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.</p>
        pub fn amazon_provided_ipv6_cidr_block(mut self, input: bool) -> Self {
            self.inner = self.inner.amazon_provided_ipv6_cidr_block(input);
            self
        }
        /// <p>Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.</p>
        pub fn set_amazon_provided_ipv6_cidr_block(
            mut self,
            input: std::option::Option<bool>,
        ) -> Self {
            self.inner = self.inner.set_amazon_provided_ipv6_cidr_block(input);
            self
        }
        /// <p>The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block.</p>
        pub fn ipv6_pool(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_pool(input.into());
            self
        }
        /// <p>The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block.</p>
        pub fn set_ipv6_pool(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipv6_pool(input);
            self
        }
        /// <p>The IPv6 CIDR block from the IPv6 address pool. You must also specify <code>Ipv6Pool</code> in the request.</p>
        /// <p>To let Amazon choose the IPv6 CIDR block for you, omit this parameter.</p>
        pub fn ipv6_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_cidr_block(input.into());
            self
        }
        /// <p>The IPv6 CIDR block from the IPv6 address pool. You must also specify <code>Ipv6Pool</code> in the request.</p>
        /// <p>To let Amazon choose the IPv6 CIDR block for you, omit this parameter.</p>
        pub fn set_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_cidr_block(input);
            self
        }
        /// <p>The ID of an IPv4 IPAM pool you want to use for allocating this VPC's CIDR. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
        pub fn ipv4_ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv4_ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of an IPv4 IPAM pool you want to use for allocating this VPC's CIDR. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
        pub fn set_ipv4_ipam_pool_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv4_ipam_pool_id(input);
            self
        }
        /// <p>The netmask length of the IPv4 CIDR you want to allocate to this VPC from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn ipv4_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv4_netmask_length(input);
            self
        }
        /// <p>The netmask length of the IPv4 CIDR you want to allocate to this VPC from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn set_ipv4_netmask_length(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv4_netmask_length(input);
            self
        }
        /// <p>The ID of an IPv6 IPAM pool which will be used to allocate this VPC an IPv6 CIDR. IPAM is a VPC feature that you can use to automate your IP address management workflows including assigning, tracking, troubleshooting, and auditing IP addresses across Amazon Web Services Regions and accounts throughout your Amazon Web Services Organization. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn ipv6_ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of an IPv6 IPAM pool which will be used to allocate this VPC an IPv6 CIDR. IPAM is a VPC feature that you can use to automate your IP address management workflows including assigning, tracking, troubleshooting, and auditing IP addresses across Amazon Web Services Regions and accounts throughout your Amazon Web Services Organization. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn set_ipv6_ipam_pool_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_ipam_pool_id(input);
            self
        }
        /// <p>The netmask length of the IPv6 CIDR you want to allocate to this VPC from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn ipv6_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv6_netmask_length(input);
            self
        }
        /// <p>The netmask length of the IPv6 CIDR you want to allocate to this VPC from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn set_ipv6_netmask_length(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv6_netmask_length(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The tenancy options for instances launched into the VPC. For <code>default</code>, instances are launched with shared tenancy by default. You can launch instances with any tenancy into a shared tenancy VPC. For <code>dedicated</code>, instances are launched as dedicated tenancy instances by default. You can only launch instances with a tenancy of <code>dedicated</code> or <code>host</code> into a dedicated tenancy VPC. </p>
        /// <p> <b>Important:</b> The <code>host</code> value cannot be used with this parameter. Use the <code>default</code> or <code>dedicated</code> values only.</p>
        /// <p>Default: <code>default</code> </p>
        pub fn instance_tenancy(mut self, input: crate::model::Tenancy) -> Self {
            self.inner = self.inner.instance_tenancy(input);
            self
        }
        /// <p>The tenancy options for instances launched into the VPC. For <code>default</code>, instances are launched with shared tenancy by default. You can launch instances with any tenancy into a shared tenancy VPC. For <code>dedicated</code>, instances are launched as dedicated tenancy instances by default. You can only launch instances with a tenancy of <code>dedicated</code> or <code>host</code> into a dedicated tenancy VPC. </p>
        /// <p> <b>Important:</b> The <code>host</code> value cannot be used with this parameter. Use the <code>default</code> or <code>dedicated</code> values only.</p>
        /// <p>Default: <code>default</code> </p>
        pub fn set_instance_tenancy(
            mut self,
            input: std::option::Option<crate::model::Tenancy>,
        ) -> Self {
            self.inner = self.inner.set_instance_tenancy(input);
            self
        }
        /// <p>The name of the location from which we advertise the IPV6 CIDR block. Use this parameter to limit the address to this location.</p>
        /// <p> You must set <code>AmazonProvidedIpv6CidrBlock</code> to <code>true</code> to use this parameter.</p>
        pub fn ipv6_cidr_block_network_border_group(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .ipv6_cidr_block_network_border_group(input.into());
            self
        }
        /// <p>The name of the location from which we advertise the IPV6 CIDR block. Use this parameter to limit the address to this location.</p>
        /// <p> You must set <code>AmazonProvidedIpv6CidrBlock</code> to <code>true</code> to use this parameter.</p>
        pub fn set_ipv6_cidr_block_network_border_group(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_cidr_block_network_border_group(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the VPC.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the VPC.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVpcEndpoint`.
    ///
    /// <p>Creates a VPC endpoint for a specified service. An endpoint enables you to create a private connection between your VPC and the service. The service may be provided by Amazon Web Services, an Amazon Web Services Marketplace Partner, or another Amazon Web Services account. For more information, see the <a href="https://docs.aws.amazon.com/vpc/latest/privatelink/">Amazon Web Services PrivateLink Guide</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVpcEndpoint {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_vpc_endpoint_input::Builder,
    }
    impl CreateVpcEndpoint {
        /// Creates a new `CreateVpcEndpoint`.
        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::CreateVpcEndpoint,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVpcEndpointError>,
        > {
            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::CreateVpcEndpointOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVpcEndpointError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The type of endpoint.</p>
        /// <p>Default: Gateway</p>
        pub fn vpc_endpoint_type(mut self, input: crate::model::VpcEndpointType) -> Self {
            self.inner = self.inner.vpc_endpoint_type(input);
            self
        }
        /// <p>The type of endpoint.</p>
        /// <p>Default: Gateway</p>
        pub fn set_vpc_endpoint_type(
            mut self,
            input: std::option::Option<crate::model::VpcEndpointType>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_type(input);
            self
        }
        /// <p>The ID of the VPC for the endpoint.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC for the endpoint.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>The service name.</p>
        pub fn service_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_name(input.into());
            self
        }
        /// <p>The service name.</p>
        pub fn set_service_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_name(input);
            self
        }
        /// <p>(Interface and gateway endpoints) A policy to attach to the endpoint that controls access to the service. The policy must be in valid JSON format. If this parameter is not specified, we attach a default policy that allows full access to the service.</p>
        pub fn policy_document(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.policy_document(input.into());
            self
        }
        /// <p>(Interface and gateway endpoints) A policy to attach to the endpoint that controls access to the service. The policy must be in valid JSON format. If this parameter is not specified, we attach a default policy that allows full access to the service.</p>
        pub fn set_policy_document(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_policy_document(input);
            self
        }
        /// Appends an item to `RouteTableIds`.
        ///
        /// To override the contents of this collection use [`set_route_table_ids`](Self::set_route_table_ids).
        ///
        /// <p>(Gateway endpoint) The route table IDs.</p>
        pub fn route_table_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_ids(input.into());
            self
        }
        /// <p>(Gateway endpoint) The route table IDs.</p>
        pub fn set_route_table_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_route_table_ids(input);
            self
        }
        /// Appends an item to `SubnetIds`.
        ///
        /// To override the contents of this collection use [`set_subnet_ids`](Self::set_subnet_ids).
        ///
        /// <p>(Interface and Gateway Load Balancer endpoints) The IDs of the subnets in which to create an endpoint network interface. For a Gateway Load Balancer endpoint, you can specify only one subnet.</p>
        pub fn subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_ids(input.into());
            self
        }
        /// <p>(Interface and Gateway Load Balancer endpoints) The IDs of the subnets in which to create an endpoint network interface. For a Gateway Load Balancer endpoint, you can specify only one subnet.</p>
        pub fn set_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_subnet_ids(input);
            self
        }
        /// Appends an item to `SecurityGroupIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_ids`](Self::set_security_group_ids).
        ///
        /// <p>(Interface endpoint) The IDs of the security groups to associate with the endpoint network interface. If this parameter is not specified, we use the default security group for the VPC.</p>
        pub fn security_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_ids(input.into());
            self
        }
        /// <p>(Interface endpoint) The IDs of the security groups to associate with the endpoint network interface. If this parameter is not specified, we use the default security group for the VPC.</p>
        pub fn set_security_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_ids(input);
            self
        }
        /// <p>The IP address type for the endpoint.</p>
        pub fn ip_address_type(mut self, input: crate::model::IpAddressType) -> Self {
            self.inner = self.inner.ip_address_type(input);
            self
        }
        /// <p>The IP address type for the endpoint.</p>
        pub fn set_ip_address_type(
            mut self,
            input: std::option::Option<crate::model::IpAddressType>,
        ) -> Self {
            self.inner = self.inner.set_ip_address_type(input);
            self
        }
        /// <p>The DNS options for the endpoint.</p>
        pub fn dns_options(mut self, input: crate::model::DnsOptionsSpecification) -> Self {
            self.inner = self.inner.dns_options(input);
            self
        }
        /// <p>The DNS options for the endpoint.</p>
        pub fn set_dns_options(
            mut self,
            input: std::option::Option<crate::model::DnsOptionsSpecification>,
        ) -> Self {
            self.inner = self.inner.set_dns_options(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>(Interface endpoint) Indicates whether to associate a private hosted zone with the specified VPC. The private hosted zone contains a record set for the default public DNS name for the service for the Region (for example, <code>kinesis.us-east-1.amazonaws.com</code>), which resolves to the private IP addresses of the endpoint network interfaces in the VPC. This enables you to make requests to the default public DNS name for the service instead of the public DNS names that are automatically generated by the VPC endpoint service.</p>
        /// <p>To use a private hosted zone, you must set the following VPC attributes to <code>true</code>: <code>enableDnsHostnames</code> and <code>enableDnsSupport</code>. Use <code>ModifyVpcAttribute</code> to set the VPC attributes.</p>
        /// <p>Default: <code>true</code> </p>
        pub fn private_dns_enabled(mut self, input: bool) -> Self {
            self.inner = self.inner.private_dns_enabled(input);
            self
        }
        /// <p>(Interface endpoint) Indicates whether to associate a private hosted zone with the specified VPC. The private hosted zone contains a record set for the default public DNS name for the service for the Region (for example, <code>kinesis.us-east-1.amazonaws.com</code>), which resolves to the private IP addresses of the endpoint network interfaces in the VPC. This enables you to make requests to the default public DNS name for the service instead of the public DNS names that are automatically generated by the VPC endpoint service.</p>
        /// <p>To use a private hosted zone, you must set the following VPC attributes to <code>true</code>: <code>enableDnsHostnames</code> and <code>enableDnsSupport</code>. Use <code>ModifyVpcAttribute</code> to set the VPC attributes.</p>
        /// <p>Default: <code>true</code> </p>
        pub fn set_private_dns_enabled(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_private_dns_enabled(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to associate with the endpoint.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to associate with the endpoint.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVpcEndpointConnectionNotification`.
    ///
    /// <p>Creates a connection notification for a specified VPC endpoint or VPC endpoint service. A connection notification notifies you of specific endpoint events. You must create an SNS topic to receive notifications. For more information, see <a href="https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html">Create a Topic</a> in the <i>Amazon Simple Notification Service Developer Guide</i>.</p>
    /// <p>You can create a connection notification for interface endpoints only.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVpcEndpointConnectionNotification {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_vpc_endpoint_connection_notification_input::Builder,
    }
    impl CreateVpcEndpointConnectionNotification {
        /// Creates a new `CreateVpcEndpointConnectionNotification`.
        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::CreateVpcEndpointConnectionNotification,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::CreateVpcEndpointConnectionNotificationError,
            >,
        > {
            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::CreateVpcEndpointConnectionNotificationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::CreateVpcEndpointConnectionNotificationError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the endpoint service.</p>
        pub fn service_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_id(input.into());
            self
        }
        /// <p>The ID of the endpoint service.</p>
        pub fn set_service_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_id(input);
            self
        }
        /// <p>The ID of the endpoint.</p>
        pub fn vpc_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the endpoint.</p>
        pub fn set_vpc_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_id(input);
            self
        }
        /// <p>The ARN of the SNS topic for the notifications.</p>
        pub fn connection_notification_arn(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.connection_notification_arn(input.into());
            self
        }
        /// <p>The ARN of the SNS topic for the notifications.</p>
        pub fn set_connection_notification_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_connection_notification_arn(input);
            self
        }
        /// Appends an item to `ConnectionEvents`.
        ///
        /// To override the contents of this collection use [`set_connection_events`](Self::set_connection_events).
        ///
        /// <p>The endpoint events for which to receive notifications. Valid values are <code>Accept</code>, <code>Connect</code>, <code>Delete</code>, and <code>Reject</code>.</p>
        pub fn connection_events(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.connection_events(input.into());
            self
        }
        /// <p>The endpoint events for which to receive notifications. Valid values are <code>Accept</code>, <code>Connect</code>, <code>Delete</code>, and <code>Reject</code>.</p>
        pub fn set_connection_events(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_connection_events(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVpcEndpointServiceConfiguration`.
    ///
    /// <p>Creates a VPC endpoint service to which service consumers (Amazon Web Services accounts, users, and IAM roles) can connect.</p>
    /// <p>Before you create an endpoint service, you must create one of the following for your service:</p>
    /// <ul>
    /// <li> <p>A <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/network/">Network Load Balancer</a>. Service consumers connect to your service using an interface endpoint.</p> </li>
    /// <li> <p>A <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/">Gateway Load Balancer</a>. Service consumers connect to your service using a Gateway Load Balancer endpoint.</p> </li>
    /// </ul>
    /// <p>If you set the private DNS name, you must prove that you own the private DNS domain name.</p>
    /// <p>For more information, see the <a href="https://docs.aws.amazon.com/vpc/latest/privatelink/">Amazon Web Services PrivateLink Guide</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVpcEndpointServiceConfiguration {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_vpc_endpoint_service_configuration_input::Builder,
    }
    impl CreateVpcEndpointServiceConfiguration {
        /// Creates a new `CreateVpcEndpointServiceConfiguration`.
        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::CreateVpcEndpointServiceConfiguration,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::CreateVpcEndpointServiceConfigurationError,
            >,
        > {
            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::CreateVpcEndpointServiceConfigurationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::CreateVpcEndpointServiceConfigurationError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether requests from service consumers to create an endpoint to your service must be accepted manually.</p>
        pub fn acceptance_required(mut self, input: bool) -> Self {
            self.inner = self.inner.acceptance_required(input);
            self
        }
        /// <p>Indicates whether requests from service consumers to create an endpoint to your service must be accepted manually.</p>
        pub fn set_acceptance_required(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_acceptance_required(input);
            self
        }
        /// <p>(Interface endpoint configuration) The private DNS name to assign to the VPC endpoint service.</p>
        pub fn private_dns_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.private_dns_name(input.into());
            self
        }
        /// <p>(Interface endpoint configuration) The private DNS name to assign to the VPC endpoint service.</p>
        pub fn set_private_dns_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_private_dns_name(input);
            self
        }
        /// Appends an item to `NetworkLoadBalancerArns`.
        ///
        /// To override the contents of this collection use [`set_network_load_balancer_arns`](Self::set_network_load_balancer_arns).
        ///
        /// <p>The Amazon Resource Names (ARNs) of the Network Load Balancers.</p>
        pub fn network_load_balancer_arns(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_load_balancer_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARNs) of the Network Load Balancers.</p>
        pub fn set_network_load_balancer_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_load_balancer_arns(input);
            self
        }
        /// Appends an item to `GatewayLoadBalancerArns`.
        ///
        /// To override the contents of this collection use [`set_gateway_load_balancer_arns`](Self::set_gateway_load_balancer_arns).
        ///
        /// <p>The Amazon Resource Names (ARNs) of the Gateway Load Balancers.</p>
        pub fn gateway_load_balancer_arns(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.gateway_load_balancer_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARNs) of the Gateway Load Balancers.</p>
        pub fn set_gateway_load_balancer_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_gateway_load_balancer_arns(input);
            self
        }
        /// Appends an item to `SupportedIpAddressTypes`.
        ///
        /// To override the contents of this collection use [`set_supported_ip_address_types`](Self::set_supported_ip_address_types).
        ///
        /// <p>The supported IP address types. The possible values are <code>ipv4</code> and <code>ipv6</code>.</p>
        pub fn supported_ip_address_types(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.supported_ip_address_types(input.into());
            self
        }
        /// <p>The supported IP address types. The possible values are <code>ipv4</code> and <code>ipv6</code>.</p>
        pub fn set_supported_ip_address_types(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_supported_ip_address_types(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to associate with the service.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to associate with the service.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVpcPeeringConnection`.
    ///
    /// <p>Requests a VPC peering connection between two VPCs: a requester VPC that you own and an accepter VPC with which to create the connection. The accepter VPC can belong to another Amazon Web Services account and can be in a different Region to the requester VPC. The requester VPC and accepter VPC cannot have overlapping CIDR blocks.</p> <note>
    /// <p>Limitations and rules apply to a VPC peering connection. For more information, see the <a href="https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-basics.html#vpc-peering-limitations">limitations</a> section in the <i>VPC Peering Guide</i>.</p>
    /// </note>
    /// <p>The owner of the accepter VPC must accept the peering request to activate the peering connection. The VPC peering connection request expires after 7 days, after which it cannot be accepted or rejected.</p>
    /// <p>If you create a VPC peering connection request between VPCs with overlapping CIDR blocks, the VPC peering connection has a status of <code>failed</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVpcPeeringConnection {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_vpc_peering_connection_input::Builder,
    }
    impl CreateVpcPeeringConnection {
        /// Creates a new `CreateVpcPeeringConnection`.
        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::CreateVpcPeeringConnection,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVpcPeeringConnectionError>,
        > {
            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::CreateVpcPeeringConnectionOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVpcPeeringConnectionError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The Amazon Web Services account ID of the owner of the accepter VPC.</p>
        /// <p>Default: Your Amazon Web Services account ID</p>
        pub fn peer_owner_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.peer_owner_id(input.into());
            self
        }
        /// <p>The Amazon Web Services account ID of the owner of the accepter VPC.</p>
        /// <p>Default: Your Amazon Web Services account ID</p>
        pub fn set_peer_owner_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_peer_owner_id(input);
            self
        }
        /// <p>The ID of the VPC with which you are creating the VPC peering connection. You must specify this parameter in the request.</p>
        pub fn peer_vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.peer_vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC with which you are creating the VPC peering connection. You must specify this parameter in the request.</p>
        pub fn set_peer_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_peer_vpc_id(input);
            self
        }
        /// <p>The ID of the requester VPC. You must specify this parameter in the request.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the requester VPC. You must specify this parameter in the request.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>The Region code for the accepter VPC, if the accepter VPC is located in a Region other than the Region in which you make the request.</p>
        /// <p>Default: The Region in which you make the request.</p>
        pub fn peer_region(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.peer_region(input.into());
            self
        }
        /// <p>The Region code for the accepter VPC, if the accepter VPC is located in a Region other than the Region in which you make the request.</p>
        /// <p>Default: The Region in which you make the request.</p>
        pub fn set_peer_region(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_peer_region(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to assign to the peering connection.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to assign to the peering connection.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVpnConnection`.
    ///
    /// <p>Creates a VPN connection between an existing virtual private gateway or transit gateway and a customer gateway. The supported connection type is <code>ipsec.1</code>.</p>
    /// <p>The response includes information that you need to give to your network administrator to configure your customer gateway.</p> <important>
    /// <p>We strongly recommend that you use HTTPS when calling this operation because the response contains sensitive cryptographic information for configuring your customer gateway device.</p>
    /// </important>
    /// <p>If you decide to shut down your VPN connection for any reason and later create a new VPN connection, you must reconfigure your customer gateway with the new information returned from this call.</p>
    /// <p>This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html">Amazon Web Services Site-to-Site VPN</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVpnConnection {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_vpn_connection_input::Builder,
    }
    impl CreateVpnConnection {
        /// Creates a new `CreateVpnConnection`.
        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::CreateVpnConnection,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVpnConnectionError>,
        > {
            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::CreateVpnConnectionOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVpnConnectionError>,
        > {
            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 customer gateway.</p>
        pub fn customer_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.customer_gateway_id(input.into());
            self
        }
        /// <p>The ID of the customer gateway.</p>
        pub fn set_customer_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_customer_gateway_id(input);
            self
        }
        /// <p>The type of VPN connection (<code>ipsec.1</code>).</p>
        pub fn r#type(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.r#type(input.into());
            self
        }
        /// <p>The type of VPN connection (<code>ipsec.1</code>).</p>
        pub fn set_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// <p>The ID of the virtual private gateway. If you specify a virtual private gateway, you cannot specify a transit gateway.</p>
        pub fn vpn_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_gateway_id(input.into());
            self
        }
        /// <p>The ID of the virtual private gateway. If you specify a virtual private gateway, you cannot specify a transit gateway.</p>
        pub fn set_vpn_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_gateway_id(input);
            self
        }
        /// <p>The ID of the transit gateway. If you specify a transit gateway, you cannot specify a virtual private gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway. If you specify a transit gateway, you cannot specify a virtual private gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The options for the VPN connection.</p>
        pub fn options(mut self, input: crate::model::VpnConnectionOptionsSpecification) -> Self {
            self.inner = self.inner.options(input);
            self
        }
        /// <p>The options for the VPN connection.</p>
        pub fn set_options(
            mut self,
            input: std::option::Option<crate::model::VpnConnectionOptionsSpecification>,
        ) -> Self {
            self.inner = self.inner.set_options(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the VPN connection.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the VPN connection.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVpnConnectionRoute`.
    ///
    /// <p>Creates a static route associated with a VPN connection between an existing virtual private gateway and a VPN customer gateway. The static route allows traffic to be routed from the virtual private gateway to the VPN customer gateway.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html">Amazon Web Services Site-to-Site VPN</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVpnConnectionRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_vpn_connection_route_input::Builder,
    }
    impl CreateVpnConnectionRoute {
        /// Creates a new `CreateVpnConnectionRoute`.
        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::CreateVpnConnectionRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVpnConnectionRouteError>,
        > {
            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::CreateVpnConnectionRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVpnConnectionRouteError>,
        > {
            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 CIDR block associated with the local subnet of the customer network.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The CIDR block associated with the local subnet of the customer network.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The ID of the VPN connection.</p>
        pub fn vpn_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_id(input.into());
            self
        }
        /// <p>The ID of the VPN connection.</p>
        pub fn set_vpn_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `CreateVpnGateway`.
    ///
    /// <p>Creates a virtual private gateway. A virtual private gateway is the endpoint on the VPC side of your VPN connection. You can create a virtual private gateway before creating the VPC itself.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html">Amazon Web Services Site-to-Site VPN</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CreateVpnGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::create_vpn_gateway_input::Builder,
    }
    impl CreateVpnGateway {
        /// Creates a new `CreateVpnGateway`.
        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::CreateVpnGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::CreateVpnGatewayError>,
        > {
            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::CreateVpnGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::CreateVpnGatewayError>,
        > {
            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 Availability Zone for the virtual private gateway.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>The Availability Zone for the virtual private gateway.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// <p>The type of VPN connection this virtual private gateway supports.</p>
        pub fn r#type(mut self, input: crate::model::GatewayType) -> Self {
            self.inner = self.inner.r#type(input);
            self
        }
        /// <p>The type of VPN connection this virtual private gateway supports.</p>
        pub fn set_type(mut self, input: std::option::Option<crate::model::GatewayType>) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the virtual private gateway.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the virtual private gateway.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>A private Autonomous System Number (ASN) for the Amazon side of a BGP session. If you're using a 16-bit ASN, it must be in the 64512 to 65534 range. If you're using a 32-bit ASN, it must be in the 4200000000 to 4294967294 range.</p>
        /// <p>Default: 64512</p>
        pub fn amazon_side_asn(mut self, input: i64) -> Self {
            self.inner = self.inner.amazon_side_asn(input);
            self
        }
        /// <p>A private Autonomous System Number (ASN) for the Amazon side of a BGP session. If you're using a 16-bit ASN, it must be in the 64512 to 65534 range. If you're using a 32-bit ASN, it must be in the 4200000000 to 4294967294 range.</p>
        /// <p>Default: 64512</p>
        pub fn set_amazon_side_asn(mut self, input: std::option::Option<i64>) -> Self {
            self.inner = self.inner.set_amazon_side_asn(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteCarrierGateway`.
    ///
    /// <p>Deletes a carrier gateway.</p> <important>
    /// <p>If you do not delete the route that contains the carrier gateway as the Target, the route is a blackhole route. For information about how to delete a route, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteRoute.html">DeleteRoute</a>.</p>
    /// </important>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteCarrierGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_carrier_gateway_input::Builder,
    }
    impl DeleteCarrierGateway {
        /// Creates a new `DeleteCarrierGateway`.
        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::DeleteCarrierGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteCarrierGatewayError>,
        > {
            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::DeleteCarrierGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteCarrierGatewayError>,
        > {
            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 carrier gateway.</p>
        pub fn carrier_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.carrier_gateway_id(input.into());
            self
        }
        /// <p>The ID of the carrier gateway.</p>
        pub fn set_carrier_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_carrier_gateway_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteClientVpnEndpoint`.
    ///
    /// <p>Deletes the specified Client VPN endpoint. You must disassociate all target networks before you can delete a Client VPN endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteClientVpnEndpoint {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_client_vpn_endpoint_input::Builder,
    }
    impl DeleteClientVpnEndpoint {
        /// Creates a new `DeleteClientVpnEndpoint`.
        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::DeleteClientVpnEndpoint,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteClientVpnEndpointError>,
        > {
            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::DeleteClientVpnEndpointOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteClientVpnEndpointError>,
        > {
            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 Client VPN to be deleted.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN to be deleted.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteClientVpnRoute`.
    ///
    /// <p>Deletes a route from a Client VPN endpoint. You can only delete routes that you manually added using the <b>CreateClientVpnRoute</b> action. You cannot delete routes that were automatically added when associating a subnet. To remove routes that have been automatically added, disassociate the target subnet from the Client VPN endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteClientVpnRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_client_vpn_route_input::Builder,
    }
    impl DeleteClientVpnRoute {
        /// Creates a new `DeleteClientVpnRoute`.
        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::DeleteClientVpnRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteClientVpnRouteError>,
        > {
            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::DeleteClientVpnRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteClientVpnRouteError>,
        > {
            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 Client VPN endpoint from which the route is to be deleted.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint from which the route is to be deleted.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The ID of the target subnet used by the route.</p>
        pub fn target_vpc_subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.target_vpc_subnet_id(input.into());
            self
        }
        /// <p>The ID of the target subnet used by the route.</p>
        pub fn set_target_vpc_subnet_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_target_vpc_subnet_id(input);
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, of the route to be deleted.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, of the route to be deleted.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteCoipCidr`.
    ///
    /// <p> Deletes a range of customer-owned IP addresses. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteCoipCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_coip_cidr_input::Builder,
    }
    impl DeleteCoipCidr {
        /// Creates a new `DeleteCoipCidr`.
        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::DeleteCoipCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteCoipCidrError>,
        > {
            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::DeleteCoipCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteCoipCidrError>,
        > {
            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> A customer-owned IP address range that you want to delete. </p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p> A customer-owned IP address range that you want to delete. </p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p> The ID of the customer-owned address pool. </p>
        pub fn coip_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.coip_pool_id(input.into());
            self
        }
        /// <p> The ID of the customer-owned address pool. </p>
        pub fn set_coip_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_coip_pool_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteCoipPool`.
    ///
    /// <p>Deletes a pool of customer-owned IP (CoIP) addresses. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteCoipPool {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_coip_pool_input::Builder,
    }
    impl DeleteCoipPool {
        /// Creates a new `DeleteCoipPool`.
        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::DeleteCoipPool,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteCoipPoolError>,
        > {
            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::DeleteCoipPoolOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteCoipPoolError>,
        > {
            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 CoIP pool that you want to delete. </p>
        pub fn coip_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.coip_pool_id(input.into());
            self
        }
        /// <p>The ID of the CoIP pool that you want to delete. </p>
        pub fn set_coip_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_coip_pool_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteCustomerGateway`.
    ///
    /// <p>Deletes the specified customer gateway. You must delete the VPN connection before you can delete the customer gateway.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteCustomerGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_customer_gateway_input::Builder,
    }
    impl DeleteCustomerGateway {
        /// Creates a new `DeleteCustomerGateway`.
        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::DeleteCustomerGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteCustomerGatewayError>,
        > {
            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::DeleteCustomerGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteCustomerGatewayError>,
        > {
            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 customer gateway.</p>
        pub fn customer_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.customer_gateway_id(input.into());
            self
        }
        /// <p>The ID of the customer gateway.</p>
        pub fn set_customer_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_customer_gateway_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteDhcpOptions`.
    ///
    /// <p>Deletes the specified set of DHCP options. You must disassociate the set of DHCP options before you can delete it. You can disassociate the set of DHCP options by associating either a new set of options or the default set of options with the VPC.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteDhcpOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_dhcp_options_input::Builder,
    }
    impl DeleteDhcpOptions {
        /// Creates a new `DeleteDhcpOptions`.
        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::DeleteDhcpOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteDhcpOptionsError>,
        > {
            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::DeleteDhcpOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteDhcpOptionsError>,
        > {
            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 DHCP options set.</p>
        pub fn dhcp_options_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.dhcp_options_id(input.into());
            self
        }
        /// <p>The ID of the DHCP options set.</p>
        pub fn set_dhcp_options_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_dhcp_options_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteEgressOnlyInternetGateway`.
    ///
    /// <p>Deletes an egress-only internet gateway.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteEgressOnlyInternetGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_egress_only_internet_gateway_input::Builder,
    }
    impl DeleteEgressOnlyInternetGateway {
        /// Creates a new `DeleteEgressOnlyInternetGateway`.
        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::DeleteEgressOnlyInternetGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteEgressOnlyInternetGatewayError>,
        > {
            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::DeleteEgressOnlyInternetGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteEgressOnlyInternetGatewayError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the egress-only internet gateway.</p>
        pub fn egress_only_internet_gateway_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.egress_only_internet_gateway_id(input.into());
            self
        }
        /// <p>The ID of the egress-only internet gateway.</p>
        pub fn set_egress_only_internet_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_egress_only_internet_gateway_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteFleets`.
    ///
    /// <p>Deletes the specified EC2 Fleet.</p>
    /// <p>After you delete an EC2 Fleet, it launches no new instances.</p>
    /// <p>You must specify whether a deleted EC2 Fleet should also terminate its instances. If you choose to terminate the instances, the EC2 Fleet enters the <code>deleted_terminating</code> state. Otherwise, the EC2 Fleet enters the <code>deleted_running</code> state, and the instances continue to run until they are interrupted or you terminate them manually.</p>
    /// <p>For <code>instant</code> fleets, EC2 Fleet must terminate the instances when the fleet is deleted. A deleted <code>instant</code> fleet with running instances is not supported.</p>
    /// <p class="title"> <b>Restrictions</b> </p>
    /// <ul>
    /// <li> <p>You can delete up to 25 <code>instant</code> fleets in a single request. If you exceed this number, no <code>instant</code> fleets are deleted and an error is returned. There is no restriction on the number of fleets of type <code>maintain</code> or <code>request</code> that can be deleted in a single request.</p> </li>
    /// <li> <p>Up to 1000 instances can be terminated in a single request to delete <code>instant</code> fleets.</p> </li>
    /// </ul>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#delete-fleet">Delete an EC2 Fleet</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteFleets {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_fleets_input::Builder,
    }
    impl DeleteFleets {
        /// Creates a new `DeleteFleets`.
        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::DeleteFleets,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteFleetsError>,
        > {
            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::DeleteFleetsOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteFleetsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `FleetIds`.
        ///
        /// To override the contents of this collection use [`set_fleet_ids`](Self::set_fleet_ids).
        ///
        /// <p>The IDs of the EC2 Fleets.</p>
        pub fn fleet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fleet_ids(input.into());
            self
        }
        /// <p>The IDs of the EC2 Fleets.</p>
        pub fn set_fleet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_fleet_ids(input);
            self
        }
        /// <p>Indicates whether to terminate the instances when the EC2 Fleet is deleted. The default is to terminate the instances.</p>
        /// <p>To let the instances continue to run after the EC2 Fleet is deleted, specify <code>NoTerminateInstances</code>. Supported only for fleets of type <code>maintain</code> and <code>request</code>.</p>
        /// <p>For <code>instant</code> fleets, you cannot specify <code>NoTerminateInstances</code>. A deleted <code>instant</code> fleet with running instances is not supported.</p>
        pub fn terminate_instances(mut self, input: bool) -> Self {
            self.inner = self.inner.terminate_instances(input);
            self
        }
        /// <p>Indicates whether to terminate the instances when the EC2 Fleet is deleted. The default is to terminate the instances.</p>
        /// <p>To let the instances continue to run after the EC2 Fleet is deleted, specify <code>NoTerminateInstances</code>. Supported only for fleets of type <code>maintain</code> and <code>request</code>.</p>
        /// <p>For <code>instant</code> fleets, you cannot specify <code>NoTerminateInstances</code>. A deleted <code>instant</code> fleet with running instances is not supported.</p>
        pub fn set_terminate_instances(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_terminate_instances(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteFlowLogs`.
    ///
    /// <p>Deletes one or more flow logs.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteFlowLogs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_flow_logs_input::Builder,
    }
    impl DeleteFlowLogs {
        /// Creates a new `DeleteFlowLogs`.
        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::DeleteFlowLogs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteFlowLogsError>,
        > {
            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::DeleteFlowLogsOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteFlowLogsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `FlowLogIds`.
        ///
        /// To override the contents of this collection use [`set_flow_log_ids`](Self::set_flow_log_ids).
        ///
        /// <p>One or more flow log IDs.</p>
        /// <p>Constraint: Maximum of 1000 flow log IDs.</p>
        pub fn flow_log_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.flow_log_ids(input.into());
            self
        }
        /// <p>One or more flow log IDs.</p>
        /// <p>Constraint: Maximum of 1000 flow log IDs.</p>
        pub fn set_flow_log_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_flow_log_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteFpgaImage`.
    ///
    /// <p>Deletes the specified Amazon FPGA Image (AFI).</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteFpgaImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_fpga_image_input::Builder,
    }
    impl DeleteFpgaImage {
        /// Creates a new `DeleteFpgaImage`.
        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::DeleteFpgaImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteFpgaImageError>,
        > {
            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::DeleteFpgaImageOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteFpgaImageError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the AFI.</p>
        pub fn fpga_image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fpga_image_id(input.into());
            self
        }
        /// <p>The ID of the AFI.</p>
        pub fn set_fpga_image_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_fpga_image_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteInstanceEventWindow`.
    ///
    /// <p>Deletes the specified event window.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html">Define event windows for scheduled events</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteInstanceEventWindow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_instance_event_window_input::Builder,
    }
    impl DeleteInstanceEventWindow {
        /// Creates a new `DeleteInstanceEventWindow`.
        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::DeleteInstanceEventWindow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteInstanceEventWindowError>,
        > {
            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::DeleteInstanceEventWindowOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteInstanceEventWindowError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Specify <code>true</code> to force delete the event window. Use the force delete parameter if the event window is currently associated with targets.</p>
        pub fn force_delete(mut self, input: bool) -> Self {
            self.inner = self.inner.force_delete(input);
            self
        }
        /// <p>Specify <code>true</code> to force delete the event window. Use the force delete parameter if the event window is currently associated with targets.</p>
        pub fn set_force_delete(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_force_delete(input);
            self
        }
        /// <p>The ID of the event window.</p>
        pub fn instance_event_window_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_event_window_id(input.into());
            self
        }
        /// <p>The ID of the event window.</p>
        pub fn set_instance_event_window_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_event_window_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteInternetGateway`.
    ///
    /// <p>Deletes the specified internet gateway. You must detach the internet gateway from the VPC before you can delete it.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteInternetGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_internet_gateway_input::Builder,
    }
    impl DeleteInternetGateway {
        /// Creates a new `DeleteInternetGateway`.
        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::DeleteInternetGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteInternetGatewayError>,
        > {
            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::DeleteInternetGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteInternetGatewayError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the internet gateway.</p>
        pub fn internet_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.internet_gateway_id(input.into());
            self
        }
        /// <p>The ID of the internet gateway.</p>
        pub fn set_internet_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_internet_gateway_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteIpam`.
    ///
    /// <p>Delete an IPAM. Deleting an IPAM removes all monitored data associated with the IPAM including the historical data for CIDRs.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/delete-ipam.html">Delete an IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteIpam {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_ipam_input::Builder,
    }
    impl DeleteIpam {
        /// Creates a new `DeleteIpam`.
        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::DeleteIpam,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteIpamError>,
        > {
            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::DeleteIpamOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteIpamError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM to delete.</p>
        pub fn ipam_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_id(input.into());
            self
        }
        /// <p>The ID of the IPAM to delete.</p>
        pub fn set_ipam_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_id(input);
            self
        }
        /// <p>Enables you to quickly delete an IPAM, private scopes, pools in private scopes, and any allocations in the pools in private scopes. You cannot delete the IPAM with this option if there is a pool in your public scope. If you use this option, IPAM does the following:</p>
        /// <ul>
        /// <li> <p>Deallocates any CIDRs allocated to VPC resources (such as VPCs) in pools in private scopes.</p> <note>
        /// <p>No VPC resources are deleted as a result of enabling this option. The CIDR associated with the resource will no longer be allocated from an IPAM pool, but the CIDR itself will remain unchanged.</p>
        /// </note> </li>
        /// <li> <p>Deprovisions all IPv4 CIDRs provisioned to IPAM pools in private scopes.</p> </li>
        /// <li> <p>Deletes all IPAM pools in private scopes.</p> </li>
        /// <li> <p>Deletes all non-default private scopes in the IPAM.</p> </li>
        /// <li> <p>Deletes the default public and private scopes and the IPAM.</p> </li>
        /// </ul>
        pub fn cascade(mut self, input: bool) -> Self {
            self.inner = self.inner.cascade(input);
            self
        }
        /// <p>Enables you to quickly delete an IPAM, private scopes, pools in private scopes, and any allocations in the pools in private scopes. You cannot delete the IPAM with this option if there is a pool in your public scope. If you use this option, IPAM does the following:</p>
        /// <ul>
        /// <li> <p>Deallocates any CIDRs allocated to VPC resources (such as VPCs) in pools in private scopes.</p> <note>
        /// <p>No VPC resources are deleted as a result of enabling this option. The CIDR associated with the resource will no longer be allocated from an IPAM pool, but the CIDR itself will remain unchanged.</p>
        /// </note> </li>
        /// <li> <p>Deprovisions all IPv4 CIDRs provisioned to IPAM pools in private scopes.</p> </li>
        /// <li> <p>Deletes all IPAM pools in private scopes.</p> </li>
        /// <li> <p>Deletes all non-default private scopes in the IPAM.</p> </li>
        /// <li> <p>Deletes the default public and private scopes and the IPAM.</p> </li>
        /// </ul>
        pub fn set_cascade(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_cascade(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteIpamPool`.
    ///
    /// <p>Delete an IPAM pool.</p> <note>
    /// <p>You cannot delete an IPAM pool if there are allocations in it or CIDRs provisioned to it. To release allocations, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReleaseIpamPoolAllocation.html">ReleaseIpamPoolAllocation</a>. To deprovision pool CIDRs, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeprovisionIpamPoolCidr.html">DeprovisionIpamPoolCidr</a>.</p>
    /// </note>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/delete-pool-ipam.html">Delete a pool</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteIpamPool {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_ipam_pool_input::Builder,
    }
    impl DeleteIpamPool {
        /// Creates a new `DeleteIpamPool`.
        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::DeleteIpamPool,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteIpamPoolError>,
        > {
            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::DeleteIpamPoolOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteIpamPoolError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the pool to delete.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the pool to delete.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteIpamScope`.
    ///
    /// <p>Delete the scope for an IPAM. You cannot delete the default scopes.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/delete-scope-ipam.html">Delete a scope</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteIpamScope {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_ipam_scope_input::Builder,
    }
    impl DeleteIpamScope {
        /// Creates a new `DeleteIpamScope`.
        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::DeleteIpamScope,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteIpamScopeError>,
        > {
            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::DeleteIpamScopeOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteIpamScopeError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the scope to delete.</p>
        pub fn ipam_scope_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_scope_id(input.into());
            self
        }
        /// <p>The ID of the scope to delete.</p>
        pub fn set_ipam_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipam_scope_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteKeyPair`.
    ///
    /// <p>Deletes the specified key pair, by removing the public key from Amazon EC2.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteKeyPair {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_key_pair_input::Builder,
    }
    impl DeleteKeyPair {
        /// Creates a new `DeleteKeyPair`.
        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::DeleteKeyPair,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteKeyPairError>,
        > {
            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::DeleteKeyPairOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteKeyPairError>,
        > {
            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 key pair.</p>
        pub fn key_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.key_name(input.into());
            self
        }
        /// <p>The name of the key pair.</p>
        pub fn set_key_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_key_name(input);
            self
        }
        /// <p>The ID of the key pair.</p>
        pub fn key_pair_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.key_pair_id(input.into());
            self
        }
        /// <p>The ID of the key pair.</p>
        pub fn set_key_pair_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_key_pair_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteLaunchTemplate`.
    ///
    /// <p>Deletes a launch template. Deleting a launch template deletes all of its versions.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteLaunchTemplate {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_launch_template_input::Builder,
    }
    impl DeleteLaunchTemplate {
        /// Creates a new `DeleteLaunchTemplate`.
        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::DeleteLaunchTemplate,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteLaunchTemplateError>,
        > {
            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::DeleteLaunchTemplateOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteLaunchTemplateError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        pub fn launch_template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_id(input.into());
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        pub fn set_launch_template_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_id(input);
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        pub fn launch_template_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_name(input.into());
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        pub fn set_launch_template_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_name(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteLaunchTemplateVersions`.
    ///
    /// <p>Deletes one or more versions of a launch template. You cannot delete the default version of a launch template; you must first assign a different version as the default. If the default version is the only version for the launch template, you must delete the entire launch template using <code>DeleteLaunchTemplate</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteLaunchTemplateVersions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_launch_template_versions_input::Builder,
    }
    impl DeleteLaunchTemplateVersions {
        /// Creates a new `DeleteLaunchTemplateVersions`.
        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::DeleteLaunchTemplateVersions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteLaunchTemplateVersionsError>,
        > {
            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::DeleteLaunchTemplateVersionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteLaunchTemplateVersionsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        pub fn launch_template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_id(input.into());
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        pub fn set_launch_template_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_id(input);
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        pub fn launch_template_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_name(input.into());
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        pub fn set_launch_template_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_name(input);
            self
        }
        /// Appends an item to `Versions`.
        ///
        /// To override the contents of this collection use [`set_versions`](Self::set_versions).
        ///
        /// <p>The version numbers of one or more launch template versions to delete.</p>
        pub fn versions(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.versions(input.into());
            self
        }
        /// <p>The version numbers of one or more launch template versions to delete.</p>
        pub fn set_versions(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_versions(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteLocalGatewayRoute`.
    ///
    /// <p>Deletes the specified route from the specified local gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteLocalGatewayRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_local_gateway_route_input::Builder,
    }
    impl DeleteLocalGatewayRoute {
        /// Creates a new `DeleteLocalGatewayRoute`.
        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::DeleteLocalGatewayRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteLocalGatewayRouteError>,
        > {
            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::DeleteLocalGatewayRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteLocalGatewayRouteError>,
        > {
            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 CIDR range for the route. This must match the CIDR for the route exactly.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The CIDR range for the route. This must match the CIDR for the route exactly.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn local_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn set_local_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteLocalGatewayRouteTable`.
    ///
    /// <p> Deletes a local gateway route table. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteLocalGatewayRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_local_gateway_route_table_input::Builder,
    }
    impl DeleteLocalGatewayRouteTable {
        /// Creates a new `DeleteLocalGatewayRouteTable`.
        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::DeleteLocalGatewayRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteLocalGatewayRouteTableError>,
        > {
            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::DeleteLocalGatewayRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteLocalGatewayRouteTableError>,
        > {
            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 local gateway route table. </p>
        pub fn local_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_id(input.into());
            self
        }
        /// <p> The ID of the local gateway route table. </p>
        pub fn set_local_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation`.
    ///
    /// <p> Deletes a local gateway route table virtual interface group association. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation {
                            handle: std::sync::Arc<super::Handle>,
                            inner: crate::input::delete_local_gateway_route_table_virtual_interface_group_association_input::Builder
                        }
    impl DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation {
        /// Creates a new `DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation`.
        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::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationError,
            >,
        > {
            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::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationError,
            >,
        > {
            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 local gateway route table virtual interface group association. </p>
        pub fn local_gateway_route_table_virtual_interface_group_association_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .local_gateway_route_table_virtual_interface_group_association_id(input.into());
            self
        }
        /// <p> The ID of the local gateway route table virtual interface group association. </p>
        pub fn set_local_gateway_route_table_virtual_interface_group_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_local_gateway_route_table_virtual_interface_group_association_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteLocalGatewayRouteTableVpcAssociation`.
    ///
    /// <p>Deletes the specified association between a VPC and local gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteLocalGatewayRouteTableVpcAssociation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_local_gateway_route_table_vpc_association_input::Builder,
    }
    impl DeleteLocalGatewayRouteTableVpcAssociation {
        /// Creates a new `DeleteLocalGatewayRouteTableVpcAssociation`.
        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::DeleteLocalGatewayRouteTableVpcAssociation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteLocalGatewayRouteTableVpcAssociationError,
            >,
        > {
            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::DeleteLocalGatewayRouteTableVpcAssociationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteLocalGatewayRouteTableVpcAssociationError,
            >,
        > {
            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 association.</p>
        pub fn local_gateway_route_table_vpc_association_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .local_gateway_route_table_vpc_association_id(input.into());
            self
        }
        /// <p>The ID of the association.</p>
        pub fn set_local_gateway_route_table_vpc_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_local_gateway_route_table_vpc_association_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteManagedPrefixList`.
    ///
    /// <p>Deletes the specified managed prefix list. You must first remove all references to the prefix list in your resources.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteManagedPrefixList {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_managed_prefix_list_input::Builder,
    }
    impl DeleteManagedPrefixList {
        /// Creates a new `DeleteManagedPrefixList`.
        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::DeleteManagedPrefixList,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteManagedPrefixListError>,
        > {
            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::DeleteManagedPrefixListOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteManagedPrefixListError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn set_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNatGateway`.
    ///
    /// <p>Deletes the specified NAT gateway. Deleting a public NAT gateway disassociates its Elastic IP address, but does not release the address from your account. Deleting a NAT gateway does not delete any NAT gateway routes in your route tables.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNatGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_nat_gateway_input::Builder,
    }
    impl DeleteNatGateway {
        /// Creates a new `DeleteNatGateway`.
        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::DeleteNatGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNatGatewayError>,
        > {
            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::DeleteNatGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNatGatewayError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the NAT gateway.</p>
        pub fn nat_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.nat_gateway_id(input.into());
            self
        }
        /// <p>The ID of the NAT gateway.</p>
        pub fn set_nat_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_nat_gateway_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNetworkAcl`.
    ///
    /// <p>Deletes the specified network ACL. You can't delete the ACL if it's associated with any subnets. You can't delete the default network ACL.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNetworkAcl {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_network_acl_input::Builder,
    }
    impl DeleteNetworkAcl {
        /// Creates a new `DeleteNetworkAcl`.
        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::DeleteNetworkAcl,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkAclError>,
        > {
            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::DeleteNetworkAclOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkAclError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the network ACL.</p>
        pub fn network_acl_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_acl_id(input.into());
            self
        }
        /// <p>The ID of the network ACL.</p>
        pub fn set_network_acl_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_acl_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNetworkAclEntry`.
    ///
    /// <p>Deletes the specified ingress or egress entry (rule) from the specified network ACL.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNetworkAclEntry {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_network_acl_entry_input::Builder,
    }
    impl DeleteNetworkAclEntry {
        /// Creates a new `DeleteNetworkAclEntry`.
        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::DeleteNetworkAclEntry,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkAclEntryError>,
        > {
            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::DeleteNetworkAclEntryOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkAclEntryError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether the rule is an egress rule.</p>
        pub fn egress(mut self, input: bool) -> Self {
            self.inner = self.inner.egress(input);
            self
        }
        /// <p>Indicates whether the rule is an egress rule.</p>
        pub fn set_egress(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_egress(input);
            self
        }
        /// <p>The ID of the network ACL.</p>
        pub fn network_acl_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_acl_id(input.into());
            self
        }
        /// <p>The ID of the network ACL.</p>
        pub fn set_network_acl_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_acl_id(input);
            self
        }
        /// <p>The rule number of the entry to delete.</p>
        pub fn rule_number(mut self, input: i32) -> Self {
            self.inner = self.inner.rule_number(input);
            self
        }
        /// <p>The rule number of the entry to delete.</p>
        pub fn set_rule_number(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_rule_number(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNetworkInsightsAccessScope`.
    ///
    /// <p>Deletes the specified Network Access Scope.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNetworkInsightsAccessScope {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_network_insights_access_scope_input::Builder,
    }
    impl DeleteNetworkInsightsAccessScope {
        /// Creates a new `DeleteNetworkInsightsAccessScope`.
        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::DeleteNetworkInsightsAccessScope,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInsightsAccessScopeError>,
        > {
            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::DeleteNetworkInsightsAccessScopeOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInsightsAccessScopeError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the Network Access Scope.</p>
        pub fn network_insights_access_scope_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_insights_access_scope_id(input.into());
            self
        }
        /// <p>The ID of the Network Access Scope.</p>
        pub fn set_network_insights_access_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_access_scope_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNetworkInsightsAccessScopeAnalysis`.
    ///
    /// <p>Deletes the specified Network Access Scope analysis.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNetworkInsightsAccessScopeAnalysis {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_network_insights_access_scope_analysis_input::Builder,
    }
    impl DeleteNetworkInsightsAccessScopeAnalysis {
        /// Creates a new `DeleteNetworkInsightsAccessScopeAnalysis`.
        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::DeleteNetworkInsightsAccessScopeAnalysis,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteNetworkInsightsAccessScopeAnalysisError,
            >,
        > {
            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::DeleteNetworkInsightsAccessScopeAnalysisOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteNetworkInsightsAccessScopeAnalysisError,
            >,
        > {
            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 Network Access Scope analysis.</p>
        pub fn network_insights_access_scope_analysis_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .network_insights_access_scope_analysis_id(input.into());
            self
        }
        /// <p>The ID of the Network Access Scope analysis.</p>
        pub fn set_network_insights_access_scope_analysis_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_network_insights_access_scope_analysis_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNetworkInsightsAnalysis`.
    ///
    /// <p>Deletes the specified network insights analysis.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNetworkInsightsAnalysis {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_network_insights_analysis_input::Builder,
    }
    impl DeleteNetworkInsightsAnalysis {
        /// Creates a new `DeleteNetworkInsightsAnalysis`.
        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::DeleteNetworkInsightsAnalysis,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInsightsAnalysisError>,
        > {
            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::DeleteNetworkInsightsAnalysisOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInsightsAnalysisError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the network insights analysis.</p>
        pub fn network_insights_analysis_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_insights_analysis_id(input.into());
            self
        }
        /// <p>The ID of the network insights analysis.</p>
        pub fn set_network_insights_analysis_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_analysis_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNetworkInsightsPath`.
    ///
    /// <p>Deletes the specified path.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNetworkInsightsPath {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_network_insights_path_input::Builder,
    }
    impl DeleteNetworkInsightsPath {
        /// Creates a new `DeleteNetworkInsightsPath`.
        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::DeleteNetworkInsightsPath,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInsightsPathError>,
        > {
            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::DeleteNetworkInsightsPathOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInsightsPathError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the path.</p>
        pub fn network_insights_path_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_insights_path_id(input.into());
            self
        }
        /// <p>The ID of the path.</p>
        pub fn set_network_insights_path_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_path_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNetworkInterface`.
    ///
    /// <p>Deletes the specified network interface. You must detach the network interface before you can delete it.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNetworkInterface {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_network_interface_input::Builder,
    }
    impl DeleteNetworkInterface {
        /// Creates a new `DeleteNetworkInterface`.
        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::DeleteNetworkInterface,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInterfaceError>,
        > {
            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::DeleteNetworkInterfaceOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInterfaceError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteNetworkInterfacePermission`.
    ///
    /// <p>Deletes a permission for a network interface. By default, you cannot delete the permission if the account for which you're removing the permission has attached the network interface to an instance. However, you can force delete the permission, regardless of any attachment.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteNetworkInterfacePermission {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_network_interface_permission_input::Builder,
    }
    impl DeleteNetworkInterfacePermission {
        /// Creates a new `DeleteNetworkInterfacePermission`.
        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::DeleteNetworkInterfacePermission,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInterfacePermissionError>,
        > {
            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::DeleteNetworkInterfacePermissionOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteNetworkInterfacePermissionError>,
        > {
            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 network interface permission.</p>
        pub fn network_interface_permission_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_interface_permission_id(input.into());
            self
        }
        /// <p>The ID of the network interface permission.</p>
        pub fn set_network_interface_permission_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_permission_id(input);
            self
        }
        /// <p>Specify <code>true</code> to remove the permission even if the network interface is attached to an instance.</p>
        pub fn force(mut self, input: bool) -> Self {
            self.inner = self.inner.force(input);
            self
        }
        /// <p>Specify <code>true</code> to remove the permission even if the network interface is attached to an instance.</p>
        pub fn set_force(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_force(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeletePlacementGroup`.
    ///
    /// <p>Deletes the specified placement group. You must terminate all instances in the placement group before you can delete the placement group. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html">Placement groups</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeletePlacementGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_placement_group_input::Builder,
    }
    impl DeletePlacementGroup {
        /// Creates a new `DeletePlacementGroup`.
        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::DeletePlacementGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeletePlacementGroupError>,
        > {
            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::DeletePlacementGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::DeletePlacementGroupError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The name of the placement group.</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>The name of the placement group.</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeletePublicIpv4Pool`.
    ///
    /// <p>Delete a public IPv4 pool. A public IPv4 pool is an EC2 IP address pool required for the public IPv4 CIDRs that you own and bring to Amazon Web Services to manage with IPAM. IPv6 addresses you bring to Amazon Web Services, however, use IPAM pools only.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeletePublicIpv4Pool {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_public_ipv4_pool_input::Builder,
    }
    impl DeletePublicIpv4Pool {
        /// Creates a new `DeletePublicIpv4Pool`.
        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::DeletePublicIpv4Pool,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeletePublicIpv4PoolError>,
        > {
            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::DeletePublicIpv4PoolOutput,
            aws_smithy_http::result::SdkError<crate::error::DeletePublicIpv4PoolError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the public IPv4 pool you want to delete.</p>
        pub fn pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.pool_id(input.into());
            self
        }
        /// <p>The ID of the public IPv4 pool you want to delete.</p>
        pub fn set_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_pool_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteQueuedReservedInstances`.
    ///
    /// <p>Deletes the queued purchases for the specified Reserved Instances.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteQueuedReservedInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_queued_reserved_instances_input::Builder,
    }
    impl DeleteQueuedReservedInstances {
        /// Creates a new `DeleteQueuedReservedInstances`.
        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::DeleteQueuedReservedInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteQueuedReservedInstancesError>,
        > {
            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::DeleteQueuedReservedInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteQueuedReservedInstancesError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `ReservedInstancesIds`.
        ///
        /// To override the contents of this collection use [`set_reserved_instances_ids`](Self::set_reserved_instances_ids).
        ///
        /// <p>The IDs of the Reserved Instances.</p>
        pub fn reserved_instances_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.reserved_instances_ids(input.into());
            self
        }
        /// <p>The IDs of the Reserved Instances.</p>
        pub fn set_reserved_instances_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteRoute`.
    ///
    /// <p>Deletes the specified route from the specified route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_route_input::Builder,
    }
    impl DeleteRoute {
        /// Creates a new `DeleteRoute`.
        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::DeleteRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteRouteError>,
        > {
            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::DeleteRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteRouteError>,
        > {
            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 IPv4 CIDR range for the route. The value you specify must match the CIDR for the route exactly.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The IPv4 CIDR range for the route. The value you specify must match the CIDR for the route exactly.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The IPv6 CIDR range for the route. The value you specify must match the CIDR for the route exactly.</p>
        pub fn destination_ipv6_cidr_block(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.destination_ipv6_cidr_block(input.into());
            self
        }
        /// <p>The IPv6 CIDR range for the route. The value you specify must match the CIDR for the route exactly.</p>
        pub fn set_destination_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_ipv6_cidr_block(input);
            self
        }
        /// <p>The ID of the prefix list for the route.</p>
        pub fn destination_prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list for the route.</p>
        pub fn set_destination_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_prefix_list_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn route_table_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn set_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_route_table_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteRouteTable`.
    ///
    /// <p>Deletes the specified route table. You must disassociate the route table from any subnets before you can delete it. You can't delete the main route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_route_table_input::Builder,
    }
    impl DeleteRouteTable {
        /// Creates a new `DeleteRouteTable`.
        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::DeleteRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteRouteTableError>,
        > {
            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::DeleteRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteRouteTableError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn route_table_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn set_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_route_table_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteSecurityGroup`.
    ///
    /// <p>Deletes a security group.</p>
    /// <p>If you attempt to delete a security group that is associated with an instance, or is referenced by another security group, the operation fails with <code>InvalidGroup.InUse</code> in EC2-Classic or <code>DependencyViolation</code> in EC2-VPC.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteSecurityGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_security_group_input::Builder,
    }
    impl DeleteSecurityGroup {
        /// Creates a new `DeleteSecurityGroup`.
        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::DeleteSecurityGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteSecurityGroupError>,
        > {
            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::DeleteSecurityGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteSecurityGroupError>,
        > {
            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 security group. Required for a nondefault VPC.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The ID of the security group. Required for a nondefault VPC.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the security group. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the security group. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteSnapshot`.
    ///
    /// <p>Deletes the specified snapshot.</p>
    /// <p>When you make periodic snapshots of a volume, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the volume.</p>
    /// <p>You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first de-register the AMI before you can delete the snapshot.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-snapshot.html">Delete an Amazon EBS snapshot</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteSnapshot {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_snapshot_input::Builder,
    }
    impl DeleteSnapshot {
        /// Creates a new `DeleteSnapshot`.
        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::DeleteSnapshot,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteSnapshotError>,
        > {
            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::DeleteSnapshotOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteSnapshotError>,
        > {
            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 EBS snapshot.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The ID of the EBS snapshot.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteSpotDatafeedSubscription`.
    ///
    /// <p>Deletes the data feed for Spot Instances.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteSpotDatafeedSubscription {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_spot_datafeed_subscription_input::Builder,
    }
    impl DeleteSpotDatafeedSubscription {
        /// Creates a new `DeleteSpotDatafeedSubscription`.
        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::DeleteSpotDatafeedSubscription,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteSpotDatafeedSubscriptionError>,
        > {
            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::DeleteSpotDatafeedSubscriptionOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteSpotDatafeedSubscriptionError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteSubnet`.
    ///
    /// <p>Deletes the specified subnet. You must terminate all running instances in the subnet before you can delete the subnet.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteSubnet {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_subnet_input::Builder,
    }
    impl DeleteSubnet {
        /// Creates a new `DeleteSubnet`.
        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::DeleteSubnet,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteSubnetError>,
        > {
            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::DeleteSubnetOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteSubnetError>,
        > {
            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 subnet.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The ID of the subnet.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteSubnetCidrReservation`.
    ///
    /// <p>Deletes a subnet CIDR reservation.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteSubnetCidrReservation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_subnet_cidr_reservation_input::Builder,
    }
    impl DeleteSubnetCidrReservation {
        /// Creates a new `DeleteSubnetCidrReservation`.
        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::DeleteSubnetCidrReservation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteSubnetCidrReservationError>,
        > {
            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::DeleteSubnetCidrReservationOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteSubnetCidrReservationError>,
        > {
            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 subnet CIDR reservation.</p>
        pub fn subnet_cidr_reservation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_cidr_reservation_id(input.into());
            self
        }
        /// <p>The ID of the subnet CIDR reservation.</p>
        pub fn set_subnet_cidr_reservation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_subnet_cidr_reservation_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTags`.
    ///
    /// <p>Deletes the specified set of tags from the specified set of resources.</p>
    /// <p>To list the current tags, use <code>DescribeTags</code>. For more information about tags, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html">Tag your Amazon EC2 resources</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTags {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_tags_input::Builder,
    }
    impl DeleteTags {
        /// Creates a new `DeleteTags`.
        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::DeleteTags,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTagsError>,
        > {
            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::DeleteTagsOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTagsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Resources`.
        ///
        /// To override the contents of this collection use [`set_resources`](Self::set_resources).
        ///
        /// <p>The IDs of the resources, separated by spaces.</p>
        /// <p>Constraints: Up to 1000 resource IDs. We recommend breaking up this request into smaller batches.</p>
        pub fn resources(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resources(input.into());
            self
        }
        /// <p>The IDs of the resources, separated by spaces.</p>
        /// <p>Constraints: Up to 1000 resource IDs. We recommend breaking up this request into smaller batches.</p>
        pub fn set_resources(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_resources(input);
            self
        }
        /// Appends an item to `Tags`.
        ///
        /// To override the contents of this collection use [`set_tags`](Self::set_tags).
        ///
        /// <p>The tags to delete. Specify a tag key and an optional tag value to delete specific tags. If you specify a tag key without a tag value, we delete any tag with this key regardless of its value. If you specify a tag key with an empty string as the tag value, we delete the tag only if its value is an empty string.</p>
        /// <p>If you omit this parameter, we delete all user-defined tags for the specified resources. We do not delete Amazon Web Services-generated tags (tags that have the <code>aws:</code> prefix).</p>
        /// <p>Constraints: Up to 1000 tags.</p>
        pub fn tags(mut self, input: crate::model::Tag) -> Self {
            self.inner = self.inner.tags(input);
            self
        }
        /// <p>The tags to delete. Specify a tag key and an optional tag value to delete specific tags. If you specify a tag key without a tag value, we delete any tag with this key regardless of its value. If you specify a tag key with an empty string as the tag value, we delete the tag only if its value is an empty string.</p>
        /// <p>If you omit this parameter, we delete all user-defined tags for the specified resources. We do not delete Amazon Web Services-generated tags (tags that have the <code>aws:</code> prefix).</p>
        /// <p>Constraints: Up to 1000 tags.</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 `DeleteTrafficMirrorFilter`.
    ///
    /// <p>Deletes the specified Traffic Mirror filter.</p>
    /// <p>You cannot delete a Traffic Mirror filter that is in use by a Traffic Mirror session.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTrafficMirrorFilter {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_traffic_mirror_filter_input::Builder,
    }
    impl DeleteTrafficMirrorFilter {
        /// Creates a new `DeleteTrafficMirrorFilter`.
        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::DeleteTrafficMirrorFilter,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTrafficMirrorFilterError>,
        > {
            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::DeleteTrafficMirrorFilterOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTrafficMirrorFilterError>,
        > {
            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 Traffic Mirror filter.</p>
        pub fn traffic_mirror_filter_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_filter_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror filter.</p>
        pub fn set_traffic_mirror_filter_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_filter_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTrafficMirrorFilterRule`.
    ///
    /// <p>Deletes the specified Traffic Mirror rule.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTrafficMirrorFilterRule {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_traffic_mirror_filter_rule_input::Builder,
    }
    impl DeleteTrafficMirrorFilterRule {
        /// Creates a new `DeleteTrafficMirrorFilterRule`.
        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::DeleteTrafficMirrorFilterRule,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTrafficMirrorFilterRuleError>,
        > {
            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::DeleteTrafficMirrorFilterRuleOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTrafficMirrorFilterRuleError>,
        > {
            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 Traffic Mirror rule.</p>
        pub fn traffic_mirror_filter_rule_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.traffic_mirror_filter_rule_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror rule.</p>
        pub fn set_traffic_mirror_filter_rule_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_filter_rule_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTrafficMirrorSession`.
    ///
    /// <p>Deletes the specified Traffic Mirror session.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTrafficMirrorSession {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_traffic_mirror_session_input::Builder,
    }
    impl DeleteTrafficMirrorSession {
        /// Creates a new `DeleteTrafficMirrorSession`.
        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::DeleteTrafficMirrorSession,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTrafficMirrorSessionError>,
        > {
            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::DeleteTrafficMirrorSessionOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTrafficMirrorSessionError>,
        > {
            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 Traffic Mirror session.</p>
        pub fn traffic_mirror_session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_session_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror session.</p>
        pub fn set_traffic_mirror_session_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_session_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTrafficMirrorTarget`.
    ///
    /// <p>Deletes the specified Traffic Mirror target.</p>
    /// <p>You cannot delete a Traffic Mirror target that is in use by a Traffic Mirror session.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTrafficMirrorTarget {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_traffic_mirror_target_input::Builder,
    }
    impl DeleteTrafficMirrorTarget {
        /// Creates a new `DeleteTrafficMirrorTarget`.
        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::DeleteTrafficMirrorTarget,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTrafficMirrorTargetError>,
        > {
            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::DeleteTrafficMirrorTargetOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTrafficMirrorTargetError>,
        > {
            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 Traffic Mirror target.</p>
        pub fn traffic_mirror_target_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_target_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror target.</p>
        pub fn set_traffic_mirror_target_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_target_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGateway`.
    ///
    /// <p>Deletes the specified transit gateway.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_input::Builder,
    }
    impl DeleteTransitGateway {
        /// Creates a new `DeleteTransitGateway`.
        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::DeleteTransitGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayError>,
        > {
            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::DeleteTransitGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayError>,
        > {
            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 transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayConnect`.
    ///
    /// <p>Deletes the specified Connect attachment. You must first delete any Connect peers for the attachment.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayConnect {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_connect_input::Builder,
    }
    impl DeleteTransitGatewayConnect {
        /// Creates a new `DeleteTransitGatewayConnect`.
        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::DeleteTransitGatewayConnect,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayConnectError>,
        > {
            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::DeleteTransitGatewayConnectOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayConnectError>,
        > {
            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 Connect attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the Connect attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayConnectPeer`.
    ///
    /// <p>Deletes the specified Connect peer.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayConnectPeer {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_connect_peer_input::Builder,
    }
    impl DeleteTransitGatewayConnectPeer {
        /// Creates a new `DeleteTransitGatewayConnectPeer`.
        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::DeleteTransitGatewayConnectPeer,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayConnectPeerError>,
        > {
            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::DeleteTransitGatewayConnectPeerOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayConnectPeerError>,
        > {
            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 Connect peer.</p>
        pub fn transit_gateway_connect_peer_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_connect_peer_id(input.into());
            self
        }
        /// <p>The ID of the Connect peer.</p>
        pub fn set_transit_gateway_connect_peer_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_connect_peer_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayMulticastDomain`.
    ///
    /// <p>Deletes the specified transit gateway multicast domain.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayMulticastDomain {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_multicast_domain_input::Builder,
    }
    impl DeleteTransitGatewayMulticastDomain {
        /// Creates a new `DeleteTransitGatewayMulticastDomain`.
        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::DeleteTransitGatewayMulticastDomain,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteTransitGatewayMulticastDomainError,
            >,
        > {
            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::DeleteTransitGatewayMulticastDomainOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteTransitGatewayMulticastDomainError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayPeeringAttachment`.
    ///
    /// <p>Deletes a transit gateway peering attachment.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayPeeringAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_peering_attachment_input::Builder,
    }
    impl DeleteTransitGatewayPeeringAttachment {
        /// Creates a new `DeleteTransitGatewayPeeringAttachment`.
        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::DeleteTransitGatewayPeeringAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteTransitGatewayPeeringAttachmentError,
            >,
        > {
            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::DeleteTransitGatewayPeeringAttachmentOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteTransitGatewayPeeringAttachmentError,
            >,
        > {
            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 transit gateway peering attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway peering attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayPolicyTable`.
    ///
    /// <p>Deletes the specified transit gateway policy table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayPolicyTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_policy_table_input::Builder,
    }
    impl DeleteTransitGatewayPolicyTable {
        /// Creates a new `DeleteTransitGatewayPolicyTable`.
        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::DeleteTransitGatewayPolicyTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayPolicyTableError>,
        > {
            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::DeleteTransitGatewayPolicyTableOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayPolicyTableError>,
        > {
            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 transit gateway policy table to delete.</p>
        pub fn transit_gateway_policy_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_policy_table_id(input.into());
            self
        }
        /// <p>The transit gateway policy table to delete.</p>
        pub fn set_transit_gateway_policy_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_policy_table_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayPrefixListReference`.
    ///
    /// <p>Deletes a reference (route) to a prefix list in a specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayPrefixListReference {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_prefix_list_reference_input::Builder,
    }
    impl DeleteTransitGatewayPrefixListReference {
        /// Creates a new `DeleteTransitGatewayPrefixListReference`.
        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::DeleteTransitGatewayPrefixListReference,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteTransitGatewayPrefixListReferenceError,
            >,
        > {
            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::DeleteTransitGatewayPrefixListReferenceOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteTransitGatewayPrefixListReferenceError,
            >,
        > {
            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 route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn set_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayRoute`.
    ///
    /// <p>Deletes the specified route from the specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_route_input::Builder,
    }
    impl DeleteTransitGatewayRoute {
        /// Creates a new `DeleteTransitGatewayRoute`.
        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::DeleteTransitGatewayRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayRouteError>,
        > {
            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::DeleteTransitGatewayRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayRouteError>,
        > {
            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 transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The CIDR range for the route. This must match the CIDR for the route exactly.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The CIDR range for the route. This must match the CIDR for the route exactly.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayRouteTable`.
    ///
    /// <p>Deletes the specified transit gateway route table. You must disassociate the route table from any transit gateway route tables before you can delete it.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_route_table_input::Builder,
    }
    impl DeleteTransitGatewayRouteTable {
        /// Creates a new `DeleteTransitGatewayRouteTable`.
        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::DeleteTransitGatewayRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayRouteTableError>,
        > {
            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::DeleteTransitGatewayRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayRouteTableError>,
        > {
            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 transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayRouteTableAnnouncement`.
    ///
    /// <p>Advertises to the transit gateway that a transit gateway route table is deleted.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayRouteTableAnnouncement {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_route_table_announcement_input::Builder,
    }
    impl DeleteTransitGatewayRouteTableAnnouncement {
        /// Creates a new `DeleteTransitGatewayRouteTableAnnouncement`.
        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::DeleteTransitGatewayRouteTableAnnouncement,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteTransitGatewayRouteTableAnnouncementError,
            >,
        > {
            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::DeleteTransitGatewayRouteTableAnnouncementOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteTransitGatewayRouteTableAnnouncementError,
            >,
        > {
            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 transit gateway route table ID that's being deleted. </p>
        pub fn transit_gateway_route_table_announcement_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .transit_gateway_route_table_announcement_id(input.into());
            self
        }
        /// <p>The transit gateway route table ID that's being deleted. </p>
        pub fn set_transit_gateway_route_table_announcement_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_transit_gateway_route_table_announcement_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteTransitGatewayVpcAttachment`.
    ///
    /// <p>Deletes the specified VPC attachment.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteTransitGatewayVpcAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_transit_gateway_vpc_attachment_input::Builder,
    }
    impl DeleteTransitGatewayVpcAttachment {
        /// Creates a new `DeleteTransitGatewayVpcAttachment`.
        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::DeleteTransitGatewayVpcAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayVpcAttachmentError>,
        > {
            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::DeleteTransitGatewayVpcAttachmentOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteTransitGatewayVpcAttachmentError>,
        > {
            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 attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVerifiedAccessEndpoint`.
    ///
    /// <p>Delete an Amazon Web Services Verified Access endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVerifiedAccessEndpoint {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_verified_access_endpoint_input::Builder,
    }
    impl DeleteVerifiedAccessEndpoint {
        /// Creates a new `DeleteVerifiedAccessEndpoint`.
        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::DeleteVerifiedAccessEndpoint,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVerifiedAccessEndpointError>,
        > {
            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::DeleteVerifiedAccessEndpointOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVerifiedAccessEndpointError>,
        > {
            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 Amazon Web Services Verified Access endpoint.</p>
        pub fn verified_access_endpoint_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
        pub fn set_verified_access_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_endpoint_id(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVerifiedAccessGroup`.
    ///
    /// <p>Delete an Amazon Web Services Verified Access group.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVerifiedAccessGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_verified_access_group_input::Builder,
    }
    impl DeleteVerifiedAccessGroup {
        /// Creates a new `DeleteVerifiedAccessGroup`.
        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::DeleteVerifiedAccessGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVerifiedAccessGroupError>,
        > {
            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::DeleteVerifiedAccessGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVerifiedAccessGroupError>,
        > {
            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 Amazon Web Services Verified Access group.</p>
        pub fn verified_access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.verified_access_group_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access group.</p>
        pub fn set_verified_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_group_id(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVerifiedAccessInstance`.
    ///
    /// <p>Delete an Amazon Web Services Verified Access instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVerifiedAccessInstance {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_verified_access_instance_input::Builder,
    }
    impl DeleteVerifiedAccessInstance {
        /// Creates a new `DeleteVerifiedAccessInstance`.
        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::DeleteVerifiedAccessInstance,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVerifiedAccessInstanceError>,
        > {
            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::DeleteVerifiedAccessInstanceOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVerifiedAccessInstanceError>,
        > {
            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 Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVerifiedAccessTrustProvider`.
    ///
    /// <p>Delete an Amazon Web Services Verified Access trust provider.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVerifiedAccessTrustProvider {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_verified_access_trust_provider_input::Builder,
    }
    impl DeleteVerifiedAccessTrustProvider {
        /// Creates a new `DeleteVerifiedAccessTrustProvider`.
        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::DeleteVerifiedAccessTrustProvider,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVerifiedAccessTrustProviderError>,
        > {
            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::DeleteVerifiedAccessTrustProviderOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVerifiedAccessTrustProviderError>,
        > {
            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 Amazon Web Services Verified Access trust provider.</p>
        pub fn verified_access_trust_provider_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_trust_provider_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
        pub fn set_verified_access_trust_provider_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_trust_provider_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVolume`.
    ///
    /// <p>Deletes the specified EBS volume. The volume must be in the <code>available</code> state (not attached to an instance).</p>
    /// <p>The volume can remain in the <code>deleting</code> state for several minutes.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-volume.html">Delete an Amazon EBS volume</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVolume {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_volume_input::Builder,
    }
    impl DeleteVolume {
        /// Creates a new `DeleteVolume`.
        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::DeleteVolume,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVolumeError>,
        > {
            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::DeleteVolumeOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVolumeError>,
        > {
            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 volume.</p>
        pub fn volume_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_id(input.into());
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn set_volume_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_volume_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVpc`.
    ///
    /// <p>Deletes the specified VPC. You must detach or delete all gateways and resources that are associated with the VPC before you can delete it. For example, you must terminate all instances running in the VPC, delete all security groups associated with the VPC (except the default one), delete all route tables associated with the VPC (except the default one), and so on.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVpc {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_vpc_input::Builder,
    }
    impl DeleteVpc {
        /// Creates a new `DeleteVpc`.
        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::DeleteVpc,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpcError>,
        > {
            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::DeleteVpcOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpcError>,
        > {
            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 VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVpcEndpointConnectionNotifications`.
    ///
    /// <p>Deletes the specified VPC endpoint connection notifications.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVpcEndpointConnectionNotifications {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_vpc_endpoint_connection_notifications_input::Builder,
    }
    impl DeleteVpcEndpointConnectionNotifications {
        /// Creates a new `DeleteVpcEndpointConnectionNotifications`.
        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::DeleteVpcEndpointConnectionNotifications,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteVpcEndpointConnectionNotificationsError,
            >,
        > {
            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::DeleteVpcEndpointConnectionNotificationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteVpcEndpointConnectionNotificationsError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `ConnectionNotificationIds`.
        ///
        /// To override the contents of this collection use [`set_connection_notification_ids`](Self::set_connection_notification_ids).
        ///
        /// <p>The IDs of the notifications.</p>
        pub fn connection_notification_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.connection_notification_ids(input.into());
            self
        }
        /// <p>The IDs of the notifications.</p>
        pub fn set_connection_notification_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_connection_notification_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVpcEndpoints`.
    ///
    /// <p>Deletes the specified VPC endpoints.</p>
    /// <p>When you delete a gateway endpoint, we delete the endpoint routes in the route tables for the endpoint.</p>
    /// <p>When you delete a Gateway Load Balancer endpoint, we delete its endpoint network interfaces. You can only delete Gateway Load Balancer endpoints when the routes that are associated with the endpoint are deleted.</p>
    /// <p>When you delete an interface endpoint, we delete its endpoint network interfaces.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVpcEndpoints {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_vpc_endpoints_input::Builder,
    }
    impl DeleteVpcEndpoints {
        /// Creates a new `DeleteVpcEndpoints`.
        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::DeleteVpcEndpoints,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpcEndpointsError>,
        > {
            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::DeleteVpcEndpointsOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpcEndpointsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `VpcEndpointIds`.
        ///
        /// To override the contents of this collection use [`set_vpc_endpoint_ids`](Self::set_vpc_endpoint_ids).
        ///
        /// <p>The IDs of the VPC endpoints.</p>
        pub fn vpc_endpoint_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_endpoint_ids(input.into());
            self
        }
        /// <p>The IDs of the VPC endpoints.</p>
        pub fn set_vpc_endpoint_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVpcEndpointServiceConfigurations`.
    ///
    /// <p>Deletes the specified VPC endpoint service configurations. Before you can delete an endpoint service configuration, you must reject any <code>Available</code> or <code>PendingAcceptance</code> interface endpoint connections that are attached to the service.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVpcEndpointServiceConfigurations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_vpc_endpoint_service_configurations_input::Builder,
    }
    impl DeleteVpcEndpointServiceConfigurations {
        /// Creates a new `DeleteVpcEndpointServiceConfigurations`.
        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::DeleteVpcEndpointServiceConfigurations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteVpcEndpointServiceConfigurationsError,
            >,
        > {
            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::DeleteVpcEndpointServiceConfigurationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeleteVpcEndpointServiceConfigurationsError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `ServiceIds`.
        ///
        /// To override the contents of this collection use [`set_service_ids`](Self::set_service_ids).
        ///
        /// <p>The IDs of the services.</p>
        pub fn service_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_ids(input.into());
            self
        }
        /// <p>The IDs of the services.</p>
        pub fn set_service_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_service_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVpcPeeringConnection`.
    ///
    /// <p>Deletes a VPC peering connection. Either the owner of the requester VPC or the owner of the accepter VPC can delete the VPC peering connection if it's in the <code>active</code> state. The owner of the requester VPC can delete a VPC peering connection in the <code>pending-acceptance</code> state. You cannot delete a VPC peering connection that's in the <code>failed</code> state.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVpcPeeringConnection {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_vpc_peering_connection_input::Builder,
    }
    impl DeleteVpcPeeringConnection {
        /// Creates a new `DeleteVpcPeeringConnection`.
        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::DeleteVpcPeeringConnection,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpcPeeringConnectionError>,
        > {
            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::DeleteVpcPeeringConnectionOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpcPeeringConnectionError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC peering connection.</p>
        pub fn vpc_peering_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_peering_connection_id(input.into());
            self
        }
        /// <p>The ID of the VPC peering connection.</p>
        pub fn set_vpc_peering_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_peering_connection_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVpnConnection`.
    ///
    /// <p>Deletes the specified VPN connection.</p>
    /// <p>If you're deleting the VPC and its associated components, we recommend that you detach the virtual private gateway from the VPC and delete the VPC before deleting the VPN connection. If you believe that the tunnel credentials for your VPN connection have been compromised, you can delete the VPN connection and create a new one that has new keys, without needing to delete the VPC or virtual private gateway. If you create a new VPN connection, you must reconfigure the customer gateway device using the new configuration information returned with the new VPN connection ID.</p>
    /// <p>For certificate-based authentication, delete all Certificate Manager (ACM) private certificates used for the Amazon Web Services-side tunnel endpoints for the VPN connection before deleting the VPN connection.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVpnConnection {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_vpn_connection_input::Builder,
    }
    impl DeleteVpnConnection {
        /// Creates a new `DeleteVpnConnection`.
        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::DeleteVpnConnection,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpnConnectionError>,
        > {
            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::DeleteVpnConnectionOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpnConnectionError>,
        > {
            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 VPN connection.</p>
        pub fn vpn_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_id(input.into());
            self
        }
        /// <p>The ID of the VPN connection.</p>
        pub fn set_vpn_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVpnConnectionRoute`.
    ///
    /// <p>Deletes the specified static route associated with a VPN connection between an existing virtual private gateway and a VPN customer gateway. The static route allows traffic to be routed from the virtual private gateway to the VPN customer gateway.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVpnConnectionRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_vpn_connection_route_input::Builder,
    }
    impl DeleteVpnConnectionRoute {
        /// Creates a new `DeleteVpnConnectionRoute`.
        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::DeleteVpnConnectionRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpnConnectionRouteError>,
        > {
            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::DeleteVpnConnectionRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpnConnectionRouteError>,
        > {
            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 CIDR block associated with the local subnet of the customer network.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The CIDR block associated with the local subnet of the customer network.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The ID of the VPN connection.</p>
        pub fn vpn_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_id(input.into());
            self
        }
        /// <p>The ID of the VPN connection.</p>
        pub fn set_vpn_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeleteVpnGateway`.
    ///
    /// <p>Deletes the specified virtual private gateway. You must first detach the virtual private gateway from the VPC. Note that you don't need to delete the virtual private gateway if you plan to delete and recreate the VPN connection between your VPC and your network.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeleteVpnGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::delete_vpn_gateway_input::Builder,
    }
    impl DeleteVpnGateway {
        /// Creates a new `DeleteVpnGateway`.
        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::DeleteVpnGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpnGatewayError>,
        > {
            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::DeleteVpnGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DeleteVpnGatewayError>,
        > {
            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 virtual private gateway.</p>
        pub fn vpn_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_gateway_id(input.into());
            self
        }
        /// <p>The ID of the virtual private gateway.</p>
        pub fn set_vpn_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_gateway_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeprovisionByoipCidr`.
    ///
    /// <p>Releases the specified address range that you provisioned for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP) and deletes the corresponding address pool.</p>
    /// <p>Before you can release an address range, you must stop advertising it using <code>WithdrawByoipCidr</code> and you must not have any IP addresses allocated from its address range.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeprovisionByoipCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::deprovision_byoip_cidr_input::Builder,
    }
    impl DeprovisionByoipCidr {
        /// Creates a new `DeprovisionByoipCidr`.
        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::DeprovisionByoipCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeprovisionByoipCidrError>,
        > {
            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::DeprovisionByoipCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::DeprovisionByoipCidrError>,
        > {
            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 address range, in CIDR notation. The prefix must be the same prefix that you specified when you provisioned the address range.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The address range, in CIDR notation. The prefix must be the same prefix that you specified when you provisioned the address range.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeprovisionIpamPoolCidr`.
    ///
    /// <p>Deprovision a CIDR provisioned from an IPAM pool. If you deprovision a CIDR from a pool that has a source pool, the CIDR is recycled back into the source pool. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/depro-pool-cidr-ipam.html">Deprovision pool CIDRs</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeprovisionIpamPoolCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::deprovision_ipam_pool_cidr_input::Builder,
    }
    impl DeprovisionIpamPoolCidr {
        /// Creates a new `DeprovisionIpamPoolCidr`.
        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::DeprovisionIpamPoolCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeprovisionIpamPoolCidrError>,
        > {
            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::DeprovisionIpamPoolCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::DeprovisionIpamPoolCidrError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the pool that has the CIDR you want to deprovision.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the pool that has the CIDR you want to deprovision.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The CIDR which you want to deprovision from the pool.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The CIDR which you want to deprovision from the pool.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeprovisionPublicIpv4PoolCidr`.
    ///
    /// <p>Deprovision a CIDR from a public IPv4 pool.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeprovisionPublicIpv4PoolCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::deprovision_public_ipv4_pool_cidr_input::Builder,
    }
    impl DeprovisionPublicIpv4PoolCidr {
        /// Creates a new `DeprovisionPublicIpv4PoolCidr`.
        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::DeprovisionPublicIpv4PoolCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeprovisionPublicIpv4PoolCidrError>,
        > {
            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::DeprovisionPublicIpv4PoolCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::DeprovisionPublicIpv4PoolCidrError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the pool that you want to deprovision the CIDR from.</p>
        pub fn pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.pool_id(input.into());
            self
        }
        /// <p>The ID of the pool that you want to deprovision the CIDR from.</p>
        pub fn set_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_pool_id(input);
            self
        }
        /// <p>The CIDR you want to deprovision from the pool.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The CIDR you want to deprovision from the pool.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeregisterImage`.
    ///
    /// <p>Deregisters the specified AMI. After you deregister an AMI, it can't be used to launch new instances.</p>
    /// <p>If you deregister an AMI that matches a Recycle Bin retention rule, the AMI is retained in the Recycle Bin for the specified retention period. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html">Recycle Bin</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>When you deregister an AMI, it doesn't affect any instances that you've already launched from the AMI. You'll continue to incur usage costs for those instances until you terminate them.</p>
    /// <p>When you deregister an Amazon EBS-backed AMI, it doesn't affect the snapshot that was created for the root volume of the instance during the AMI creation process. When you deregister an instance store-backed AMI, it doesn't affect the files that you uploaded to Amazon S3 when you created the AMI.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeregisterImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::deregister_image_input::Builder,
    }
    impl DeregisterImage {
        /// Creates a new `DeregisterImage`.
        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::DeregisterImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DeregisterImageError>,
        > {
            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::DeregisterImageOutput,
            aws_smithy_http::result::SdkError<crate::error::DeregisterImageError>,
        > {
            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 AMI.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeregisterInstanceEventNotificationAttributes`.
    ///
    /// <p>Deregisters tag keys to prevent tags that have the specified tag keys from being included in scheduled event notifications for resources in the Region.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeregisterInstanceEventNotificationAttributes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::deregister_instance_event_notification_attributes_input::Builder,
    }
    impl DeregisterInstanceEventNotificationAttributes {
        /// Creates a new `DeregisterInstanceEventNotificationAttributes`.
        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::DeregisterInstanceEventNotificationAttributes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeregisterInstanceEventNotificationAttributesError,
            >,
        > {
            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::DeregisterInstanceEventNotificationAttributesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeregisterInstanceEventNotificationAttributesError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Information about the tag keys to deregister.</p>
        pub fn instance_tag_attribute(
            mut self,
            input: crate::model::DeregisterInstanceTagAttributeRequest,
        ) -> Self {
            self.inner = self.inner.instance_tag_attribute(input);
            self
        }
        /// <p>Information about the tag keys to deregister.</p>
        pub fn set_instance_tag_attribute(
            mut self,
            input: std::option::Option<crate::model::DeregisterInstanceTagAttributeRequest>,
        ) -> Self {
            self.inner = self.inner.set_instance_tag_attribute(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeregisterTransitGatewayMulticastGroupMembers`.
    ///
    /// <p>Deregisters the specified members (network interfaces) from the transit gateway multicast group.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeregisterTransitGatewayMulticastGroupMembers {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::deregister_transit_gateway_multicast_group_members_input::Builder,
    }
    impl DeregisterTransitGatewayMulticastGroupMembers {
        /// Creates a new `DeregisterTransitGatewayMulticastGroupMembers`.
        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::DeregisterTransitGatewayMulticastGroupMembers,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeregisterTransitGatewayMulticastGroupMembersError,
            >,
        > {
            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::DeregisterTransitGatewayMulticastGroupMembersOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeregisterTransitGatewayMulticastGroupMembersError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>The IP address assigned to the transit gateway multicast group.</p>
        pub fn group_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_ip_address(input.into());
            self
        }
        /// <p>The IP address assigned to the transit gateway multicast group.</p>
        pub fn set_group_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_group_ip_address(input);
            self
        }
        /// Appends an item to `NetworkInterfaceIds`.
        ///
        /// To override the contents of this collection use [`set_network_interface_ids`](Self::set_network_interface_ids).
        ///
        /// <p>The IDs of the group members' network interfaces.</p>
        pub fn network_interface_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_ids(input.into());
            self
        }
        /// <p>The IDs of the group members' network interfaces.</p>
        pub fn set_network_interface_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DeregisterTransitGatewayMulticastGroupSources`.
    ///
    /// <p>Deregisters the specified sources (network interfaces) from the transit gateway multicast group.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DeregisterTransitGatewayMulticastGroupSources {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::deregister_transit_gateway_multicast_group_sources_input::Builder,
    }
    impl DeregisterTransitGatewayMulticastGroupSources {
        /// Creates a new `DeregisterTransitGatewayMulticastGroupSources`.
        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::DeregisterTransitGatewayMulticastGroupSources,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DeregisterTransitGatewayMulticastGroupSourcesError,
            >,
        > {
            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::DeregisterTransitGatewayMulticastGroupSourcesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DeregisterTransitGatewayMulticastGroupSourcesError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>The IP address assigned to the transit gateway multicast group.</p>
        pub fn group_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_ip_address(input.into());
            self
        }
        /// <p>The IP address assigned to the transit gateway multicast group.</p>
        pub fn set_group_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_group_ip_address(input);
            self
        }
        /// Appends an item to `NetworkInterfaceIds`.
        ///
        /// To override the contents of this collection use [`set_network_interface_ids`](Self::set_network_interface_ids).
        ///
        /// <p>The IDs of the group sources' network interfaces.</p>
        pub fn network_interface_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_ids(input.into());
            self
        }
        /// <p>The IDs of the group sources' network interfaces.</p>
        pub fn set_network_interface_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeAccountAttributes`.
    ///
    /// <p>Describes attributes of your Amazon Web Services account. The following are the supported account attributes:</p>
    /// <ul>
    /// <li> <p> <code>supported-platforms</code>: Indicates whether your account can launch instances into EC2-Classic and EC2-VPC, or only into EC2-VPC.</p> </li>
    /// <li> <p> <code>default-vpc</code>: The ID of the default VPC for your account, or <code>none</code>.</p> </li>
    /// <li> <p> <code>max-instances</code>: This attribute is no longer supported. The returned value does not reflect your actual vCPU limit for running On-Demand Instances. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-on-demand-instances.html#ec2-on-demand-instances-limits">On-Demand Instance Limits</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </li>
    /// <li> <p> <code>vpc-max-security-groups-per-interface</code>: The maximum number of security groups that you can assign to a network interface.</p> </li>
    /// <li> <p> <code>max-elastic-ips</code>: The maximum number of Elastic IP addresses that you can allocate for use with EC2-Classic. </p> </li>
    /// <li> <p> <code>vpc-max-elastic-ips</code>: The maximum number of Elastic IP addresses that you can allocate for use with EC2-VPC.</p> </li>
    /// </ul> <note>
    /// <p>We are retiring EC2-Classic on August 15, 2022. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeAccountAttributes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_account_attributes_input::Builder,
    }
    impl DescribeAccountAttributes {
        /// Creates a new `DescribeAccountAttributes`.
        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::DescribeAccountAttributes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeAccountAttributesError>,
        > {
            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::DescribeAccountAttributesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeAccountAttributesError>,
        > {
            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 `AttributeNames`.
        ///
        /// To override the contents of this collection use [`set_attribute_names`](Self::set_attribute_names).
        ///
        /// <p>The account attribute names.</p>
        pub fn attribute_names(mut self, input: crate::model::AccountAttributeName) -> Self {
            self.inner = self.inner.attribute_names(input);
            self
        }
        /// <p>The account attribute names.</p>
        pub fn set_attribute_names(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::AccountAttributeName>>,
        ) -> Self {
            self.inner = self.inner.set_attribute_names(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeAddresses`.
    ///
    /// <p>Describes the specified Elastic IP addresses or all of your Elastic IP addresses.</p>
    /// <p>An Elastic IP address is for use in either the EC2-Classic platform or in a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeAddresses {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_addresses_input::Builder,
    }
    impl DescribeAddresses {
        /// Creates a new `DescribeAddresses`.
        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::DescribeAddresses,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeAddressesError>,
        > {
            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::DescribeAddressesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeAddressesError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>allocation-id</code> - [EC2-VPC] The allocation ID for the address.</p> </li>
        /// <li> <p> <code>association-id</code> - [EC2-VPC] The association ID for the address.</p> </li>
        /// <li> <p> <code>domain</code> - Indicates whether the address is for use in EC2-Classic (<code>standard</code>) or in a VPC (<code>vpc</code>).</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance the address is associated with, if any.</p> </li>
        /// <li> <p> <code>network-border-group</code> - A unique set of Availability Zones, Local Zones, or Wavelength Zones from where Amazon Web Services advertises IP addresses. </p> </li>
        /// <li> <p> <code>network-interface-id</code> - [EC2-VPC] The ID of the network interface that the address is associated with, if any.</p> </li>
        /// <li> <p> <code>network-interface-owner-id</code> - The Amazon Web Services account ID of the owner.</p> </li>
        /// <li> <p> <code>private-ip-address</code> - [EC2-VPC] The private IP address associated with the Elastic IP address.</p> </li>
        /// <li> <p> <code>public-ip</code> - The Elastic IP address, or the carrier IP address.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>allocation-id</code> - [EC2-VPC] The allocation ID for the address.</p> </li>
        /// <li> <p> <code>association-id</code> - [EC2-VPC] The association ID for the address.</p> </li>
        /// <li> <p> <code>domain</code> - Indicates whether the address is for use in EC2-Classic (<code>standard</code>) or in a VPC (<code>vpc</code>).</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance the address is associated with, if any.</p> </li>
        /// <li> <p> <code>network-border-group</code> - A unique set of Availability Zones, Local Zones, or Wavelength Zones from where Amazon Web Services advertises IP addresses. </p> </li>
        /// <li> <p> <code>network-interface-id</code> - [EC2-VPC] The ID of the network interface that the address is associated with, if any.</p> </li>
        /// <li> <p> <code>network-interface-owner-id</code> - The Amazon Web Services account ID of the owner.</p> </li>
        /// <li> <p> <code>private-ip-address</code> - [EC2-VPC] The private IP address associated with the Elastic IP address.</p> </li>
        /// <li> <p> <code>public-ip</code> - The Elastic IP address, or the carrier IP address.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `PublicIps`.
        ///
        /// To override the contents of this collection use [`set_public_ips`](Self::set_public_ips).
        ///
        /// <p>One or more Elastic IP addresses.</p>
        /// <p>Default: Describes all your Elastic IP addresses.</p>
        pub fn public_ips(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ips(input.into());
            self
        }
        /// <p>One or more Elastic IP addresses.</p>
        /// <p>Default: Describes all your Elastic IP addresses.</p>
        pub fn set_public_ips(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_public_ips(input);
            self
        }
        /// Appends an item to `AllocationIds`.
        ///
        /// To override the contents of this collection use [`set_allocation_ids`](Self::set_allocation_ids).
        ///
        /// <p>[EC2-VPC] Information about the allocation IDs.</p>
        pub fn allocation_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_ids(input.into());
            self
        }
        /// <p>[EC2-VPC] Information about the allocation IDs.</p>
        pub fn set_allocation_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_allocation_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeAddressesAttribute`.
    ///
    /// <p>Describes the attributes of the specified Elastic IP addresses. For requirements, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS">Using reverse DNS for email applications</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeAddressesAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_addresses_attribute_input::Builder,
    }
    impl DescribeAddressesAttribute {
        /// Creates a new `DescribeAddressesAttribute`.
        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::DescribeAddressesAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeAddressesAttributeError>,
        > {
            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::DescribeAddressesAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeAddressesAttributeError>,
        > {
            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::DescribeAddressesAttributePaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeAddressesAttributePaginator {
            crate::paginator::DescribeAddressesAttributePaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `AllocationIds`.
        ///
        /// To override the contents of this collection use [`set_allocation_ids`](Self::set_allocation_ids).
        ///
        /// <p>[EC2-VPC] The allocation IDs.</p>
        pub fn allocation_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_ids(input.into());
            self
        }
        /// <p>[EC2-VPC] The allocation IDs.</p>
        pub fn set_allocation_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_allocation_ids(input);
            self
        }
        /// <p>The attribute of the IP address.</p>
        pub fn attribute(mut self, input: crate::model::AddressAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The attribute of the IP address.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::AddressAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeAddressTransfers`.
    ///
    /// <p>Describes an Elastic IP address transfer. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro">Transfer Elastic IP addresses</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeAddressTransfers {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_address_transfers_input::Builder,
    }
    impl DescribeAddressTransfers {
        /// Creates a new `DescribeAddressTransfers`.
        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::DescribeAddressTransfers,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeAddressTransfersError>,
        > {
            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::DescribeAddressTransfersOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeAddressTransfersError>,
        > {
            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::DescribeAddressTransfersPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeAddressTransfersPaginator {
            crate::paginator::DescribeAddressTransfersPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `AllocationIds`.
        ///
        /// To override the contents of this collection use [`set_allocation_ids`](Self::set_allocation_ids).
        ///
        /// <p>The allocation IDs of Elastic IP addresses.</p>
        pub fn allocation_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_ids(input.into());
            self
        }
        /// <p>The allocation IDs of Elastic IP addresses.</p>
        pub fn set_allocation_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_allocation_ids(input);
            self
        }
        /// <p>Specify the pagination token from a previous request to retrieve the next page of results.</p>
        pub fn next_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.next_token(input.into());
            self
        }
        /// <p>Specify the pagination token from a previous request to retrieve the next page of results.</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 address transfers to return in one page of results.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of address transfers to return in one page of results.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeAggregateIdFormat`.
    ///
    /// <p>Describes the longer ID format settings for all resource types in a specific Region. This request is useful for performing a quick audit to determine whether a specific Region is fully opted in for longer IDs (17-character IDs).</p>
    /// <p>This request only returns information about resource types that support longer IDs.</p>
    /// <p>The following resource types support longer IDs: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeAggregateIdFormat {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_aggregate_id_format_input::Builder,
    }
    impl DescribeAggregateIdFormat {
        /// Creates a new `DescribeAggregateIdFormat`.
        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::DescribeAggregateIdFormat,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeAggregateIdFormatError>,
        > {
            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::DescribeAggregateIdFormatOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeAggregateIdFormatError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeAvailabilityZones`.
    ///
    /// <p>Describes the Availability Zones, Local Zones, and Wavelength Zones that are available to you. If there is an event impacting a zone, you can use this request to view the state and any provided messages for that zone.</p>
    /// <p>For more information about Availability Zones, Local Zones, and Wavelength Zones, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html">Regions and zones</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeAvailabilityZones {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_availability_zones_input::Builder,
    }
    impl DescribeAvailabilityZones {
        /// Creates a new `DescribeAvailabilityZones`.
        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::DescribeAvailabilityZones,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeAvailabilityZonesError>,
        > {
            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::DescribeAvailabilityZonesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeAvailabilityZonesError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>group-name</code> - For Availability Zones, use the Region name. For Local Zones, use the name of the group associated with the Local Zone (for example, <code>us-west-2-lax-1</code>) For Wavelength Zones, use the name of the group associated with the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>
        /// <li> <p> <code>message</code> - The Zone message.</p> </li>
        /// <li> <p> <code>opt-in-status</code> - The opt-in status (<code>opted-in</code>, and <code>not-opted-in</code> | <code>opt-in-not-required</code>).</p> </li>
        /// <li> <p> <code>parent-zoneID</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li>
        /// <li> <p> <code>parent-zoneName</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li>
        /// <li> <p> <code>region-name</code> - The name of the Region for the Zone (for example, <code>us-east-1</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the Availability Zone, the Local Zone, or the Wavelength Zone (<code>available</code>).</p> </li>
        /// <li> <p> <code>zone-id</code> - The ID of the Availability Zone (for example, <code>use1-az1</code>), the Local Zone (for example, <code>usw2-lax1-az1</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>
        /// <li> <p> <code>zone-type</code> - The type of zone, for example, <code>local-zone</code>.</p> </li>
        /// <li> <p> <code>zone-name</code> - The name of the Availability Zone (for example, <code>us-east-1a</code>), the Local Zone (for example, <code>us-west-2-lax-1a</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>
        /// <li> <p> <code>zone-type</code> - The type of zone, for example, <code>local-zone</code>.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>group-name</code> - For Availability Zones, use the Region name. For Local Zones, use the name of the group associated with the Local Zone (for example, <code>us-west-2-lax-1</code>) For Wavelength Zones, use the name of the group associated with the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>
        /// <li> <p> <code>message</code> - The Zone message.</p> </li>
        /// <li> <p> <code>opt-in-status</code> - The opt-in status (<code>opted-in</code>, and <code>not-opted-in</code> | <code>opt-in-not-required</code>).</p> </li>
        /// <li> <p> <code>parent-zoneID</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li>
        /// <li> <p> <code>parent-zoneName</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li>
        /// <li> <p> <code>region-name</code> - The name of the Region for the Zone (for example, <code>us-east-1</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the Availability Zone, the Local Zone, or the Wavelength Zone (<code>available</code>).</p> </li>
        /// <li> <p> <code>zone-id</code> - The ID of the Availability Zone (for example, <code>use1-az1</code>), the Local Zone (for example, <code>usw2-lax1-az1</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>
        /// <li> <p> <code>zone-type</code> - The type of zone, for example, <code>local-zone</code>.</p> </li>
        /// <li> <p> <code>zone-name</code> - The name of the Availability Zone (for example, <code>us-east-1a</code>), the Local Zone (for example, <code>us-west-2-lax-1a</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li>
        /// <li> <p> <code>zone-type</code> - The type of zone, for example, <code>local-zone</code>.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `ZoneNames`.
        ///
        /// To override the contents of this collection use [`set_zone_names`](Self::set_zone_names).
        ///
        /// <p>The names of the Availability Zones, Local Zones, and Wavelength Zones.</p>
        pub fn zone_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.zone_names(input.into());
            self
        }
        /// <p>The names of the Availability Zones, Local Zones, and Wavelength Zones.</p>
        pub fn set_zone_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_zone_names(input);
            self
        }
        /// Appends an item to `ZoneIds`.
        ///
        /// To override the contents of this collection use [`set_zone_ids`](Self::set_zone_ids).
        ///
        /// <p>The IDs of the Availability Zones, Local Zones, and Wavelength Zones.</p>
        pub fn zone_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.zone_ids(input.into());
            self
        }
        /// <p>The IDs of the Availability Zones, Local Zones, and Wavelength Zones.</p>
        pub fn set_zone_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_zone_ids(input);
            self
        }
        /// <p>Include all Availability Zones, Local Zones, and Wavelength Zones regardless of your opt-in status.</p>
        /// <p>If you do not use this parameter, the results include only the zones for the Regions where you have chosen the option to opt in.</p>
        pub fn all_availability_zones(mut self, input: bool) -> Self {
            self.inner = self.inner.all_availability_zones(input);
            self
        }
        /// <p>Include all Availability Zones, Local Zones, and Wavelength Zones regardless of your opt-in status.</p>
        /// <p>If you do not use this parameter, the results include only the zones for the Regions where you have chosen the option to opt in.</p>
        pub fn set_all_availability_zones(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_all_availability_zones(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeAwsNetworkPerformanceMetricSubscriptions`.
    ///
    /// <p>Describes the current Infrastructure Performance metric subscriptions.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeAwsNetworkPerformanceMetricSubscriptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_aws_network_performance_metric_subscriptions_input::Builder,
    }
    impl DescribeAwsNetworkPerformanceMetricSubscriptions {
        /// Creates a new `DescribeAwsNetworkPerformanceMetricSubscriptions`.
        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::DescribeAwsNetworkPerformanceMetricSubscriptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeAwsNetworkPerformanceMetricSubscriptionsError,
            >,
        > {
            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::DescribeAwsNetworkPerformanceMetricSubscriptionsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeAwsNetworkPerformanceMetricSubscriptionsError,
            >,
        > {
            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::DescribeAwsNetworkPerformanceMetricSubscriptionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeAwsNetworkPerformanceMetricSubscriptionsPaginator {
            crate::paginator::DescribeAwsNetworkPerformanceMetricSubscriptionsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeBundleTasks`.
    ///
    /// <p>Describes the specified bundle tasks or all of your bundle tasks.</p> <note>
    /// <p>Completed bundle tasks are listed for only a limited time. If your bundle task is no longer in the list, you can still register an AMI from it. Just use <code>RegisterImage</code> with the Amazon S3 bucket name and image manifest name you provided to the bundle task.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeBundleTasks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_bundle_tasks_input::Builder,
    }
    impl DescribeBundleTasks {
        /// Creates a new `DescribeBundleTasks`.
        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::DescribeBundleTasks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeBundleTasksError>,
        > {
            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::DescribeBundleTasksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeBundleTasksError>,
        > {
            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 `BundleIds`.
        ///
        /// To override the contents of this collection use [`set_bundle_ids`](Self::set_bundle_ids).
        ///
        /// <p>The bundle task IDs.</p>
        /// <p>Default: Describes all your bundle tasks.</p>
        pub fn bundle_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.bundle_ids(input.into());
            self
        }
        /// <p>The bundle task IDs.</p>
        /// <p>Default: Describes all your bundle tasks.</p>
        pub fn set_bundle_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_bundle_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>bundle-id</code> - The ID of the bundle task.</p> </li>
        /// <li> <p> <code>error-code</code> - If the task failed, the error code returned.</p> </li>
        /// <li> <p> <code>error-message</code> - If the task failed, the error message returned.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// <li> <p> <code>progress</code> - The level of task completion, as a percentage (for example, 20%).</p> </li>
        /// <li> <p> <code>s3-bucket</code> - The Amazon S3 bucket to store the AMI.</p> </li>
        /// <li> <p> <code>s3-prefix</code> - The beginning of the AMI name.</p> </li>
        /// <li> <p> <code>start-time</code> - The time the task started (for example, 2013-09-15T17:15:20.000Z).</p> </li>
        /// <li> <p> <code>state</code> - The state of the task (<code>pending</code> | <code>waiting-for-shutdown</code> | <code>bundling</code> | <code>storing</code> | <code>cancelling</code> | <code>complete</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>update-time</code> - The time of the most recent update for the task.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>bundle-id</code> - The ID of the bundle task.</p> </li>
        /// <li> <p> <code>error-code</code> - If the task failed, the error code returned.</p> </li>
        /// <li> <p> <code>error-message</code> - If the task failed, the error message returned.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// <li> <p> <code>progress</code> - The level of task completion, as a percentage (for example, 20%).</p> </li>
        /// <li> <p> <code>s3-bucket</code> - The Amazon S3 bucket to store the AMI.</p> </li>
        /// <li> <p> <code>s3-prefix</code> - The beginning of the AMI name.</p> </li>
        /// <li> <p> <code>start-time</code> - The time the task started (for example, 2013-09-15T17:15:20.000Z).</p> </li>
        /// <li> <p> <code>state</code> - The state of the task (<code>pending</code> | <code>waiting-for-shutdown</code> | <code>bundling</code> | <code>storing</code> | <code>cancelling</code> | <code>complete</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>update-time</code> - The time of the most recent update for the task.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeByoipCidrs`.
    ///
    /// <p>Describes the IP address ranges that were specified in calls to <code>ProvisionByoipCidr</code>.</p>
    /// <p>To describe the address pools that were created when you provisioned the address ranges, use <code>DescribePublicIpv4Pools</code> or <code>DescribeIpv6Pools</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeByoipCidrs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_byoip_cidrs_input::Builder,
    }
    impl DescribeByoipCidrs {
        /// Creates a new `DescribeByoipCidrs`.
        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::DescribeByoipCidrs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeByoipCidrsError>,
        > {
            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::DescribeByoipCidrsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeByoipCidrsError>,
        > {
            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::DescribeByoipCidrsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeByoipCidrsPaginator {
            crate::paginator::DescribeByoipCidrsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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 `DescribeCapacityReservationFleets`.
    ///
    /// <p>Describes one or more Capacity Reservation Fleets.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeCapacityReservationFleets {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_capacity_reservation_fleets_input::Builder,
    }
    impl DescribeCapacityReservationFleets {
        /// Creates a new `DescribeCapacityReservationFleets`.
        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::DescribeCapacityReservationFleets,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeCapacityReservationFleetsError>,
        > {
            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::DescribeCapacityReservationFleetsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeCapacityReservationFleetsError>,
        > {
            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::DescribeCapacityReservationFleetsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeCapacityReservationFleetsPaginator {
            crate::paginator::DescribeCapacityReservationFleetsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `CapacityReservationFleetIds`.
        ///
        /// To override the contents of this collection use [`set_capacity_reservation_fleet_ids`](Self::set_capacity_reservation_fleet_ids).
        ///
        /// <p>The IDs of the Capacity Reservation Fleets to describe.</p>
        pub fn capacity_reservation_fleet_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.capacity_reservation_fleet_ids(input.into());
            self
        }
        /// <p>The IDs of the Capacity Reservation Fleets to describe.</p>
        pub fn set_capacity_reservation_fleet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_fleet_ids(input);
            self
        }
        /// <p>The token to use to retrieve the next page of results.</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 to use to retrieve the next page of results.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>state</code> - The state of the Fleet (<code>submitted</code> | <code>modifying</code> | <code>active</code> | <code>partially_fulfilled</code> | <code>expiring</code> | <code>expired</code> | <code>cancelling</code> | <code>cancelled</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>instance-match-criteria</code> - The instance matching criteria for the Fleet. Only <code>open</code> is supported.</p> </li>
        /// <li> <p> <code>tenancy</code> - The tenancy of the Fleet (<code>default</code> | <code>dedicated</code>).</p> </li>
        /// <li> <p> <code>allocation-strategy</code> - The allocation strategy used by the Fleet. Only <code>prioritized</code> is supported.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>state</code> - The state of the Fleet (<code>submitted</code> | <code>modifying</code> | <code>active</code> | <code>partially_fulfilled</code> | <code>expiring</code> | <code>expired</code> | <code>cancelling</code> | <code>cancelled</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>instance-match-criteria</code> - The instance matching criteria for the Fleet. Only <code>open</code> is supported.</p> </li>
        /// <li> <p> <code>tenancy</code> - The tenancy of the Fleet (<code>default</code> | <code>dedicated</code>).</p> </li>
        /// <li> <p> <code>allocation-strategy</code> - The allocation strategy used by the Fleet. Only <code>prioritized</code> is supported.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeCapacityReservations`.
    ///
    /// <p>Describes one or more of your Capacity Reservations. The results describe only the Capacity Reservations in the Amazon Web Services Region that you're currently using.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeCapacityReservations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_capacity_reservations_input::Builder,
    }
    impl DescribeCapacityReservations {
        /// Creates a new `DescribeCapacityReservations`.
        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::DescribeCapacityReservations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeCapacityReservationsError>,
        > {
            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::DescribeCapacityReservationsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeCapacityReservationsError>,
        > {
            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::DescribeCapacityReservationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeCapacityReservationsPaginator {
            crate::paginator::DescribeCapacityReservationsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `CapacityReservationIds`.
        ///
        /// To override the contents of this collection use [`set_capacity_reservation_ids`](Self::set_capacity_reservation_ids).
        ///
        /// <p>The ID of the Capacity Reservation.</p>
        pub fn capacity_reservation_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.capacity_reservation_ids(input.into());
            self
        }
        /// <p>The ID of the Capacity Reservation.</p>
        pub fn set_capacity_reservation_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_ids(input);
            self
        }
        /// <p>The token to use to retrieve the next page of results.</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 to use to retrieve the next page of results.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-type</code> - The type of instance for which the Capacity Reservation reserves capacity.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the Capacity Reservation.</p> </li>
        /// <li> <p> <code>instance-platform</code> - The type of operating system for which the Capacity Reservation reserves capacity.</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the Capacity Reservation.</p> </li>
        /// <li> <p> <code>tenancy</code> - Indicates the tenancy of the Capacity Reservation. A Capacity Reservation can have one of the following tenancy settings:</p>
        /// <ul>
        /// <li> <p> <code>default</code> - The Capacity Reservation is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>
        /// <li> <p> <code>dedicated</code> - The Capacity Reservation is created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>
        /// </ul> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost on which the Capacity Reservation was created.</p> </li>
        /// <li> <p> <code>state</code> - The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p>
        /// <ul>
        /// <li> <p> <code>active</code>- The Capacity Reservation is active and the capacity is available for your use.</p> </li>
        /// <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your request. The reserved capacity is no longer available for your use.</p> </li>
        /// <li> <p> <code>cancelled</code> - The Capacity Reservation was cancelled. The reserved capacity is no longer available for your use.</p> </li>
        /// <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li>
        /// <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request might fail due to invalid request parameters, capacity constraints, or instance limit constraints. Failed requests are retained for 60 minutes.</p> </li>
        /// </ul> </li>
        /// <li> <p> <code>start-date</code> - The date and time at which the Capacity Reservation was started.</p> </li>
        /// <li> <p> <code>end-date</code> - The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to expired when it reaches its end date and time.</p> </li>
        /// <li> <p> <code>end-date-type</code> - Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>
        /// <ul>
        /// <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it.</p> </li>
        /// <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time.</p> </li>
        /// </ul> </li>
        /// <li> <p> <code>instance-match-criteria</code> - Indicates the type of instance launches that the Capacity Reservation accepts. The options include:</p>
        /// <ul>
        /// <li> <p> <code>open</code> - The Capacity Reservation accepts all instances that have matching attributes (instance type, platform, and Availability Zone). Instances that have matching attributes launch into the Capacity Reservation automatically without specifying any additional parameters.</p> </li>
        /// <li> <p> <code>targeted</code> - The Capacity Reservation only accepts instances that have matching attributes (instance type, platform, and Availability Zone), and explicitly target the Capacity Reservation. This ensures that only permitted instances can use the reserved capacity.</p> </li>
        /// </ul> </li>
        /// <li> <p> <code>placement-group-arn</code> - The ARN of the cluster placement group in which the Capacity Reservation was created.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-type</code> - The type of instance for which the Capacity Reservation reserves capacity.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the Capacity Reservation.</p> </li>
        /// <li> <p> <code>instance-platform</code> - The type of operating system for which the Capacity Reservation reserves capacity.</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the Capacity Reservation.</p> </li>
        /// <li> <p> <code>tenancy</code> - Indicates the tenancy of the Capacity Reservation. A Capacity Reservation can have one of the following tenancy settings:</p>
        /// <ul>
        /// <li> <p> <code>default</code> - The Capacity Reservation is created on hardware that is shared with other Amazon Web Services accounts.</p> </li>
        /// <li> <p> <code>dedicated</code> - The Capacity Reservation is created on single-tenant hardware that is dedicated to a single Amazon Web Services account.</p> </li>
        /// </ul> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost on which the Capacity Reservation was created.</p> </li>
        /// <li> <p> <code>state</code> - The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p>
        /// <ul>
        /// <li> <p> <code>active</code>- The Capacity Reservation is active and the capacity is available for your use.</p> </li>
        /// <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your request. The reserved capacity is no longer available for your use.</p> </li>
        /// <li> <p> <code>cancelled</code> - The Capacity Reservation was cancelled. The reserved capacity is no longer available for your use.</p> </li>
        /// <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li>
        /// <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request might fail due to invalid request parameters, capacity constraints, or instance limit constraints. Failed requests are retained for 60 minutes.</p> </li>
        /// </ul> </li>
        /// <li> <p> <code>start-date</code> - The date and time at which the Capacity Reservation was started.</p> </li>
        /// <li> <p> <code>end-date</code> - The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to expired when it reaches its end date and time.</p> </li>
        /// <li> <p> <code>end-date-type</code> - Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>
        /// <ul>
        /// <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it.</p> </li>
        /// <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time.</p> </li>
        /// </ul> </li>
        /// <li> <p> <code>instance-match-criteria</code> - Indicates the type of instance launches that the Capacity Reservation accepts. The options include:</p>
        /// <ul>
        /// <li> <p> <code>open</code> - The Capacity Reservation accepts all instances that have matching attributes (instance type, platform, and Availability Zone). Instances that have matching attributes launch into the Capacity Reservation automatically without specifying any additional parameters.</p> </li>
        /// <li> <p> <code>targeted</code> - The Capacity Reservation only accepts instances that have matching attributes (instance type, platform, and Availability Zone), and explicitly target the Capacity Reservation. This ensures that only permitted instances can use the reserved capacity.</p> </li>
        /// </ul> </li>
        /// <li> <p> <code>placement-group-arn</code> - The ARN of the cluster placement group in which the Capacity Reservation was created.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeCarrierGateways`.
    ///
    /// <p>Describes one or more of your carrier gateways.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeCarrierGateways {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_carrier_gateways_input::Builder,
    }
    impl DescribeCarrierGateways {
        /// Creates a new `DescribeCarrierGateways`.
        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::DescribeCarrierGateways,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeCarrierGatewaysError>,
        > {
            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::DescribeCarrierGatewaysOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeCarrierGatewaysError>,
        > {
            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::DescribeCarrierGatewaysPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeCarrierGatewaysPaginator {
            crate::paginator::DescribeCarrierGatewaysPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `CarrierGatewayIds`.
        ///
        /// To override the contents of this collection use [`set_carrier_gateway_ids`](Self::set_carrier_gateway_ids).
        ///
        /// <p>One or more carrier gateway IDs.</p>
        pub fn carrier_gateway_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.carrier_gateway_ids(input.into());
            self
        }
        /// <p>One or more carrier gateway IDs.</p>
        pub fn set_carrier_gateway_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_carrier_gateway_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>carrier-gateway-id</code> - The ID of the carrier gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the carrier gateway (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner of the carrier gateway.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC associated with the carrier gateway.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>carrier-gateway-id</code> - The ID of the carrier gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the carrier gateway (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner of the carrier gateway.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC associated with the carrier gateway.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeClassicLinkInstances`.
    ///
    /// <p>Describes one or more of your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink. You cannot use this request to return information about other instances.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeClassicLinkInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_classic_link_instances_input::Builder,
    }
    impl DescribeClassicLinkInstances {
        /// Creates a new `DescribeClassicLinkInstances`.
        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::DescribeClassicLinkInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeClassicLinkInstancesError>,
        > {
            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::DescribeClassicLinkInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeClassicLinkInstancesError>,
        > {
            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::DescribeClassicLinkInstancesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeClassicLinkInstancesPaginator {
            crate::paginator::DescribeClassicLinkInstancesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>group-id</code> - The ID of a VPC security group that's associated with the instance.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC to which the instance is linked.</p> <p> <code>vpc-id</code> - The ID of the VPC that the instance is linked to.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>group-id</code> - The ID of a VPC security group that's associated with the instance.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC to which the instance is linked.</p> <p> <code>vpc-id</code> - The ID of the VPC that the instance is linked to.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>One or more instance IDs. Must be instances linked to a VPC through ClassicLink.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>One or more instance IDs. Must be instances linked to a VPC through ClassicLink.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        /// <p>Constraint: If the value is greater than 1000, we return only 1000 items.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        /// <p>Constraint: If the value is greater than 1000, we return only 1000 items.</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 token for the next page of results.</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 page of results.</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 `DescribeClientVpnAuthorizationRules`.
    ///
    /// <p>Describes the authorization rules for a specified Client VPN endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeClientVpnAuthorizationRules {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_client_vpn_authorization_rules_input::Builder,
    }
    impl DescribeClientVpnAuthorizationRules {
        /// Creates a new `DescribeClientVpnAuthorizationRules`.
        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::DescribeClientVpnAuthorizationRules,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeClientVpnAuthorizationRulesError,
            >,
        > {
            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::DescribeClientVpnAuthorizationRulesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeClientVpnAuthorizationRulesError,
            >,
        > {
            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::DescribeClientVpnAuthorizationRulesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeClientVpnAuthorizationRulesPaginator {
            crate::paginator::DescribeClientVpnAuthorizationRulesPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token to retrieve the next page of results.</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 to retrieve the next page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>description</code> - The description of the authorization rule.</p> </li>
        /// <li> <p> <code>destination-cidr</code> - The CIDR of the network to which the authorization rule applies.</p> </li>
        /// <li> <p> <code>group-id</code> - The ID of the Active Directory group to which the authorization rule grants access.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>description</code> - The description of the authorization rule.</p> </li>
        /// <li> <p> <code>destination-cidr</code> - The CIDR of the network to which the authorization rule applies.</p> </li>
        /// <li> <p> <code>group-id</code> - The ID of the Active Directory group to which the authorization rule grants access.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 `DescribeClientVpnConnections`.
    ///
    /// <p>Describes active client connections and connections that have been terminated within the last 60 minutes for the specified Client VPN endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeClientVpnConnections {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_client_vpn_connections_input::Builder,
    }
    impl DescribeClientVpnConnections {
        /// Creates a new `DescribeClientVpnConnections`.
        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::DescribeClientVpnConnections,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeClientVpnConnectionsError>,
        > {
            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::DescribeClientVpnConnectionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeClientVpnConnectionsError>,
        > {
            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::DescribeClientVpnConnectionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeClientVpnConnectionsPaginator {
            crate::paginator::DescribeClientVpnConnectionsPaginator::new(self.handle, self.inner)
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>connection-id</code> - The ID of the connection.</p> </li>
        /// <li> <p> <code>username</code> - For Active Directory client authentication, the user name of the client who established the client connection.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>connection-id</code> - The ID of the connection.</p> </li>
        /// <li> <p> <code>username</code> - For Active Directory client authentication, the user name of the client who established the client connection.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The token to retrieve the next page of results.</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 to retrieve the next page of results.</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 for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeClientVpnEndpoints`.
    ///
    /// <p>Describes one or more Client VPN endpoints in the account.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeClientVpnEndpoints {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_client_vpn_endpoints_input::Builder,
    }
    impl DescribeClientVpnEndpoints {
        /// Creates a new `DescribeClientVpnEndpoints`.
        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::DescribeClientVpnEndpoints,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeClientVpnEndpointsError>,
        > {
            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::DescribeClientVpnEndpointsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeClientVpnEndpointsError>,
        > {
            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::DescribeClientVpnEndpointsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeClientVpnEndpointsPaginator {
            crate::paginator::DescribeClientVpnEndpointsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `ClientVpnEndpointIds`.
        ///
        /// To override the contents of this collection use [`set_client_vpn_endpoint_ids`](Self::set_client_vpn_endpoint_ids).
        ///
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_ids(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_ids(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>endpoint-id</code> - The ID of the Client VPN endpoint.</p> </li>
        /// <li> <p> <code>transport-protocol</code> - The transport protocol (<code>tcp</code> | <code>udp</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>endpoint-id</code> - The ID of the Client VPN endpoint.</p> </li>
        /// <li> <p> <code>transport-protocol</code> - The transport protocol (<code>tcp</code> | <code>udp</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeClientVpnRoutes`.
    ///
    /// <p>Describes the routes for the specified Client VPN endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeClientVpnRoutes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_client_vpn_routes_input::Builder,
    }
    impl DescribeClientVpnRoutes {
        /// Creates a new `DescribeClientVpnRoutes`.
        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::DescribeClientVpnRoutes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeClientVpnRoutesError>,
        > {
            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::DescribeClientVpnRoutesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeClientVpnRoutesError>,
        > {
            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::DescribeClientVpnRoutesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeClientVpnRoutesPaginator {
            crate::paginator::DescribeClientVpnRoutesPaginator::new(self.handle, self.inner)
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>destination-cidr</code> - The CIDR of the route destination.</p> </li>
        /// <li> <p> <code>origin</code> - How the route was associated with the Client VPN endpoint (<code>associate</code> | <code>add-route</code>).</p> </li>
        /// <li> <p> <code>target-subnet</code> - The ID of the subnet through which traffic is routed.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>destination-cidr</code> - The CIDR of the route destination.</p> </li>
        /// <li> <p> <code>origin</code> - How the route was associated with the Client VPN endpoint (<code>associate</code> | <code>add-route</code>).</p> </li>
        /// <li> <p> <code>target-subnet</code> - The ID of the subnet through which traffic is routed.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeClientVpnTargetNetworks`.
    ///
    /// <p>Describes the target networks associated with the specified Client VPN endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeClientVpnTargetNetworks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_client_vpn_target_networks_input::Builder,
    }
    impl DescribeClientVpnTargetNetworks {
        /// Creates a new `DescribeClientVpnTargetNetworks`.
        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::DescribeClientVpnTargetNetworks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeClientVpnTargetNetworksError>,
        > {
            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::DescribeClientVpnTargetNetworksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeClientVpnTargetNetworksError>,
        > {
            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::DescribeClientVpnTargetNetworksPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeClientVpnTargetNetworksPaginator {
            crate::paginator::DescribeClientVpnTargetNetworksPaginator::new(self.handle, self.inner)
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// Appends an item to `AssociationIds`.
        ///
        /// To override the contents of this collection use [`set_association_ids`](Self::set_association_ids).
        ///
        /// <p>The IDs of the target network associations.</p>
        pub fn association_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_ids(input.into());
            self
        }
        /// <p>The IDs of the target network associations.</p>
        pub fn set_association_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_association_ids(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 for the request in a single page. The remaining results can be seen by sending another request with the nextToken value.</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>association-id</code> - The ID of the association.</p> </li>
        /// <li> <p> <code>target-network-id</code> - The ID of the subnet specified as the target network.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC in which the target network is located.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>association-id</code> - The ID of the association.</p> </li>
        /// <li> <p> <code>target-network-id</code> - The ID of the subnet specified as the target network.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC in which the target network is located.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeCoipPools`.
    ///
    /// <p>Describes the specified customer-owned address pools or all of your customer-owned address pools.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeCoipPools {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_coip_pools_input::Builder,
    }
    impl DescribeCoipPools {
        /// Creates a new `DescribeCoipPools`.
        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::DescribeCoipPools,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeCoipPoolsError>,
        > {
            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::DescribeCoipPoolsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeCoipPoolsError>,
        > {
            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::DescribeCoipPoolsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeCoipPoolsPaginator {
            crate::paginator::DescribeCoipPoolsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `PoolIds`.
        ///
        /// To override the contents of this collection use [`set_pool_ids`](Self::set_pool_ids).
        ///
        /// <p>The IDs of the address pools.</p>
        pub fn pool_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.pool_ids(input.into());
            self
        }
        /// <p>The IDs of the address pools.</p>
        pub fn set_pool_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_pool_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>coip-pool.local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>
        /// <li> <p> <code>coip-pool.pool-id</code> - The ID of the address pool.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>coip-pool.local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>
        /// <li> <p> <code>coip-pool.pool-id</code> - The ID of the address pool.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeConversionTasks`.
    ///
    /// <p>Describes the specified conversion tasks or all your conversion tasks. For more information, see the <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/">VM Import/Export User Guide</a>.</p>
    /// <p>For information about the import manifest referenced by this API action, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html">VM Import Manifest</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeConversionTasks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_conversion_tasks_input::Builder,
    }
    impl DescribeConversionTasks {
        /// Creates a new `DescribeConversionTasks`.
        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::DescribeConversionTasks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeConversionTasksError>,
        > {
            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::DescribeConversionTasksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeConversionTasksError>,
        > {
            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 `ConversionTaskIds`.
        ///
        /// To override the contents of this collection use [`set_conversion_task_ids`](Self::set_conversion_task_ids).
        ///
        /// <p>The conversion task IDs.</p>
        pub fn conversion_task_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.conversion_task_ids(input.into());
            self
        }
        /// <p>The conversion task IDs.</p>
        pub fn set_conversion_task_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_conversion_task_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeCustomerGateways`.
    ///
    /// <p>Describes one or more of your VPN customer gateways.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html">Amazon Web Services Site-to-Site VPN</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeCustomerGateways {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_customer_gateways_input::Builder,
    }
    impl DescribeCustomerGateways {
        /// Creates a new `DescribeCustomerGateways`.
        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::DescribeCustomerGateways,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeCustomerGatewaysError>,
        > {
            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::DescribeCustomerGatewaysOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeCustomerGatewaysError>,
        > {
            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 `CustomerGatewayIds`.
        ///
        /// To override the contents of this collection use [`set_customer_gateway_ids`](Self::set_customer_gateway_ids).
        ///
        /// <p>One or more customer gateway IDs.</p>
        /// <p>Default: Describes all your customer gateways.</p>
        pub fn customer_gateway_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.customer_gateway_ids(input.into());
            self
        }
        /// <p>One or more customer gateway IDs.</p>
        /// <p>Default: Describes all your customer gateways.</p>
        pub fn set_customer_gateway_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_customer_gateway_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>bgp-asn</code> - The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).</p> </li>
        /// <li> <p> <code>customer-gateway-id</code> - The ID of the customer gateway.</p> </li>
        /// <li> <p> <code>ip-address</code> - The IP address of the customer gateway device's external interface.</p> </li>
        /// <li> <p> <code>state</code> - The state of the customer gateway (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>type</code> - The type of customer gateway. Currently, the only supported type is <code>ipsec.1</code>.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>bgp-asn</code> - The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).</p> </li>
        /// <li> <p> <code>customer-gateway-id</code> - The ID of the customer gateway.</p> </li>
        /// <li> <p> <code>ip-address</code> - The IP address of the customer gateway device's external interface.</p> </li>
        /// <li> <p> <code>state</code> - The state of the customer gateway (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>type</code> - The type of customer gateway. Currently, the only supported type is <code>ipsec.1</code>.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeDhcpOptions`.
    ///
    /// <p>Describes one or more of your DHCP options sets.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html">DHCP options sets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeDhcpOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_dhcp_options_input::Builder,
    }
    impl DescribeDhcpOptions {
        /// Creates a new `DescribeDhcpOptions`.
        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::DescribeDhcpOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeDhcpOptionsError>,
        > {
            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::DescribeDhcpOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeDhcpOptionsError>,
        > {
            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::DescribeDhcpOptionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeDhcpOptionsPaginator {
            crate::paginator::DescribeDhcpOptionsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `DhcpOptionsIds`.
        ///
        /// To override the contents of this collection use [`set_dhcp_options_ids`](Self::set_dhcp_options_ids).
        ///
        /// <p>The IDs of one or more DHCP options sets.</p>
        /// <p>Default: Describes all your DHCP options sets.</p>
        pub fn dhcp_options_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.dhcp_options_ids(input.into());
            self
        }
        /// <p>The IDs of one or more DHCP options sets.</p>
        /// <p>Default: Describes all your DHCP options sets.</p>
        pub fn set_dhcp_options_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_dhcp_options_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>dhcp-options-id</code> - The ID of a DHCP options set.</p> </li>
        /// <li> <p> <code>key</code> - The key for one of the options (for example, <code>domain-name</code>).</p> </li>
        /// <li> <p> <code>value</code> - The value for one of the options.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the DHCP options set.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>dhcp-options-id</code> - The ID of a DHCP options set.</p> </li>
        /// <li> <p> <code>key</code> - The key for one of the options (for example, <code>domain-name</code>).</p> </li>
        /// <li> <p> <code>value</code> - The value for one of the options.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the DHCP options set.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeEgressOnlyInternetGateways`.
    ///
    /// <p>Describes one or more of your egress-only internet gateways.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeEgressOnlyInternetGateways {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_egress_only_internet_gateways_input::Builder,
    }
    impl DescribeEgressOnlyInternetGateways {
        /// Creates a new `DescribeEgressOnlyInternetGateways`.
        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::DescribeEgressOnlyInternetGateways,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeEgressOnlyInternetGatewaysError,
            >,
        > {
            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::DescribeEgressOnlyInternetGatewaysOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeEgressOnlyInternetGatewaysError,
            >,
        > {
            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::DescribeEgressOnlyInternetGatewaysPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeEgressOnlyInternetGatewaysPaginator {
            crate::paginator::DescribeEgressOnlyInternetGatewaysPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `EgressOnlyInternetGatewayIds`.
        ///
        /// To override the contents of this collection use [`set_egress_only_internet_gateway_ids`](Self::set_egress_only_internet_gateway_ids).
        ///
        /// <p>One or more egress-only internet gateway IDs.</p>
        pub fn egress_only_internet_gateway_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.egress_only_internet_gateway_ids(input.into());
            self
        }
        /// <p>One or more egress-only internet gateway IDs.</p>
        pub fn set_egress_only_internet_gateway_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_egress_only_internet_gateway_ids(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeElasticGpus`.
    ///
    /// <p>Describes the Elastic Graphics accelerator associated with your instances. For more information about Elastic Graphics, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html">Amazon Elastic Graphics</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeElasticGpus {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_elastic_gpus_input::Builder,
    }
    impl DescribeElasticGpus {
        /// Creates a new `DescribeElasticGpus`.
        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::DescribeElasticGpus,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeElasticGpusError>,
        > {
            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::DescribeElasticGpusOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeElasticGpusError>,
        > {
            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 `ElasticGpuIds`.
        ///
        /// To override the contents of this collection use [`set_elastic_gpu_ids`](Self::set_elastic_gpu_ids).
        ///
        /// <p>The Elastic Graphics accelerator IDs.</p>
        pub fn elastic_gpu_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.elastic_gpu_ids(input.into());
            self
        }
        /// <p>The Elastic Graphics accelerator IDs.</p>
        pub fn set_elastic_gpu_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_elastic_gpu_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone in which the Elastic Graphics accelerator resides.</p> </li>
        /// <li> <p> <code>elastic-gpu-health</code> - The status of the Elastic Graphics accelerator (<code>OK</code> | <code>IMPAIRED</code>).</p> </li>
        /// <li> <p> <code>elastic-gpu-state</code> - The state of the Elastic Graphics accelerator (<code>ATTACHED</code>).</p> </li>
        /// <li> <p> <code>elastic-gpu-type</code> - The type of Elastic Graphics accelerator; for example, <code>eg1.medium</code>.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance to which the Elastic Graphics accelerator is associated.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone in which the Elastic Graphics accelerator resides.</p> </li>
        /// <li> <p> <code>elastic-gpu-health</code> - The status of the Elastic Graphics accelerator (<code>OK</code> | <code>IMPAIRED</code>).</p> </li>
        /// <li> <p> <code>elastic-gpu-state</code> - The state of the Elastic Graphics accelerator (<code>ATTACHED</code>).</p> </li>
        /// <li> <p> <code>elastic-gpu-type</code> - The type of Elastic Graphics accelerator; for example, <code>eg1.medium</code>.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance to which the Elastic Graphics accelerator is associated.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000.</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 token to request the next page of results.</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 to request the next page of results.</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 `DescribeExportImageTasks`.
    ///
    /// <p>Describes the specified export image tasks or all of your export image tasks.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeExportImageTasks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_export_image_tasks_input::Builder,
    }
    impl DescribeExportImageTasks {
        /// Creates a new `DescribeExportImageTasks`.
        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::DescribeExportImageTasks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeExportImageTasksError>,
        > {
            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::DescribeExportImageTasksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeExportImageTasksError>,
        > {
            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::DescribeExportImageTasksPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeExportImageTasksPaginator {
            crate::paginator::DescribeExportImageTasksPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>Filter tasks using the <code>task-state</code> filter and one of the following values: <code>active</code>, <code>completed</code>, <code>deleting</code>, or <code>deleted</code>.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>Filter tasks using the <code>task-state</code> filter and one of the following values: <code>active</code>, <code>completed</code>, <code>deleting</code>, or <code>deleted</code>.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `ExportImageTaskIds`.
        ///
        /// To override the contents of this collection use [`set_export_image_task_ids`](Self::set_export_image_task_ids).
        ///
        /// <p>The IDs of the export image tasks.</p>
        pub fn export_image_task_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.export_image_task_ids(input.into());
            self
        }
        /// <p>The IDs of the export image tasks.</p>
        pub fn set_export_image_task_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_export_image_task_ids(input);
            self
        }
        /// <p>The maximum number of results to return in a single call.</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 a single call.</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 that indicates the next page of results.</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 that indicates the next page of results.</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 `DescribeExportTasks`.
    ///
    /// <p>Describes the specified export instance tasks or all of your export instance tasks.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeExportTasks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_export_tasks_input::Builder,
    }
    impl DescribeExportTasks {
        /// Creates a new `DescribeExportTasks`.
        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::DescribeExportTasks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeExportTasksError>,
        > {
            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::DescribeExportTasksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeExportTasksError>,
        > {
            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 `ExportTaskIds`.
        ///
        /// To override the contents of this collection use [`set_export_task_ids`](Self::set_export_task_ids).
        ///
        /// <p>The export task IDs.</p>
        pub fn export_task_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.export_task_ids(input.into());
            self
        }
        /// <p>The export task IDs.</p>
        pub fn set_export_task_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_export_task_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>the filters for the export tasks.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>the filters for the export tasks.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeFastLaunchImages`.
    ///
    /// <p>Describe details for Windows AMIs that are configured for faster launching.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeFastLaunchImages {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_fast_launch_images_input::Builder,
    }
    impl DescribeFastLaunchImages {
        /// Creates a new `DescribeFastLaunchImages`.
        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::DescribeFastLaunchImages,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeFastLaunchImagesError>,
        > {
            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::DescribeFastLaunchImagesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeFastLaunchImagesError>,
        > {
            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::DescribeFastLaunchImagesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeFastLaunchImagesPaginator {
            crate::paginator::DescribeFastLaunchImagesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `ImageIds`.
        ///
        /// To override the contents of this collection use [`set_image_ids`](Self::set_image_ids).
        ///
        /// <p>Details for one or more Windows AMI image IDs.</p>
        pub fn image_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_ids(input.into());
            self
        }
        /// <p>Details for one or more Windows AMI image IDs.</p>
        pub fn set_image_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_image_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>Use the following filters to streamline results.</p>
        /// <ul>
        /// <li> <p> <code>resource-type</code> - The resource type for pre-provisioning.</p> </li>
        /// <li> <p> <code>launch-template</code> - The launch template that is associated with the pre-provisioned Windows AMI.</p> </li>
        /// <li> <p> <code>owner-id</code> - The owner ID for the pre-provisioning resource.</p> </li>
        /// <li> <p> <code>state</code> - The current state of fast launching for the Windows AMI.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>Use the following filters to streamline results.</p>
        /// <ul>
        /// <li> <p> <code>resource-type</code> - The resource type for pre-provisioning.</p> </li>
        /// <li> <p> <code>launch-template</code> - The launch template that is associated with the pre-provisioned Windows AMI.</p> </li>
        /// <li> <p> <code>owner-id</code> - The owner ID for the pre-provisioning resource.</p> </li>
        /// <li> <p> <code>state</code> - The current state of fast launching for the Windows AMI.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned NextToken value. If this parameter is not specified, then all results are returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned NextToken value. If this parameter is not specified, then all results are returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The token for the next set of results.</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.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeFastSnapshotRestores`.
    ///
    /// <p>Describes the state of fast snapshot restores for your snapshots.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeFastSnapshotRestores {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_fast_snapshot_restores_input::Builder,
    }
    impl DescribeFastSnapshotRestores {
        /// Creates a new `DescribeFastSnapshotRestores`.
        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::DescribeFastSnapshotRestores,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeFastSnapshotRestoresError>,
        > {
            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::DescribeFastSnapshotRestoresOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeFastSnapshotRestoresError>,
        > {
            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::DescribeFastSnapshotRestoresPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeFastSnapshotRestoresPaginator {
            crate::paginator::DescribeFastSnapshotRestoresPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code>: The Availability Zone of the snapshot.</p> </li>
        /// <li> <p> <code>owner-id</code>: The ID of the Amazon Web Services account that enabled fast snapshot restore on the snapshot.</p> </li>
        /// <li> <p> <code>snapshot-id</code>: The ID of the snapshot.</p> </li>
        /// <li> <p> <code>state</code>: The state of fast snapshot restores for the snapshot (<code>enabling</code> | <code>optimizing</code> | <code>enabled</code> | <code>disabling</code> | <code>disabled</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code>: The Availability Zone of the snapshot.</p> </li>
        /// <li> <p> <code>owner-id</code>: The ID of the Amazon Web Services account that enabled fast snapshot restore on the snapshot.</p> </li>
        /// <li> <p> <code>snapshot-id</code>: The ID of the snapshot.</p> </li>
        /// <li> <p> <code>state</code>: The state of fast snapshot restores for the snapshot (<code>enabling</code> | <code>optimizing</code> | <code>enabled</code> | <code>disabling</code> | <code>disabled</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeFleetHistory`.
    ///
    /// <p>Describes the events for the specified EC2 Fleet during the specified time.</p>
    /// <p>EC2 Fleet events are delayed by up to 30 seconds before they can be described. This ensures that you can query by the last evaluated time and not miss a recorded event. EC2 Fleet events are available for 48 hours.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/fleet-monitor.html">Monitor fleet events using Amazon EventBridge</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeFleetHistory {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_fleet_history_input::Builder,
    }
    impl DescribeFleetHistory {
        /// Creates a new `DescribeFleetHistory`.
        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::DescribeFleetHistory,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeFleetHistoryError>,
        > {
            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::DescribeFleetHistoryOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeFleetHistoryError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The type of events to describe. By default, all events are described.</p>
        pub fn event_type(mut self, input: crate::model::FleetEventType) -> Self {
            self.inner = self.inner.event_type(input);
            self
        }
        /// <p>The type of events to describe. By default, all events are described.</p>
        pub fn set_event_type(
            mut self,
            input: std::option::Option<crate::model::FleetEventType>,
        ) -> Self {
            self.inner = self.inner.set_event_type(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the EC2 Fleet.</p>
        pub fn fleet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fleet_id(input.into());
            self
        }
        /// <p>The ID of the EC2 Fleet.</p>
        pub fn set_fleet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_fleet_id(input);
            self
        }
        /// <p>The start date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn start_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.start_time(input);
            self
        }
        /// <p>The start date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn set_start_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_start_time(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeFleetInstances`.
    ///
    /// <p>Describes the running instances for the specified EC2 Fleet.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#monitor-ec2-fleet">Monitor your EC2 Fleet</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeFleetInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_fleet_instances_input::Builder,
    }
    impl DescribeFleetInstances {
        /// Creates a new `DescribeFleetInstances`.
        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::DescribeFleetInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeFleetInstancesError>,
        > {
            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::DescribeFleetInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeFleetInstancesError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the EC2 Fleet.</p>
        pub fn fleet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fleet_id(input.into());
            self
        }
        /// <p>The ID of the EC2 Fleet.</p>
        pub fn set_fleet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_fleet_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-type</code> - The instance type.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-type</code> - The instance type.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeFleets`.
    ///
    /// <p>Describes the specified EC2 Fleets or all of your EC2 Fleets.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#monitor-ec2-fleet">Monitor your EC2 Fleet</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeFleets {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_fleets_input::Builder,
    }
    impl DescribeFleets {
        /// Creates a new `DescribeFleets`.
        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::DescribeFleets,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeFleetsError>,
        > {
            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::DescribeFleetsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeFleetsError>,
        > {
            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::DescribeFleetsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeFleetsPaginator {
            crate::paginator::DescribeFleetsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</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
        }
        /// Appends an item to `FleetIds`.
        ///
        /// To override the contents of this collection use [`set_fleet_ids`](Self::set_fleet_ids).
        ///
        /// <p>The IDs of the EC2 Fleets.</p> <note>
        /// <p>If a fleet is of type <code>instant</code>, you must specify the fleet ID, otherwise it does not appear in the response.</p>
        /// </note>
        pub fn fleet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fleet_ids(input.into());
            self
        }
        /// <p>The IDs of the EC2 Fleets.</p> <note>
        /// <p>If a fleet is of type <code>instant</code>, you must specify the fleet ID, otherwise it does not appear in the response.</p>
        /// </note>
        pub fn set_fleet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_fleet_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>activity-status</code> - The progress of the EC2 Fleet ( <code>error</code> | <code>pending-fulfillment</code> | <code>pending-termination</code> | <code>fulfilled</code>).</p> </li>
        /// <li> <p> <code>excess-capacity-termination-policy</code> - Indicates whether to terminate running instances if the target capacity is decreased below the current EC2 Fleet size (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>fleet-state</code> - The state of the EC2 Fleet (<code>submitted</code> | <code>active</code> | <code>deleted</code> | <code>failed</code> | <code>deleted-running</code> | <code>deleted-terminating</code> | <code>modifying</code>).</p> </li>
        /// <li> <p> <code>replace-unhealthy-instances</code> - Indicates whether EC2 Fleet should replace unhealthy instances (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>type</code> - The type of request (<code>instant</code> | <code>request</code> | <code>maintain</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>activity-status</code> - The progress of the EC2 Fleet ( <code>error</code> | <code>pending-fulfillment</code> | <code>pending-termination</code> | <code>fulfilled</code>).</p> </li>
        /// <li> <p> <code>excess-capacity-termination-policy</code> - Indicates whether to terminate running instances if the target capacity is decreased below the current EC2 Fleet size (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>fleet-state</code> - The state of the EC2 Fleet (<code>submitted</code> | <code>active</code> | <code>deleted</code> | <code>failed</code> | <code>deleted-running</code> | <code>deleted-terminating</code> | <code>modifying</code>).</p> </li>
        /// <li> <p> <code>replace-unhealthy-instances</code> - Indicates whether EC2 Fleet should replace unhealthy instances (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>type</code> - The type of request (<code>instant</code> | <code>request</code> | <code>maintain</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeFlowLogs`.
    ///
    /// <p>Describes one or more flow logs.</p>
    /// <p>To view the published flow log records, you must view the log destination. For example, the CloudWatch Logs log group, the Amazon S3 bucket, or the Kinesis Data Firehose delivery stream.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeFlowLogs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_flow_logs_input::Builder,
    }
    impl DescribeFlowLogs {
        /// Creates a new `DescribeFlowLogs`.
        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::DescribeFlowLogs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeFlowLogsError>,
        > {
            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::DescribeFlowLogsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeFlowLogsError>,
        > {
            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::DescribeFlowLogsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeFlowLogsPaginator {
            crate::paginator::DescribeFlowLogsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filter`.
        ///
        /// To override the contents of this collection use [`set_filter`](Self::set_filter).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>deliver-log-status</code> - The status of the logs delivery (<code>SUCCESS</code> | <code>FAILED</code>).</p> </li>
        /// <li> <p> <code>log-destination-type</code> - The type of destination for the flow log data (<code>cloud-watch-logs</code> | <code>s3</code> | <code>kinesis-data-firehose</code>).</p> </li>
        /// <li> <p> <code>flow-log-id</code> - The ID of the flow log.</p> </li>
        /// <li> <p> <code>log-group-name</code> - The name of the log group.</p> </li>
        /// <li> <p> <code>resource-id</code> - The ID of the VPC, subnet, or network interface.</p> </li>
        /// <li> <p> <code>traffic-type</code> - The type of traffic (<code>ACCEPT</code> | <code>REJECT</code> | <code>ALL</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filter(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filter(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>deliver-log-status</code> - The status of the logs delivery (<code>SUCCESS</code> | <code>FAILED</code>).</p> </li>
        /// <li> <p> <code>log-destination-type</code> - The type of destination for the flow log data (<code>cloud-watch-logs</code> | <code>s3</code> | <code>kinesis-data-firehose</code>).</p> </li>
        /// <li> <p> <code>flow-log-id</code> - The ID of the flow log.</p> </li>
        /// <li> <p> <code>log-group-name</code> - The name of the log group.</p> </li>
        /// <li> <p> <code>resource-id</code> - The ID of the VPC, subnet, or network interface.</p> </li>
        /// <li> <p> <code>traffic-type</code> - The type of traffic (<code>ACCEPT</code> | <code>REJECT</code> | <code>ALL</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filter(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filter(input);
            self
        }
        /// Appends an item to `FlowLogIds`.
        ///
        /// To override the contents of this collection use [`set_flow_log_ids`](Self::set_flow_log_ids).
        ///
        /// <p>One or more flow log IDs.</p>
        /// <p>Constraint: Maximum of 1000 flow log IDs.</p>
        pub fn flow_log_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.flow_log_ids(input.into());
            self
        }
        /// <p>One or more flow log IDs.</p>
        /// <p>Constraint: Maximum of 1000 flow log IDs.</p>
        pub fn set_flow_log_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_flow_log_ids(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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 `DescribeFpgaImageAttribute`.
    ///
    /// <p>Describes the specified attribute of the specified Amazon FPGA Image (AFI).</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeFpgaImageAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_fpga_image_attribute_input::Builder,
    }
    impl DescribeFpgaImageAttribute {
        /// Creates a new `DescribeFpgaImageAttribute`.
        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::DescribeFpgaImageAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeFpgaImageAttributeError>,
        > {
            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::DescribeFpgaImageAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeFpgaImageAttributeError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the AFI.</p>
        pub fn fpga_image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fpga_image_id(input.into());
            self
        }
        /// <p>The ID of the AFI.</p>
        pub fn set_fpga_image_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_fpga_image_id(input);
            self
        }
        /// <p>The AFI attribute.</p>
        pub fn attribute(mut self, input: crate::model::FpgaImageAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The AFI attribute.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::FpgaImageAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeFpgaImages`.
    ///
    /// <p>Describes the Amazon FPGA Images (AFIs) available to you. These include public AFIs, private AFIs that you own, and AFIs owned by other Amazon Web Services accounts for which you have load permissions.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeFpgaImages {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_fpga_images_input::Builder,
    }
    impl DescribeFpgaImages {
        /// Creates a new `DescribeFpgaImages`.
        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::DescribeFpgaImages,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeFpgaImagesError>,
        > {
            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::DescribeFpgaImagesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeFpgaImagesError>,
        > {
            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::DescribeFpgaImagesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeFpgaImagesPaginator {
            crate::paginator::DescribeFpgaImagesPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `FpgaImageIds`.
        ///
        /// To override the contents of this collection use [`set_fpga_image_ids`](Self::set_fpga_image_ids).
        ///
        /// <p>The AFI IDs.</p>
        pub fn fpga_image_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fpga_image_ids(input.into());
            self
        }
        /// <p>The AFI IDs.</p>
        pub fn set_fpga_image_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_fpga_image_ids(input);
            self
        }
        /// Appends an item to `Owners`.
        ///
        /// To override the contents of this collection use [`set_owners`](Self::set_owners).
        ///
        /// <p>Filters the AFI by owner. Specify an Amazon Web Services account ID, <code>self</code> (owner is the sender of the request), or an Amazon Web Services owner alias (valid values are <code>amazon</code> | <code>aws-marketplace</code>).</p>
        pub fn owners(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.owners(input.into());
            self
        }
        /// <p>Filters the AFI by owner. Specify an Amazon Web Services account ID, <code>self</code> (owner is the sender of the request), or an Amazon Web Services owner alias (valid values are <code>amazon</code> | <code>aws-marketplace</code>).</p>
        pub fn set_owners(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_owners(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>create-time</code> - The creation time of the AFI.</p> </li>
        /// <li> <p> <code>fpga-image-id</code> - The FPGA image identifier (AFI ID).</p> </li>
        /// <li> <p> <code>fpga-image-global-id</code> - The global FPGA image identifier (AGFI ID).</p> </li>
        /// <li> <p> <code>name</code> - The name of the AFI.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the AFI owner.</p> </li>
        /// <li> <p> <code>product-code</code> - The product code.</p> </li>
        /// <li> <p> <code>shell-version</code> - The version of the Amazon Web Services Shell that was used to create the bitstream.</p> </li>
        /// <li> <p> <code>state</code> - The state of the AFI (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>unavailable</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>update-time</code> - The time of the most recent update.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>create-time</code> - The creation time of the AFI.</p> </li>
        /// <li> <p> <code>fpga-image-id</code> - The FPGA image identifier (AFI ID).</p> </li>
        /// <li> <p> <code>fpga-image-global-id</code> - The global FPGA image identifier (AGFI ID).</p> </li>
        /// <li> <p> <code>name</code> - The name of the AFI.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the AFI owner.</p> </li>
        /// <li> <p> <code>product-code</code> - The product code.</p> </li>
        /// <li> <p> <code>shell-version</code> - The version of the Amazon Web Services Shell that was used to create the bitstream.</p> </li>
        /// <li> <p> <code>state</code> - The state of the AFI (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>unavailable</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>update-time</code> - The time of the most recent update.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The token to retrieve the next page of results.</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 to retrieve the next page of results.</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 a single call.</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 a single call.</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 `DescribeHostReservationOfferings`.
    ///
    /// <p>Describes the Dedicated Host reservations that are available to purchase.</p>
    /// <p>The results describe all of the Dedicated Host reservation offerings, including offerings that might not match the instance family and Region of your Dedicated Hosts. When purchasing an offering, ensure that the instance family and Region of the offering matches that of the Dedicated Hosts with which it is to be associated. For more information about supported instance types, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html">Dedicated Hosts</a> in the <i>Amazon EC2 User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeHostReservationOfferings {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_host_reservation_offerings_input::Builder,
    }
    impl DescribeHostReservationOfferings {
        /// Creates a new `DescribeHostReservationOfferings`.
        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::DescribeHostReservationOfferings,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeHostReservationOfferingsError>,
        > {
            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::DescribeHostReservationOfferingsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeHostReservationOfferingsError>,
        > {
            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::DescribeHostReservationOfferingsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeHostReservationOfferingsPaginator {
            crate::paginator::DescribeHostReservationOfferingsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `Filter`.
        ///
        /// To override the contents of this collection use [`set_filter`](Self::set_filter).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-family</code> - The instance family of the offering (for example, <code>m4</code>).</p> </li>
        /// <li> <p> <code>payment-option</code> - The payment option (<code>NoUpfront</code> | <code>PartialUpfront</code> | <code>AllUpfront</code>).</p> </li>
        /// </ul>
        pub fn filter(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filter(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-family</code> - The instance family of the offering (for example, <code>m4</code>).</p> </li>
        /// <li> <p> <code>payment-option</code> - The payment option (<code>NoUpfront</code> | <code>PartialUpfront</code> | <code>AllUpfront</code>).</p> </li>
        /// </ul>
        pub fn set_filter(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filter(input);
            self
        }
        /// <p>This is the maximum duration of the reservation to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 94608000 for three years.</p>
        pub fn max_duration(mut self, input: i32) -> Self {
            self.inner = self.inner.max_duration(input);
            self
        }
        /// <p>This is the maximum duration of the reservation to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 94608000 for three years.</p>
        pub fn set_max_duration(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_duration(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>This is the minimum duration of the reservation you'd like to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 31536000 for one year.</p>
        pub fn min_duration(mut self, input: i32) -> Self {
            self.inner = self.inner.min_duration(input);
            self
        }
        /// <p>This is the minimum duration of the reservation you'd like to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 31536000 for one year.</p>
        pub fn set_min_duration(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_min_duration(input);
            self
        }
        /// <p>The token to use to retrieve the next page of results.</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 to use to retrieve the next page of results.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the reservation offering.</p>
        pub fn offering_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.offering_id(input.into());
            self
        }
        /// <p>The ID of the reservation offering.</p>
        pub fn set_offering_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_offering_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeHostReservations`.
    ///
    /// <p>Describes reservations that are associated with Dedicated Hosts in your account.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeHostReservations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_host_reservations_input::Builder,
    }
    impl DescribeHostReservations {
        /// Creates a new `DescribeHostReservations`.
        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::DescribeHostReservations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeHostReservationsError>,
        > {
            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::DescribeHostReservationsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeHostReservationsError>,
        > {
            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::DescribeHostReservationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeHostReservationsPaginator {
            crate::paginator::DescribeHostReservationsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filter`.
        ///
        /// To override the contents of this collection use [`set_filter`](Self::set_filter).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-family</code> - The instance family (for example, <code>m4</code>).</p> </li>
        /// <li> <p> <code>payment-option</code> - The payment option (<code>NoUpfront</code> | <code>PartialUpfront</code> | <code>AllUpfront</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the reservation (<code>payment-pending</code> | <code>payment-failed</code> | <code>active</code> | <code>retired</code>).</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filter(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filter(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-family</code> - The instance family (for example, <code>m4</code>).</p> </li>
        /// <li> <p> <code>payment-option</code> - The payment option (<code>NoUpfront</code> | <code>PartialUpfront</code> | <code>AllUpfront</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the reservation (<code>payment-pending</code> | <code>payment-failed</code> | <code>active</code> | <code>retired</code>).</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filter(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filter(input);
            self
        }
        /// Appends an item to `HostReservationIdSet`.
        ///
        /// To override the contents of this collection use [`set_host_reservation_id_set`](Self::set_host_reservation_id_set).
        ///
        /// <p>The host reservation IDs.</p>
        pub fn host_reservation_id_set(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.host_reservation_id_set(input.into());
            self
        }
        /// <p>The host reservation IDs.</p>
        pub fn set_host_reservation_id_set(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_host_reservation_id_set(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</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 token to use to retrieve the next page of results.</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 to use to retrieve the next page of results.</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 `DescribeHosts`.
    ///
    /// <p>Describes the specified Dedicated Hosts or all your Dedicated Hosts.</p>
    /// <p>The results describe only the Dedicated Hosts in the Region you're currently using. All listed instances consume capacity on your Dedicated Host. Dedicated Hosts that have recently been released are listed with the state <code>released</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeHosts {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_hosts_input::Builder,
    }
    impl DescribeHosts {
        /// Creates a new `DescribeHosts`.
        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::DescribeHosts,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeHostsError>,
        > {
            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::DescribeHostsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeHostsError>,
        > {
            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::DescribeHostsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeHostsPaginator {
            crate::paginator::DescribeHostsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filter`.
        ///
        /// To override the contents of this collection use [`set_filter`](Self::set_filter).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>auto-placement</code> - Whether auto-placement is enabled or disabled (<code>on</code> | <code>off</code>).</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the host.</p> </li>
        /// <li> <p> <code>client-token</code> - The idempotency token that you provided when you allocated the host.</p> </li>
        /// <li> <p> <code>host-reservation-id</code> - The ID of the reservation assigned to this host.</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type size that the Dedicated Host is configured to support.</p> </li>
        /// <li> <p> <code>state</code> - The allocation state of the Dedicated Host (<code>available</code> | <code>under-assessment</code> | <code>permanent-failure</code> | <code>released</code> | <code>released-permanent-failure</code>).</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filter(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filter(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>auto-placement</code> - Whether auto-placement is enabled or disabled (<code>on</code> | <code>off</code>).</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the host.</p> </li>
        /// <li> <p> <code>client-token</code> - The idempotency token that you provided when you allocated the host.</p> </li>
        /// <li> <p> <code>host-reservation-id</code> - The ID of the reservation assigned to this host.</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type size that the Dedicated Host is configured to support.</p> </li>
        /// <li> <p> <code>state</code> - The allocation state of the Dedicated Host (<code>available</code> | <code>under-assessment</code> | <code>permanent-failure</code> | <code>released</code> | <code>released-permanent-failure</code>).</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filter(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filter(input);
            self
        }
        /// Appends an item to `HostIds`.
        ///
        /// To override the contents of this collection use [`set_host_ids`](Self::set_host_ids).
        ///
        /// <p>The IDs of the Dedicated Hosts. The IDs are used for targeted instance launches.</p>
        pub fn host_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.host_ids(input.into());
            self
        }
        /// <p>The IDs of the Dedicated Hosts. The IDs are used for targeted instance launches.</p>
        pub fn set_host_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_host_ids(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
        /// <p>You cannot specify this parameter and the host IDs parameter in the same 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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
        /// <p>You cannot specify this parameter and the host IDs parameter in the same 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 token to use to retrieve the next page of results.</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 to use to retrieve the next page of results.</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 `DescribeIamInstanceProfileAssociations`.
    ///
    /// <p>Describes your IAM instance profile associations.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeIamInstanceProfileAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_iam_instance_profile_associations_input::Builder,
    }
    impl DescribeIamInstanceProfileAssociations {
        /// Creates a new `DescribeIamInstanceProfileAssociations`.
        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::DescribeIamInstanceProfileAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeIamInstanceProfileAssociationsError,
            >,
        > {
            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::DescribeIamInstanceProfileAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeIamInstanceProfileAssociationsError,
            >,
        > {
            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::DescribeIamInstanceProfileAssociationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeIamInstanceProfileAssociationsPaginator {
            crate::paginator::DescribeIamInstanceProfileAssociationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `AssociationIds`.
        ///
        /// To override the contents of this collection use [`set_association_ids`](Self::set_association_ids).
        ///
        /// <p>The IAM instance profile associations.</p>
        pub fn association_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_ids(input.into());
            self
        }
        /// <p>The IAM instance profile associations.</p>
        pub fn set_association_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_association_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// <li> <p> <code>state</code> - The state of the association (<code>associating</code> | <code>associated</code> | <code>disassociating</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// <li> <p> <code>state</code> - The state of the association (<code>associating</code> | <code>associated</code> | <code>disassociating</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token to request the next page of results.</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 to request the next page of results.</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 `DescribeIdentityIdFormat`.
    ///
    /// <p>Describes the ID format settings for resources for the specified IAM user, IAM role, or root user. For example, you can view the resource types that are enabled for longer IDs. This request only returns information about resource types whose ID formats can be modified; it does not return information about other resource types. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html">Resource IDs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. </p>
    /// <p>The following resource types support longer IDs: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>. </p>
    /// <p>These settings apply to the principal specified in the request. They do not apply to the principal that makes the request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeIdentityIdFormat {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_identity_id_format_input::Builder,
    }
    impl DescribeIdentityIdFormat {
        /// Creates a new `DescribeIdentityIdFormat`.
        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::DescribeIdentityIdFormat,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeIdentityIdFormatError>,
        > {
            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::DescribeIdentityIdFormatOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeIdentityIdFormatError>,
        > {
            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 ARN of the principal, which can be an IAM role, IAM user, or the root user.</p>
        pub fn principal_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.principal_arn(input.into());
            self
        }
        /// <p>The ARN of the principal, which can be an IAM role, IAM user, or the root user.</p>
        pub fn set_principal_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_principal_arn(input);
            self
        }
        /// <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
        pub fn resource(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource(input.into());
            self
        }
        /// <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
        pub fn set_resource(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeIdFormat`.
    ///
    /// <p>Describes the ID format settings for your resources on a per-Region basis, for example, to view which resource types are enabled for longer IDs. This request only returns information about resource types whose ID formats can be modified; it does not return information about other resource types.</p>
    /// <p>The following resource types support longer IDs: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>. </p>
    /// <p>These settings apply to the IAM user who makes the request; they do not apply to the entire Amazon Web Services account. By default, an IAM user defaults to the same settings as the root user, unless they explicitly override the settings by running the <code>ModifyIdFormat</code> command. Resources created with longer IDs are visible to all IAM users, regardless of these settings and provided that they have permission to use the relevant <code>Describe</code> command for the resource type.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeIdFormat {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_id_format_input::Builder,
    }
    impl DescribeIdFormat {
        /// Creates a new `DescribeIdFormat`.
        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::DescribeIdFormat,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeIdFormatError>,
        > {
            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::DescribeIdFormatOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeIdFormatError>,
        > {
            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 type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
        pub fn resource(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource(input.into());
            self
        }
        /// <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
        pub fn set_resource(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeImageAttribute`.
    ///
    /// <p>Describes the specified attribute of the specified AMI. You can specify only one attribute at a time.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeImageAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_image_attribute_input::Builder,
    }
    impl DescribeImageAttribute {
        /// Creates a new `DescribeImageAttribute`.
        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::DescribeImageAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeImageAttributeError>,
        > {
            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::DescribeImageAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeImageAttributeError>,
        > {
            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 AMI attribute.</p>
        /// <p> <b>Note</b>: The <code>blockDeviceMapping</code> attribute is deprecated. Using this attribute returns the <code>Client.AuthFailure</code> error. To get information about the block device mappings for an AMI, use the <code>DescribeImages</code> action.</p>
        pub fn attribute(mut self, input: crate::model::ImageAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The AMI attribute.</p>
        /// <p> <b>Note</b>: The <code>blockDeviceMapping</code> attribute is deprecated. Using this attribute returns the <code>Client.AuthFailure</code> error. To get information about the block device mappings for an AMI, use the <code>DescribeImages</code> action.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::ImageAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeImages`.
    ///
    /// <p>Describes the specified images (AMIs, AKIs, and ARIs) available to you or all of the images available to you.</p>
    /// <p>The images available to you include public images, private images that you own, and private images owned by other Amazon Web Services accounts for which you have explicit launch permissions.</p>
    /// <p>Recently deregistered images appear in the returned results for a short interval and then return empty results. After all instances that reference a deregistered AMI are terminated, specifying the ID of the image will eventually return an error indicating that the AMI ID cannot be found.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeImages {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_images_input::Builder,
    }
    impl DescribeImages {
        /// Creates a new `DescribeImages`.
        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::DescribeImages,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeImagesError>,
        > {
            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::DescribeImagesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeImagesError>,
        > {
            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::DescribeImagesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeImagesPaginator {
            crate::paginator::DescribeImagesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `ExecutableUsers`.
        ///
        /// To override the contents of this collection use [`set_executable_users`](Self::set_executable_users).
        ///
        /// <p>Scopes the images by users with explicit launch permissions. Specify an Amazon Web Services account ID, <code>self</code> (the sender of the request), or <code>all</code> (public AMIs).</p>
        /// <ul>
        /// <li> <p>If you specify an Amazon Web Services account ID that is not your own, only AMIs shared with that specific Amazon Web Services account ID are returned. However, AMIs that are shared with the account’s organization or organizational unit (OU) are not returned.</p> </li>
        /// <li> <p>If you specify <code>self</code> or your own Amazon Web Services account ID, AMIs shared with your account are returned. In addition, AMIs that are shared with the organization or OU of which you are member are also returned. </p> </li>
        /// <li> <p>If you specify <code>all</code>, all public AMIs are returned.</p> </li>
        /// </ul>
        pub fn executable_users(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.executable_users(input.into());
            self
        }
        /// <p>Scopes the images by users with explicit launch permissions. Specify an Amazon Web Services account ID, <code>self</code> (the sender of the request), or <code>all</code> (public AMIs).</p>
        /// <ul>
        /// <li> <p>If you specify an Amazon Web Services account ID that is not your own, only AMIs shared with that specific Amazon Web Services account ID are returned. However, AMIs that are shared with the account’s organization or organizational unit (OU) are not returned.</p> </li>
        /// <li> <p>If you specify <code>self</code> or your own Amazon Web Services account ID, AMIs shared with your account are returned. In addition, AMIs that are shared with the organization or OU of which you are member are also returned. </p> </li>
        /// <li> <p>If you specify <code>all</code>, all public AMIs are returned.</p> </li>
        /// </ul>
        pub fn set_executable_users(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_executable_users(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>architecture</code> - The image architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean value that indicates whether the Amazon EBS volume is deleted on instance termination.</p> </li>
        /// <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.snapshot-id</code> - The ID of the snapshot used for the Amazon EBS volume.</p> </li>
        /// <li> <p> <code>block-device-mapping.volume-size</code> - The volume size of the Amazon EBS volume, in GiB.</p> </li>
        /// <li> <p> <code>block-device-mapping.volume-type</code> - The volume type of the Amazon EBS volume (<code>io1</code> | <code>io2</code> | <code>gp2</code> | <code>gp3</code> | <code>sc1 </code>| <code>st1</code> | <code>standard</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.encrypted</code> - A Boolean that indicates whether the Amazon EBS volume is encrypted.</p> </li>
        /// <li> <p> <code>creation-date</code> - The time when the image was created, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li>
        /// <li> <p> <code>description</code> - The description of the image (provided during image creation).</p> </li>
        /// <li> <p> <code>ena-support</code> - A Boolean that indicates whether enhanced networking with ENA is enabled.</p> </li>
        /// <li> <p> <code>hypervisor</code> - The hypervisor type (<code>ovm</code> | <code>xen</code>).</p> </li>
        /// <li> <p> <code>image-id</code> - The ID of the image.</p> </li>
        /// <li> <p> <code>image-type</code> - The image type (<code>machine</code> | <code>kernel</code> | <code>ramdisk</code>).</p> </li>
        /// <li> <p> <code>is-public</code> - A Boolean that indicates whether the image is public.</p> </li>
        /// <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>
        /// <li> <p> <code>manifest-location</code> - The location of the image manifest.</p> </li>
        /// <li> <p> <code>name</code> - The name of the AMI (provided during image creation).</p> </li>
        /// <li> <p> <code>owner-alias</code> - The owner alias (<code>amazon</code> | <code>aws-marketplace</code>). The valid aliases are defined in an Amazon-maintained list. This is not the Amazon Web Services account alias that can be set using the IAM console. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li>
        /// <li> <p> <code>platform</code> - The platform. The only supported value is <code>windows</code>.</p> </li>
        /// <li> <p> <code>product-code</code> - The product code.</p> </li>
        /// <li> <p> <code>product-code.type</code> - The type of the product code (<code>marketplace</code>).</p> </li>
        /// <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li>
        /// <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li>
        /// <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the image (<code>available</code> | <code>pending</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li>
        /// <li> <p> <code>state-reason-message</code> - The message for the state change.</p> </li>
        /// <li> <p> <code>sriov-net-support</code> - A value of <code>simple</code> indicates that enhanced networking with the Intel 82599 VF interface is enabled.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>virtualization-type</code> - The virtualization type (<code>paravirtual</code> | <code>hvm</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>architecture</code> - The image architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean value that indicates whether the Amazon EBS volume is deleted on instance termination.</p> </li>
        /// <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.snapshot-id</code> - The ID of the snapshot used for the Amazon EBS volume.</p> </li>
        /// <li> <p> <code>block-device-mapping.volume-size</code> - The volume size of the Amazon EBS volume, in GiB.</p> </li>
        /// <li> <p> <code>block-device-mapping.volume-type</code> - The volume type of the Amazon EBS volume (<code>io1</code> | <code>io2</code> | <code>gp2</code> | <code>gp3</code> | <code>sc1 </code>| <code>st1</code> | <code>standard</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.encrypted</code> - A Boolean that indicates whether the Amazon EBS volume is encrypted.</p> </li>
        /// <li> <p> <code>creation-date</code> - The time when the image was created, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li>
        /// <li> <p> <code>description</code> - The description of the image (provided during image creation).</p> </li>
        /// <li> <p> <code>ena-support</code> - A Boolean that indicates whether enhanced networking with ENA is enabled.</p> </li>
        /// <li> <p> <code>hypervisor</code> - The hypervisor type (<code>ovm</code> | <code>xen</code>).</p> </li>
        /// <li> <p> <code>image-id</code> - The ID of the image.</p> </li>
        /// <li> <p> <code>image-type</code> - The image type (<code>machine</code> | <code>kernel</code> | <code>ramdisk</code>).</p> </li>
        /// <li> <p> <code>is-public</code> - A Boolean that indicates whether the image is public.</p> </li>
        /// <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>
        /// <li> <p> <code>manifest-location</code> - The location of the image manifest.</p> </li>
        /// <li> <p> <code>name</code> - The name of the AMI (provided during image creation).</p> </li>
        /// <li> <p> <code>owner-alias</code> - The owner alias (<code>amazon</code> | <code>aws-marketplace</code>). The valid aliases are defined in an Amazon-maintained list. This is not the Amazon Web Services account alias that can be set using the IAM console. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li>
        /// <li> <p> <code>platform</code> - The platform. The only supported value is <code>windows</code>.</p> </li>
        /// <li> <p> <code>product-code</code> - The product code.</p> </li>
        /// <li> <p> <code>product-code.type</code> - The type of the product code (<code>marketplace</code>).</p> </li>
        /// <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li>
        /// <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li>
        /// <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the image (<code>available</code> | <code>pending</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li>
        /// <li> <p> <code>state-reason-message</code> - The message for the state change.</p> </li>
        /// <li> <p> <code>sriov-net-support</code> - A value of <code>simple</code> indicates that enhanced networking with the Intel 82599 VF interface is enabled.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>virtualization-type</code> - The virtualization type (<code>paravirtual</code> | <code>hvm</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `ImageIds`.
        ///
        /// To override the contents of this collection use [`set_image_ids`](Self::set_image_ids).
        ///
        /// <p>The image IDs.</p>
        /// <p>Default: Describes all images available to you.</p>
        pub fn image_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_ids(input.into());
            self
        }
        /// <p>The image IDs.</p>
        /// <p>Default: Describes all images available to you.</p>
        pub fn set_image_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_image_ids(input);
            self
        }
        /// Appends an item to `Owners`.
        ///
        /// To override the contents of this collection use [`set_owners`](Self::set_owners).
        ///
        /// <p>Scopes the results to images with the specified owners. You can specify a combination of Amazon Web Services account IDs, <code>self</code>, <code>amazon</code>, and <code>aws-marketplace</code>. If you omit this parameter, the results include all images for which you have launch permissions, regardless of ownership.</p>
        pub fn owners(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.owners(input.into());
            self
        }
        /// <p>Scopes the results to images with the specified owners. You can specify a combination of Amazon Web Services account IDs, <code>self</code>, <code>amazon</code>, and <code>aws-marketplace</code>. If you omit this parameter, the results include all images for which you have launch permissions, regardless of ownership.</p>
        pub fn set_owners(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_owners(input);
            self
        }
        /// <p>Specifies whether to include deprecated AMIs.</p>
        /// <p>Default: No deprecated AMIs are included in the response.</p> <note>
        /// <p>If you are the AMI owner, all deprecated AMIs appear in the response regardless of what you specify for this parameter.</p>
        /// </note>
        pub fn include_deprecated(mut self, input: bool) -> Self {
            self.inner = self.inner.include_deprecated(input);
            self
        }
        /// <p>Specifies whether to include deprecated AMIs.</p>
        /// <p>Default: No deprecated AMIs are included in the response.</p> <note>
        /// <p>If you are the AMI owner, all deprecated AMIs appear in the response regardless of what you specify for this parameter.</p>
        /// </note>
        pub fn set_include_deprecated(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_include_deprecated(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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 `DescribeImportImageTasks`.
    ///
    /// <p>Displays details about an import virtual machine or import snapshot tasks that are already created.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeImportImageTasks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_import_image_tasks_input::Builder,
    }
    impl DescribeImportImageTasks {
        /// Creates a new `DescribeImportImageTasks`.
        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::DescribeImportImageTasks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeImportImageTasksError>,
        > {
            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::DescribeImportImageTasksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeImportImageTasksError>,
        > {
            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::DescribeImportImageTasksPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeImportImageTasksPaginator {
            crate::paginator::DescribeImportImageTasksPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>Filter tasks using the <code>task-state</code> filter and one of the following values: <code>active</code>, <code>completed</code>, <code>deleting</code>, or <code>deleted</code>.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>Filter tasks using the <code>task-state</code> filter and one of the following values: <code>active</code>, <code>completed</code>, <code>deleting</code>, or <code>deleted</code>.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `ImportTaskIds`.
        ///
        /// To override the contents of this collection use [`set_import_task_ids`](Self::set_import_task_ids).
        ///
        /// <p>The IDs of the import image tasks.</p>
        pub fn import_task_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.import_task_ids(input.into());
            self
        }
        /// <p>The IDs of the import image tasks.</p>
        pub fn set_import_task_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_import_task_ids(input);
            self
        }
        /// <p>The maximum number of results to return in a single call.</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 a single call.</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 that indicates the next page of results.</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 that indicates the next page of results.</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 `DescribeImportSnapshotTasks`.
    ///
    /// <p>Describes your import snapshot tasks.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeImportSnapshotTasks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_import_snapshot_tasks_input::Builder,
    }
    impl DescribeImportSnapshotTasks {
        /// Creates a new `DescribeImportSnapshotTasks`.
        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::DescribeImportSnapshotTasks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeImportSnapshotTasksError>,
        > {
            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::DescribeImportSnapshotTasksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeImportSnapshotTasksError>,
        > {
            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::DescribeImportSnapshotTasksPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeImportSnapshotTasksPaginator {
            crate::paginator::DescribeImportSnapshotTasksPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `ImportTaskIds`.
        ///
        /// To override the contents of this collection use [`set_import_task_ids`](Self::set_import_task_ids).
        ///
        /// <p>A list of import snapshot task IDs.</p>
        pub fn import_task_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.import_task_ids(input.into());
            self
        }
        /// <p>A list of import snapshot task IDs.</p>
        pub fn set_import_task_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_import_task_ids(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 that indicates the next page of results.</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 that indicates the next page of results.</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 `DescribeInstanceAttribute`.
    ///
    /// <p>Describes the specified attribute of the specified instance. You can specify only one attribute at a time. Valid attribute values are: <code>instanceType</code> | <code>kernel</code> | <code>ramdisk</code> | <code>userData</code> | <code>disableApiTermination</code> | <code>instanceInitiatedShutdownBehavior</code> | <code>rootDeviceName</code> | <code>blockDeviceMapping</code> | <code>productCodes</code> | <code>sourceDestCheck</code> | <code>groupSet</code> | <code>ebsOptimized</code> | <code>sriovNetSupport</code> </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInstanceAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_instance_attribute_input::Builder,
    }
    impl DescribeInstanceAttribute {
        /// Creates a new `DescribeInstanceAttribute`.
        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::DescribeInstanceAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceAttributeError>,
        > {
            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::DescribeInstanceAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceAttributeError>,
        > {
            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 instance attribute.</p>
        /// <p>Note: The <code>enaSupport</code> attribute is not supported at this time.</p>
        pub fn attribute(mut self, input: crate::model::InstanceAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The instance attribute.</p>
        /// <p>Note: The <code>enaSupport</code> attribute is not supported at this time.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::InstanceAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeInstanceCreditSpecifications`.
    ///
    /// <p>Describes the credit option for CPU usage of the specified burstable performance instances. The credit options are <code>standard</code> and <code>unlimited</code>.</p>
    /// <p>If you do not specify an instance ID, Amazon EC2 returns burstable performance instances with the <code>unlimited</code> credit option, as well as instances that were previously configured as T2, T3, and T3a with the <code>unlimited</code> credit option. For example, if you resize a T2 instance, while it is configured as <code>unlimited</code>, to an M4 instance, Amazon EC2 returns the M4 instance.</p>
    /// <p>If you specify one or more instance IDs, Amazon EC2 returns the credit option (<code>standard</code> or <code>unlimited</code>) of those instances. If you specify an instance ID that is not valid, such as an instance that is not a burstable performance instance, an error is returned.</p>
    /// <p>Recently terminated instances might appear in the returned results. This interval is usually less than one hour.</p>
    /// <p>If an Availability Zone is experiencing a service disruption and you specify instance IDs in the affected zone, or do not specify any instance IDs at all, the call fails. If you specify only instance IDs in an unaffected zone, the call works normally.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html">Burstable performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInstanceCreditSpecifications {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_instance_credit_specifications_input::Builder,
    }
    impl DescribeInstanceCreditSpecifications {
        /// Creates a new `DescribeInstanceCreditSpecifications`.
        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::DescribeInstanceCreditSpecifications,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeInstanceCreditSpecificationsError,
            >,
        > {
            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::DescribeInstanceCreditSpecificationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeInstanceCreditSpecificationsError,
            >,
        > {
            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::DescribeInstanceCreditSpecificationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeInstanceCreditSpecificationsPaginator {
            crate::paginator::DescribeInstanceCreditSpecificationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The instance IDs.</p>
        /// <p>Default: Describes all your instances.</p>
        /// <p>Constraints: Maximum 1000 explicitly specified instance IDs.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The instance IDs.</p>
        /// <p>Default: Describes all your instances.</p>
        /// <p>Constraints: Maximum 1000 explicitly specified instance IDs.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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 `DescribeInstanceEventNotificationAttributes`.
    ///
    /// <p>Describes the tag keys that are registered to appear in scheduled event notifications for resources in the current Region.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInstanceEventNotificationAttributes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_instance_event_notification_attributes_input::Builder,
    }
    impl DescribeInstanceEventNotificationAttributes {
        /// Creates a new `DescribeInstanceEventNotificationAttributes`.
        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::DescribeInstanceEventNotificationAttributes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeInstanceEventNotificationAttributesError,
            >,
        > {
            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::DescribeInstanceEventNotificationAttributesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeInstanceEventNotificationAttributesError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeInstanceEventWindows`.
    ///
    /// <p>Describes the specified event windows or all event windows.</p>
    /// <p>If you specify event window IDs, the output includes information for only the specified event windows. If you specify filters, the output includes information for only those event windows that meet the filter criteria. If you do not specify event windows IDs or filters, the output includes information for all event windows, which can affect performance. We recommend that you use pagination to ensure that the operation returns quickly and successfully. </p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html">Define event windows for scheduled events</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInstanceEventWindows {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_instance_event_windows_input::Builder,
    }
    impl DescribeInstanceEventWindows {
        /// Creates a new `DescribeInstanceEventWindows`.
        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::DescribeInstanceEventWindows,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceEventWindowsError>,
        > {
            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::DescribeInstanceEventWindowsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceEventWindowsError>,
        > {
            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::DescribeInstanceEventWindowsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeInstanceEventWindowsPaginator {
            crate::paginator::DescribeInstanceEventWindowsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `InstanceEventWindowIds`.
        ///
        /// To override the contents of this collection use [`set_instance_event_window_ids`](Self::set_instance_event_window_ids).
        ///
        /// <p>The IDs of the event windows.</p>
        pub fn instance_event_window_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_event_window_ids(input.into());
            self
        }
        /// <p>The IDs of the event windows.</p>
        pub fn set_instance_event_window_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_event_window_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>dedicated-host-id</code> - The event windows associated with the specified Dedicated Host ID.</p> </li>
        /// <li> <p> <code>event-window-name</code> - The event windows associated with the specified names. </p> </li>
        /// <li> <p> <code>instance-id</code> - The event windows associated with the specified instance ID.</p> </li>
        /// <li> <p> <code>instance-tag</code> - The event windows associated with the specified tag and value.</p> </li>
        /// <li> <p> <code>instance-tag-key</code> - The event windows associated with the specified tag key, regardless of the value.</p> </li>
        /// <li> <p> <code>instance-tag-value</code> - The event windows associated with the specified tag value, regardless of the key.</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the event window. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>CMX</code>, specify <code>tag:Owner</code> for the filter name and <code>CMX</code> for the filter value. </p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the event window. Use this filter to find all event windows that have a tag with a specific key, regardless of the tag value. </p> </li>
        /// <li> <p> <code>tag-value</code> - The value of a tag assigned to the event window. Use this filter to find all event windows that have a tag with a specific value, regardless of the tag key. </p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>dedicated-host-id</code> - The event windows associated with the specified Dedicated Host ID.</p> </li>
        /// <li> <p> <code>event-window-name</code> - The event windows associated with the specified names. </p> </li>
        /// <li> <p> <code>instance-id</code> - The event windows associated with the specified instance ID.</p> </li>
        /// <li> <p> <code>instance-tag</code> - The event windows associated with the specified tag and value.</p> </li>
        /// <li> <p> <code>instance-tag-key</code> - The event windows associated with the specified tag key, regardless of the value.</p> </li>
        /// <li> <p> <code>instance-tag-value</code> - The event windows associated with the specified tag value, regardless of the key.</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the event window. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>CMX</code>, specify <code>tag:Owner</code> for the filter name and <code>CMX</code> for the filter value. </p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the event window. Use this filter to find all event windows that have a tag with a specific key, regardless of the tag value. </p> </li>
        /// <li> <p> <code>tag-value</code> - The value of a tag assigned to the event window. Use this filter to find all event windows that have a tag with a specific value, regardless of the tag key. </p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 20 and 500. You cannot specify this parameter and the event window IDs parameter in the same call.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 20 and 500. You cannot specify this parameter and the event window IDs parameter in the same call.</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 token to request the next page of results.</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 to request the next page of results.</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 `DescribeInstances`.
    ///
    /// <p>Describes the specified instances or all instances.</p>
    /// <p>If you specify instance IDs, the output includes information for only the specified instances. If you specify filters, the output includes information for only those instances that meet the filter criteria. If you do not specify instance IDs or filters, the output includes information for all instances, which can affect performance. We recommend that you use pagination to ensure that the operation returns quickly and successfully.</p>
    /// <p>If you specify an instance ID that is not valid, an error is returned. If you specify an instance that you do not own, it is not included in the output.</p>
    /// <p>Recently terminated instances might appear in the returned results. This interval is usually less than one hour.</p>
    /// <p>If you describe instances in the rare case where an Availability Zone is experiencing a service disruption and you specify instance IDs that are in the affected zone, or do not specify any instance IDs at all, the call fails. If you describe instances and specify only instance IDs that are in an unaffected zone, the call works normally.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_instances_input::Builder,
    }
    impl DescribeInstances {
        /// Creates a new `DescribeInstances`.
        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::DescribeInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstancesError>,
        > {
            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::DescribeInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstancesError>,
        > {
            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::DescribeInstancesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeInstancesPaginator {
            crate::paginator::DescribeInstancesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>affinity</code> - The affinity setting for an instance running on a Dedicated Host (<code>default</code> | <code>host</code>).</p> </li>
        /// <li> <p> <code>architecture</code> - The instance architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>
        /// <li> <p> <code>block-device-mapping.attach-time</code> - The attach time for an EBS volume mapped to the instance, for example, <code>2010-09-15T17:15:20.000Z</code>.</p> </li>
        /// <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean that indicates whether the EBS volume is deleted on instance termination.</p> </li>
        /// <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.status</code> - The status for the EBS volume (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.volume-id</code> - The volume ID of the EBS volume.</p> </li>
        /// <li> <p> <code>capacity-reservation-id</code> - The ID of the Capacity Reservation into which the instance was launched.</p> </li>
        /// <li> <p> <code>client-token</code> - The idempotency token you provided when you launched the instance.</p> </li>
        /// <li> <p> <code>dns-name</code> - The public DNS name of the instance.</p> </li>
        /// <li> <p> <code>group-id</code> - The ID of the security group for the instance. EC2-Classic only.</p> </li>
        /// <li> <p> <code>group-name</code> - The name of the security group for the instance. EC2-Classic only.</p> </li>
        /// <li> <p> <code>hibernation-options.configured</code> - A Boolean that indicates whether the instance is enabled for hibernation. A value of <code>true</code> means that the instance is enabled for hibernation. </p> </li>
        /// <li> <p> <code>host-id</code> - The ID of the Dedicated Host on which the instance is running, if applicable.</p> </li>
        /// <li> <p> <code>hypervisor</code> - The hypervisor type of the instance (<code>ovm</code> | <code>xen</code>). The value <code>xen</code> is used for both Xen and Nitro hypervisors.</p> </li>
        /// <li> <p> <code>iam-instance-profile.arn</code> - The instance profile associated with the instance. Specified as an ARN.</p> </li>
        /// <li> <p> <code>image-id</code> - The ID of the image used to launch the instance.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// <li> <p> <code>instance-lifecycle</code> - Indicates whether this is a Spot Instance or a Scheduled Instance (<code>spot</code> | <code>scheduled</code>).</p> </li>
        /// <li> <p> <code>instance-state-code</code> - The state of the instance, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are: 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li>
        /// <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li>
        /// <li> <p> <code>instance-type</code> - The type of instance (for example, <code>t2.micro</code>).</p> </li>
        /// <li> <p> <code>instance.group-id</code> - The ID of the security group for the instance. </p> </li>
        /// <li> <p> <code>instance.group-name</code> - The name of the security group for the instance. </p> </li>
        /// <li> <p> <code>ip-address</code> - The public IPv4 address of the instance.</p> </li>
        /// <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>
        /// <li> <p> <code>key-name</code> - The name of the key pair used when the instance was launched.</p> </li>
        /// <li> <p> <code>launch-index</code> - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on). </p> </li>
        /// <li> <p> <code>launch-time</code> - The time when the instance was launched, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li>
        /// <li> <p> <code>metadata-options.http-tokens</code> - The metadata request authorization state (<code>optional</code> | <code>required</code>)</p> </li>
        /// <li> <p> <code>metadata-options.http-put-response-hop-limit</code> - The HTTP metadata request put response hop limit (integer, possible values <code>1</code> to <code>64</code>)</p> </li>
        /// <li> <p> <code>metadata-options.http-endpoint</code> - The status of access to the HTTP metadata endpoint on your instance (<code>enabled</code> | <code>disabled</code>)</p> </li>
        /// <li> <p> <code>metadata-options.instance-metadata-tags</code> - The status of access to instance tags from the instance metadata (<code>enabled</code> | <code>disabled</code>)</p> </li>
        /// <li> <p> <code>monitoring-state</code> - Indicates whether detailed monitoring is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li>
        /// <li> <p> <code>network-interface.addresses.private-ip-address</code> - The private IPv4 address associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.addresses.primary</code> - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.</p> </li>
        /// <li> <p> <code>network-interface.addresses.association.public-ip</code> - The ID of the association of an Elastic IP address (IPv4) with a network interface.</p> </li>
        /// <li> <p> <code>network-interface.addresses.association.ip-owner-id</code> - The owner ID of the private IPv4 address associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li>
        /// <li> <p> <code>network-interface.association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li>
        /// <li> <p> <code>network-interface.association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li>
        /// <li> <p> <code>network-interface.attachment.attachment-id</code> - The ID of the interface attachment.</p> </li>
        /// <li> <p> <code>network-interface.attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li>
        /// <li> <p> <code>network-interface.attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li>
        /// <li> <p> <code>network-interface.attachment.device-index</code> - The device index to which the network interface is attached.</p> </li>
        /// <li> <p> <code>network-interface.attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>
        /// <li> <p> <code>network-interface.attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li>
        /// <li> <p> <code>network-interface.attachment.delete-on-termination</code> - Specifies whether the attachment is deleted when an instance is terminated.</p> </li>
        /// <li> <p> <code>network-interface.availability-zone</code> - The Availability Zone for the network interface.</p> </li>
        /// <li> <p> <code>network-interface.description</code> - The description of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.group-id</code> - The ID of a security group associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.group-name</code> - The name of a security group associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.ipv6-addresses.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.mac-address</code> - The MAC address of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.owner-id</code> - The ID of the owner of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.private-dns-name</code> - The private DNS name of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.requester-id</code> - The requester ID for the network interface.</p> </li>
        /// <li> <p> <code>network-interface.requester-managed</code> - Indicates whether the network interface is being managed by Amazon Web Services.</p> </li>
        /// <li> <p> <code>network-interface.status</code> - The status of the network interface (<code>available</code>) | <code>in-use</code>).</p> </li>
        /// <li> <p> <code>network-interface.source-dest-check</code> - Whether the network interface performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC.</p> </li>
        /// <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the network interface.</p> </li>
        /// <li> <p> <code>network-interface.vpc-id</code> - The ID of the VPC for the network interface.</p> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the instance owner.</p> </li>
        /// <li> <p> <code>placement-group-name</code> - The name of the placement group for the instance.</p> </li>
        /// <li> <p> <code>placement-partition-number</code> - The partition in which the instance is located.</p> </li>
        /// <li> <p> <code>platform</code> - The platform. To list only Windows instances, use <code>windows</code>.</p> </li>
        /// <li> <p> <code>private-dns-name</code> - The private IPv4 DNS name of the instance.</p> </li>
        /// <li> <p> <code>private-ip-address</code> - The private IPv4 address of the instance.</p> </li>
        /// <li> <p> <code>product-code</code> - The product code associated with the AMI used to launch the instance.</p> </li>
        /// <li> <p> <code>product-code.type</code> - The type of product code (<code>devpay</code> | <code>marketplace</code>).</p> </li>
        /// <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li>
        /// <li> <p> <code>reason</code> - The reason for the current state of the instance (for example, shows "User Initiated [date]" when you stop or terminate the instance). Similar to the state-reason-code filter.</p> </li>
        /// <li> <p> <code>requester-id</code> - The ID of the entity that launched the instance on your behalf (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li>
        /// <li> <p> <code>reservation-id</code> - The ID of the instance's reservation. A reservation ID is created any time you launch an instance. A reservation ID has a one-to-one relationship with an instance launch request, but can be associated with more than one instance if you launch multiple instances using the same launch request. For example, if you launch one instance, you get one reservation ID. If you launch ten instances using the same launch request, you also get one reservation ID.</p> </li>
        /// <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li>
        /// <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li>
        /// <li> <p> <code>source-dest-check</code> - Indicates whether the instance performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the instance to perform network address translation (NAT) in your VPC. </p> </li>
        /// <li> <p> <code>spot-instance-request-id</code> - The ID of the Spot Instance request.</p> </li>
        /// <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li>
        /// <li> <p> <code>state-reason-message</code> - A message that describes the state change.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet for the instance.</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>tenancy</code> - The tenancy of an instance (<code>dedicated</code> | <code>default</code> | <code>host</code>).</p> </li>
        /// <li> <p> <code>virtualization-type</code> - The virtualization type of the instance (<code>paravirtual</code> | <code>hvm</code>).</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC that the instance is running in.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>affinity</code> - The affinity setting for an instance running on a Dedicated Host (<code>default</code> | <code>host</code>).</p> </li>
        /// <li> <p> <code>architecture</code> - The instance architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>
        /// <li> <p> <code>block-device-mapping.attach-time</code> - The attach time for an EBS volume mapped to the instance, for example, <code>2010-09-15T17:15:20.000Z</code>.</p> </li>
        /// <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean that indicates whether the EBS volume is deleted on instance termination.</p> </li>
        /// <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.status</code> - The status for the EBS volume (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>
        /// <li> <p> <code>block-device-mapping.volume-id</code> - The volume ID of the EBS volume.</p> </li>
        /// <li> <p> <code>capacity-reservation-id</code> - The ID of the Capacity Reservation into which the instance was launched.</p> </li>
        /// <li> <p> <code>client-token</code> - The idempotency token you provided when you launched the instance.</p> </li>
        /// <li> <p> <code>dns-name</code> - The public DNS name of the instance.</p> </li>
        /// <li> <p> <code>group-id</code> - The ID of the security group for the instance. EC2-Classic only.</p> </li>
        /// <li> <p> <code>group-name</code> - The name of the security group for the instance. EC2-Classic only.</p> </li>
        /// <li> <p> <code>hibernation-options.configured</code> - A Boolean that indicates whether the instance is enabled for hibernation. A value of <code>true</code> means that the instance is enabled for hibernation. </p> </li>
        /// <li> <p> <code>host-id</code> - The ID of the Dedicated Host on which the instance is running, if applicable.</p> </li>
        /// <li> <p> <code>hypervisor</code> - The hypervisor type of the instance (<code>ovm</code> | <code>xen</code>). The value <code>xen</code> is used for both Xen and Nitro hypervisors.</p> </li>
        /// <li> <p> <code>iam-instance-profile.arn</code> - The instance profile associated with the instance. Specified as an ARN.</p> </li>
        /// <li> <p> <code>image-id</code> - The ID of the image used to launch the instance.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li>
        /// <li> <p> <code>instance-lifecycle</code> - Indicates whether this is a Spot Instance or a Scheduled Instance (<code>spot</code> | <code>scheduled</code>).</p> </li>
        /// <li> <p> <code>instance-state-code</code> - The state of the instance, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are: 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li>
        /// <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li>
        /// <li> <p> <code>instance-type</code> - The type of instance (for example, <code>t2.micro</code>).</p> </li>
        /// <li> <p> <code>instance.group-id</code> - The ID of the security group for the instance. </p> </li>
        /// <li> <p> <code>instance.group-name</code> - The name of the security group for the instance. </p> </li>
        /// <li> <p> <code>ip-address</code> - The public IPv4 address of the instance.</p> </li>
        /// <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>
        /// <li> <p> <code>key-name</code> - The name of the key pair used when the instance was launched.</p> </li>
        /// <li> <p> <code>launch-index</code> - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on). </p> </li>
        /// <li> <p> <code>launch-time</code> - The time when the instance was launched, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li>
        /// <li> <p> <code>metadata-options.http-tokens</code> - The metadata request authorization state (<code>optional</code> | <code>required</code>)</p> </li>
        /// <li> <p> <code>metadata-options.http-put-response-hop-limit</code> - The HTTP metadata request put response hop limit (integer, possible values <code>1</code> to <code>64</code>)</p> </li>
        /// <li> <p> <code>metadata-options.http-endpoint</code> - The status of access to the HTTP metadata endpoint on your instance (<code>enabled</code> | <code>disabled</code>)</p> </li>
        /// <li> <p> <code>metadata-options.instance-metadata-tags</code> - The status of access to instance tags from the instance metadata (<code>enabled</code> | <code>disabled</code>)</p> </li>
        /// <li> <p> <code>monitoring-state</code> - Indicates whether detailed monitoring is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li>
        /// <li> <p> <code>network-interface.addresses.private-ip-address</code> - The private IPv4 address associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.addresses.primary</code> - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.</p> </li>
        /// <li> <p> <code>network-interface.addresses.association.public-ip</code> - The ID of the association of an Elastic IP address (IPv4) with a network interface.</p> </li>
        /// <li> <p> <code>network-interface.addresses.association.ip-owner-id</code> - The owner ID of the private IPv4 address associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li>
        /// <li> <p> <code>network-interface.association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li>
        /// <li> <p> <code>network-interface.association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li>
        /// <li> <p> <code>network-interface.attachment.attachment-id</code> - The ID of the interface attachment.</p> </li>
        /// <li> <p> <code>network-interface.attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li>
        /// <li> <p> <code>network-interface.attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li>
        /// <li> <p> <code>network-interface.attachment.device-index</code> - The device index to which the network interface is attached.</p> </li>
        /// <li> <p> <code>network-interface.attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>
        /// <li> <p> <code>network-interface.attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li>
        /// <li> <p> <code>network-interface.attachment.delete-on-termination</code> - Specifies whether the attachment is deleted when an instance is terminated.</p> </li>
        /// <li> <p> <code>network-interface.availability-zone</code> - The Availability Zone for the network interface.</p> </li>
        /// <li> <p> <code>network-interface.description</code> - The description of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.group-id</code> - The ID of a security group associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.group-name</code> - The name of a security group associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.ipv6-addresses.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.mac-address</code> - The MAC address of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.owner-id</code> - The ID of the owner of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.private-dns-name</code> - The private DNS name of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.requester-id</code> - The requester ID for the network interface.</p> </li>
        /// <li> <p> <code>network-interface.requester-managed</code> - Indicates whether the network interface is being managed by Amazon Web Services.</p> </li>
        /// <li> <p> <code>network-interface.status</code> - The status of the network interface (<code>available</code>) | <code>in-use</code>).</p> </li>
        /// <li> <p> <code>network-interface.source-dest-check</code> - Whether the network interface performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC.</p> </li>
        /// <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the network interface.</p> </li>
        /// <li> <p> <code>network-interface.vpc-id</code> - The ID of the VPC for the network interface.</p> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the instance owner.</p> </li>
        /// <li> <p> <code>placement-group-name</code> - The name of the placement group for the instance.</p> </li>
        /// <li> <p> <code>placement-partition-number</code> - The partition in which the instance is located.</p> </li>
        /// <li> <p> <code>platform</code> - The platform. To list only Windows instances, use <code>windows</code>.</p> </li>
        /// <li> <p> <code>private-dns-name</code> - The private IPv4 DNS name of the instance.</p> </li>
        /// <li> <p> <code>private-ip-address</code> - The private IPv4 address of the instance.</p> </li>
        /// <li> <p> <code>product-code</code> - The product code associated with the AMI used to launch the instance.</p> </li>
        /// <li> <p> <code>product-code.type</code> - The type of product code (<code>devpay</code> | <code>marketplace</code>).</p> </li>
        /// <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li>
        /// <li> <p> <code>reason</code> - The reason for the current state of the instance (for example, shows "User Initiated [date]" when you stop or terminate the instance). Similar to the state-reason-code filter.</p> </li>
        /// <li> <p> <code>requester-id</code> - The ID of the entity that launched the instance on your behalf (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li>
        /// <li> <p> <code>reservation-id</code> - The ID of the instance's reservation. A reservation ID is created any time you launch an instance. A reservation ID has a one-to-one relationship with an instance launch request, but can be associated with more than one instance if you launch multiple instances using the same launch request. For example, if you launch one instance, you get one reservation ID. If you launch ten instances using the same launch request, you also get one reservation ID.</p> </li>
        /// <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li>
        /// <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li>
        /// <li> <p> <code>source-dest-check</code> - Indicates whether the instance performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the instance to perform network address translation (NAT) in your VPC. </p> </li>
        /// <li> <p> <code>spot-instance-request-id</code> - The ID of the Spot Instance request.</p> </li>
        /// <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li>
        /// <li> <p> <code>state-reason-message</code> - A message that describes the state change.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet for the instance.</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>tenancy</code> - The tenancy of an instance (<code>dedicated</code> | <code>default</code> | <code>host</code>).</p> </li>
        /// <li> <p> <code>virtualization-type</code> - The virtualization type of the instance (<code>paravirtual</code> | <code>hvm</code>).</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC that the instance is running in.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The instance IDs.</p>
        /// <p>Default: Describes all your instances.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The instance IDs.</p>
        /// <p>Default: Describes all your instances.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</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 token to request the next page of results.</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 to request the next page of results.</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 `DescribeInstanceStatus`.
    ///
    /// <p>Describes the status of the specified instances or all of your instances. By default, only running instances are described, unless you specifically indicate to return the status of all instances.</p>
    /// <p>Instance status includes the following components:</p>
    /// <ul>
    /// <li> <p> <b>Status checks</b> - Amazon EC2 performs status checks on running EC2 instances to identify hardware and software issues. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html">Status checks for your instances</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html">Troubleshoot instances with failed status checks</a> in the <i>Amazon EC2 User Guide</i>.</p> </li>
    /// <li> <p> <b>Scheduled events</b> - Amazon EC2 can schedule events (such as reboot, stop, or terminate) for your instances related to hardware issues, software updates, or system maintenance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html">Scheduled events for your instances</a> in the <i>Amazon EC2 User Guide</i>.</p> </li>
    /// <li> <p> <b>Instance state</b> - You can manage your instances from the moment you launch them through their termination. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html">Instance lifecycle</a> in the <i>Amazon EC2 User Guide</i>.</p> </li>
    /// </ul>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInstanceStatus {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_instance_status_input::Builder,
    }
    impl DescribeInstanceStatus {
        /// Creates a new `DescribeInstanceStatus`.
        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::DescribeInstanceStatus,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceStatusError>,
        > {
            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::DescribeInstanceStatusOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceStatusError>,
        > {
            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::DescribeInstanceStatusPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeInstanceStatusPaginator {
            crate::paginator::DescribeInstanceStatusPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>
        /// <li> <p> <code>event.code</code> - The code for the scheduled event (<code>instance-reboot</code> | <code>system-reboot</code> | <code>system-maintenance</code> | <code>instance-retirement</code> | <code>instance-stop</code>).</p> </li>
        /// <li> <p> <code>event.description</code> - A description of the event.</p> </li>
        /// <li> <p> <code>event.instance-event-id</code> - The ID of the event whose date and time you are modifying.</p> </li>
        /// <li> <p> <code>event.not-after</code> - The latest end time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>
        /// <li> <p> <code>event.not-before</code> - The earliest start time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>
        /// <li> <p> <code>event.not-before-deadline</code> - The deadline for starting the event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>
        /// <li> <p> <code>instance-state-code</code> - The code for the instance state, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li>
        /// <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li>
        /// <li> <p> <code>instance-status.reachability</code> - Filters on instance status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li>
        /// <li> <p> <code>instance-status.status</code> - The status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li>
        /// <li> <p> <code>system-status.reachability</code> - Filters on system status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li>
        /// <li> <p> <code>system-status.status</code> - The system status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>
        /// <li> <p> <code>event.code</code> - The code for the scheduled event (<code>instance-reboot</code> | <code>system-reboot</code> | <code>system-maintenance</code> | <code>instance-retirement</code> | <code>instance-stop</code>).</p> </li>
        /// <li> <p> <code>event.description</code> - A description of the event.</p> </li>
        /// <li> <p> <code>event.instance-event-id</code> - The ID of the event whose date and time you are modifying.</p> </li>
        /// <li> <p> <code>event.not-after</code> - The latest end time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>
        /// <li> <p> <code>event.not-before</code> - The earliest start time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>
        /// <li> <p> <code>event.not-before-deadline</code> - The deadline for starting the event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li>
        /// <li> <p> <code>instance-state-code</code> - The code for the instance state, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li>
        /// <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li>
        /// <li> <p> <code>instance-status.reachability</code> - Filters on instance status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li>
        /// <li> <p> <code>instance-status.status</code> - The status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li>
        /// <li> <p> <code>system-status.reachability</code> - Filters on system status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li>
        /// <li> <p> <code>system-status.status</code> - The system status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The instance IDs.</p>
        /// <p>Default: Describes all your instances.</p>
        /// <p>Constraints: Maximum 100 explicitly specified instance IDs.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The instance IDs.</p>
        /// <p>Default: Describes all your instances.</p>
        /// <p>Constraints: Maximum 100 explicitly specified instance IDs.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>When <code>true</code>, includes the health status for all instances. When <code>false</code>, includes the health status for running instances only.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn include_all_instances(mut self, input: bool) -> Self {
            self.inner = self.inner.include_all_instances(input);
            self
        }
        /// <p>When <code>true</code>, includes the health status for all instances. When <code>false</code>, includes the health status for running instances only.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn set_include_all_instances(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_include_all_instances(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeInstanceTypeOfferings`.
    ///
    /// <p>Returns a list of all instance types offered. The results can be filtered by location (Region or Availability Zone). If no location is specified, the instance types offered in the current Region are returned.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInstanceTypeOfferings {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_instance_type_offerings_input::Builder,
    }
    impl DescribeInstanceTypeOfferings {
        /// Creates a new `DescribeInstanceTypeOfferings`.
        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::DescribeInstanceTypeOfferings,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceTypeOfferingsError>,
        > {
            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::DescribeInstanceTypeOfferingsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceTypeOfferingsError>,
        > {
            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::DescribeInstanceTypeOfferingsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeInstanceTypeOfferingsPaginator {
            crate::paginator::DescribeInstanceTypeOfferingsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The location type.</p>
        pub fn location_type(mut self, input: crate::model::LocationType) -> Self {
            self.inner = self.inner.location_type(input);
            self
        }
        /// <p>The location type.</p>
        pub fn set_location_type(
            mut self,
            input: std::option::Option<crate::model::LocationType>,
        ) -> Self {
            self.inner = self.inner.set_location_type(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>location</code> - This depends on the location type. For example, if the location type is <code>region</code> (default), the location is the Region code (for example, <code>us-east-2</code>.)</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type. For example, <code>c5.2xlarge</code>.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>location</code> - This depends on the location type. For example, if the location type is <code>region</code> (default), the location is the Region code (for example, <code>us-east-2</code>.)</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type. For example, <code>c5.2xlarge</code>.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the next token value.</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 for the request in a single page. The remaining results can be seen by sending another request with the next token value.</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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 `DescribeInstanceTypes`.
    ///
    /// <p>Describes the details of the instance types that are offered in a location. The results can be filtered by the attributes of the instance types.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInstanceTypes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_instance_types_input::Builder,
    }
    impl DescribeInstanceTypes {
        /// Creates a new `DescribeInstanceTypes`.
        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::DescribeInstanceTypes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceTypesError>,
        > {
            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::DescribeInstanceTypesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeInstanceTypesError>,
        > {
            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::DescribeInstanceTypesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeInstanceTypesPaginator {
            crate::paginator::DescribeInstanceTypesPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `InstanceTypes`.
        ///
        /// To override the contents of this collection use [`set_instance_types`](Self::set_instance_types).
        ///
        /// <p>The instance types. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn instance_types(mut self, input: crate::model::InstanceType) -> Self {
            self.inner = self.inner.instance_types(input);
            self
        }
        /// <p>The instance types. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_instance_types(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::InstanceType>>,
        ) -> Self {
            self.inner = self.inner.set_instance_types(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>auto-recovery-supported</code> - Indicates whether auto recovery is supported (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>bare-metal</code> - Indicates whether it is a bare metal instance type (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>burstable-performance-supported</code> - Indicates whether it is a burstable performance instance type (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>current-generation</code> - Indicates whether this instance type is the latest generation instance type of an instance family (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps</code> - The baseline bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.baseline-iops</code> - The baseline input/output storage operations per second for an EBS-optimized instance type.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.baseline-throughput-in-mbps</code> - The baseline throughput performance for an EBS-optimized instance type, in MB/s.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps</code> - The maximum bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.maximum-iops</code> - The maximum input/output storage operations per second for an EBS-optimized instance type.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.maximum-throughput-in-mbps</code> - The maximum throughput performance for an EBS-optimized instance type, in MB/s.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-support</code> - Indicates whether the instance type is EBS-optimized (<code>supported</code> | <code>unsupported</code> | <code>default</code>).</p> </li>
        /// <li> <p> <code>ebs-info.encryption-support</code> - Indicates whether EBS encryption is supported (<code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>ebs-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for EBS volumes (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>free-tier-eligible</code> - Indicates whether the instance type is eligible to use in the free tier (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>hibernation-supported</code> - Indicates whether On-Demand hibernation is supported (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>hypervisor</code> - The hypervisor (<code>nitro</code> | <code>xen</code>).</p> </li>
        /// <li> <p> <code>instance-storage-info.disk.count</code> - The number of local disks.</p> </li>
        /// <li> <p> <code>instance-storage-info.disk.size-in-gb</code> - The storage size of each instance storage disk, in GB.</p> </li>
        /// <li> <p> <code>instance-storage-info.disk.type</code> - The storage technology for the local instance storage disks (<code>hdd</code> | <code>ssd</code>).</p> </li>
        /// <li> <p> <code>instance-storage-info.encryption-support</code> - Indicates whether data is encrypted at rest (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>instance-storage-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for instance store (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>instance-storage-info.total-size-in-gb</code> - The total amount of storage available from all local instance storage, in GB.</p> </li>
        /// <li> <p> <code>instance-storage-supported</code> - Indicates whether the instance type has local instance storage (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type (for example <code>c5.2xlarge</code> or c5*).</p> </li>
        /// <li> <p> <code>memory-info.size-in-mib</code> - The memory size.</p> </li>
        /// <li> <p> <code>network-info.efa-info.maximum-efa-interfaces</code> - The maximum number of Elastic Fabric Adapters (EFAs) per instance.</p> </li>
        /// <li> <p> <code>network-info.efa-supported</code> - Indicates whether the instance type supports Elastic Fabric Adapter (EFA) (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>network-info.ena-support</code> - Indicates whether Elastic Network Adapter (ENA) is supported or required (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>network-info.encryption-in-transit-supported</code> - Indicates whether the instance type automatically encrypts in-transit traffic between instances (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>network-info.ipv4-addresses-per-interface</code> - The maximum number of private IPv4 addresses per network interface.</p> </li>
        /// <li> <p> <code>network-info.ipv6-addresses-per-interface</code> - The maximum number of private IPv6 addresses per network interface.</p> </li>
        /// <li> <p> <code>network-info.ipv6-supported</code> - Indicates whether the instance type supports IPv6 (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>network-info.maximum-network-cards</code> - The maximum number of network cards per instance.</p> </li>
        /// <li> <p> <code>network-info.maximum-network-interfaces</code> - The maximum number of network interfaces per instance.</p> </li>
        /// <li> <p> <code>network-info.network-performance</code> - The network performance (for example, "25 Gigabit").</p> </li>
        /// <li> <p> <code>processor-info.supported-architecture</code> - The CPU architecture (<code>arm64</code> | <code>i386</code> | <code>x86_64</code>).</p> </li>
        /// <li> <p> <code>processor-info.sustained-clock-speed-in-ghz</code> - The CPU clock speed, in GHz.</p> </li>
        /// <li> <p> <code>supported-boot-mode</code> - The boot mode (<code>legacy-bios</code> | <code>uefi</code>).</p> </li>
        /// <li> <p> <code>supported-root-device-type</code> - The root device type (<code>ebs</code> | <code>instance-store</code>).</p> </li>
        /// <li> <p> <code>supported-usage-class</code> - The usage class (<code>on-demand</code> | <code>spot</code>).</p> </li>
        /// <li> <p> <code>supported-virtualization-type</code> - The virtualization type (<code>hvm</code> | <code>paravirtual</code>).</p> </li>
        /// <li> <p> <code>vcpu-info.default-cores</code> - The default number of cores for the instance type.</p> </li>
        /// <li> <p> <code>vcpu-info.default-threads-per-core</code> - The default number of threads per core for the instance type.</p> </li>
        /// <li> <p> <code>vcpu-info.default-vcpus</code> - The default number of vCPUs for the instance type.</p> </li>
        /// <li> <p> <code>vcpu-info.valid-cores</code> - The number of cores that can be configured for the instance type.</p> </li>
        /// <li> <p> <code>vcpu-info.valid-threads-per-core</code> - The number of threads per core that can be configured for the instance type. For example, "1" or "1,2".</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        /// <ul>
        /// <li> <p> <code>auto-recovery-supported</code> - Indicates whether auto recovery is supported (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>bare-metal</code> - Indicates whether it is a bare metal instance type (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>burstable-performance-supported</code> - Indicates whether it is a burstable performance instance type (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>current-generation</code> - Indicates whether this instance type is the latest generation instance type of an instance family (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps</code> - The baseline bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.baseline-iops</code> - The baseline input/output storage operations per second for an EBS-optimized instance type.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.baseline-throughput-in-mbps</code> - The baseline throughput performance for an EBS-optimized instance type, in MB/s.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps</code> - The maximum bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.maximum-iops</code> - The maximum input/output storage operations per second for an EBS-optimized instance type.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-info.maximum-throughput-in-mbps</code> - The maximum throughput performance for an EBS-optimized instance type, in MB/s.</p> </li>
        /// <li> <p> <code>ebs-info.ebs-optimized-support</code> - Indicates whether the instance type is EBS-optimized (<code>supported</code> | <code>unsupported</code> | <code>default</code>).</p> </li>
        /// <li> <p> <code>ebs-info.encryption-support</code> - Indicates whether EBS encryption is supported (<code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>ebs-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for EBS volumes (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>free-tier-eligible</code> - Indicates whether the instance type is eligible to use in the free tier (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>hibernation-supported</code> - Indicates whether On-Demand hibernation is supported (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>hypervisor</code> - The hypervisor (<code>nitro</code> | <code>xen</code>).</p> </li>
        /// <li> <p> <code>instance-storage-info.disk.count</code> - The number of local disks.</p> </li>
        /// <li> <p> <code>instance-storage-info.disk.size-in-gb</code> - The storage size of each instance storage disk, in GB.</p> </li>
        /// <li> <p> <code>instance-storage-info.disk.type</code> - The storage technology for the local instance storage disks (<code>hdd</code> | <code>ssd</code>).</p> </li>
        /// <li> <p> <code>instance-storage-info.encryption-support</code> - Indicates whether data is encrypted at rest (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>instance-storage-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for instance store (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>instance-storage-info.total-size-in-gb</code> - The total amount of storage available from all local instance storage, in GB.</p> </li>
        /// <li> <p> <code>instance-storage-supported</code> - Indicates whether the instance type has local instance storage (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type (for example <code>c5.2xlarge</code> or c5*).</p> </li>
        /// <li> <p> <code>memory-info.size-in-mib</code> - The memory size.</p> </li>
        /// <li> <p> <code>network-info.efa-info.maximum-efa-interfaces</code> - The maximum number of Elastic Fabric Adapters (EFAs) per instance.</p> </li>
        /// <li> <p> <code>network-info.efa-supported</code> - Indicates whether the instance type supports Elastic Fabric Adapter (EFA) (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>network-info.ena-support</code> - Indicates whether Elastic Network Adapter (ENA) is supported or required (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li>
        /// <li> <p> <code>network-info.encryption-in-transit-supported</code> - Indicates whether the instance type automatically encrypts in-transit traffic between instances (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>network-info.ipv4-addresses-per-interface</code> - The maximum number of private IPv4 addresses per network interface.</p> </li>
        /// <li> <p> <code>network-info.ipv6-addresses-per-interface</code> - The maximum number of private IPv6 addresses per network interface.</p> </li>
        /// <li> <p> <code>network-info.ipv6-supported</code> - Indicates whether the instance type supports IPv6 (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>network-info.maximum-network-cards</code> - The maximum number of network cards per instance.</p> </li>
        /// <li> <p> <code>network-info.maximum-network-interfaces</code> - The maximum number of network interfaces per instance.</p> </li>
        /// <li> <p> <code>network-info.network-performance</code> - The network performance (for example, "25 Gigabit").</p> </li>
        /// <li> <p> <code>processor-info.supported-architecture</code> - The CPU architecture (<code>arm64</code> | <code>i386</code> | <code>x86_64</code>).</p> </li>
        /// <li> <p> <code>processor-info.sustained-clock-speed-in-ghz</code> - The CPU clock speed, in GHz.</p> </li>
        /// <li> <p> <code>supported-boot-mode</code> - The boot mode (<code>legacy-bios</code> | <code>uefi</code>).</p> </li>
        /// <li> <p> <code>supported-root-device-type</code> - The root device type (<code>ebs</code> | <code>instance-store</code>).</p> </li>
        /// <li> <p> <code>supported-usage-class</code> - The usage class (<code>on-demand</code> | <code>spot</code>).</p> </li>
        /// <li> <p> <code>supported-virtualization-type</code> - The virtualization type (<code>hvm</code> | <code>paravirtual</code>).</p> </li>
        /// <li> <p> <code>vcpu-info.default-cores</code> - The default number of cores for the instance type.</p> </li>
        /// <li> <p> <code>vcpu-info.default-threads-per-core</code> - The default number of threads per core for the instance type.</p> </li>
        /// <li> <p> <code>vcpu-info.default-vcpus</code> - The default number of vCPUs for the instance type.</p> </li>
        /// <li> <p> <code>vcpu-info.valid-cores</code> - The number of cores that can be configured for the instance type.</p> </li>
        /// <li> <p> <code>vcpu-info.valid-threads-per-core</code> - The number of threads per core that can be configured for the instance type. For example, "1" or "1,2".</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the next token value.</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 for the request in a single page. The remaining results can be seen by sending another request with the next token value.</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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 `DescribeInternetGateways`.
    ///
    /// <p>Describes one or more of your internet gateways.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeInternetGateways {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_internet_gateways_input::Builder,
    }
    impl DescribeInternetGateways {
        /// Creates a new `DescribeInternetGateways`.
        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::DescribeInternetGateways,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeInternetGatewaysError>,
        > {
            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::DescribeInternetGatewaysOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeInternetGatewaysError>,
        > {
            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::DescribeInternetGatewaysPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeInternetGatewaysPaginator {
            crate::paginator::DescribeInternetGatewaysPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>attachment.state</code> - The current state of the attachment between the gateway and the VPC (<code>available</code>). Present only if a VPC is attached.</p> </li>
        /// <li> <p> <code>attachment.vpc-id</code> - The ID of an attached VPC.</p> </li>
        /// <li> <p> <code>internet-gateway-id</code> - The ID of the Internet gateway.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the internet gateway.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>attachment.state</code> - The current state of the attachment between the gateway and the VPC (<code>available</code>). Present only if a VPC is attached.</p> </li>
        /// <li> <p> <code>attachment.vpc-id</code> - The ID of an attached VPC.</p> </li>
        /// <li> <p> <code>internet-gateway-id</code> - The ID of the Internet gateway.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the internet gateway.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `InternetGatewayIds`.
        ///
        /// To override the contents of this collection use [`set_internet_gateway_ids`](Self::set_internet_gateway_ids).
        ///
        /// <p>One or more internet gateway IDs.</p>
        /// <p>Default: Describes all your internet gateways.</p>
        pub fn internet_gateway_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.internet_gateway_ids(input.into());
            self
        }
        /// <p>One or more internet gateway IDs.</p>
        /// <p>Default: Describes all your internet gateways.</p>
        pub fn set_internet_gateway_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_internet_gateway_ids(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeIpamPools`.
    ///
    /// <p>Get information about your IPAM pools.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeIpamPools {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_ipam_pools_input::Builder,
    }
    impl DescribeIpamPools {
        /// Creates a new `DescribeIpamPools`.
        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::DescribeIpamPools,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeIpamPoolsError>,
        > {
            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::DescribeIpamPoolsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeIpamPoolsError>,
        > {
            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::DescribeIpamPoolsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeIpamPoolsPaginator {
            crate::paginator::DescribeIpamPoolsPaginator::new(self.handle, self.inner)
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in the 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 the 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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `IpamPoolIds`.
        ///
        /// To override the contents of this collection use [`set_ipam_pool_ids`](Self::set_ipam_pool_ids).
        ///
        /// <p>The IDs of the IPAM pools you would like information on.</p>
        pub fn ipam_pool_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_ids(input.into());
            self
        }
        /// <p>The IDs of the IPAM pools you would like information on.</p>
        pub fn set_ipam_pool_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipam_pool_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeIpams`.
    ///
    /// <p>Get information about your IPAM pools.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeIpams {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_ipams_input::Builder,
    }
    impl DescribeIpams {
        /// Creates a new `DescribeIpams`.
        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::DescribeIpams,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeIpamsError>,
        > {
            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::DescribeIpamsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeIpamsError>,
        > {
            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::DescribeIpamsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeIpamsPaginator {
            crate::paginator::DescribeIpamsPaginator::new(self.handle, self.inner)
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in the 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 the 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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `IpamIds`.
        ///
        /// To override the contents of this collection use [`set_ipam_ids`](Self::set_ipam_ids).
        ///
        /// <p>The IDs of the IPAMs you want information on.</p>
        pub fn ipam_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_ids(input.into());
            self
        }
        /// <p>The IDs of the IPAMs you want information on.</p>
        pub fn set_ipam_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipam_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeIpamScopes`.
    ///
    /// <p>Get information about your IPAM scopes.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeIpamScopes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_ipam_scopes_input::Builder,
    }
    impl DescribeIpamScopes {
        /// Creates a new `DescribeIpamScopes`.
        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::DescribeIpamScopes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeIpamScopesError>,
        > {
            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::DescribeIpamScopesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeIpamScopesError>,
        > {
            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::DescribeIpamScopesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeIpamScopesPaginator {
            crate::paginator::DescribeIpamScopesPaginator::new(self.handle, self.inner)
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in the 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 the 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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `IpamScopeIds`.
        ///
        /// To override the contents of this collection use [`set_ipam_scope_ids`](Self::set_ipam_scope_ids).
        ///
        /// <p>The IDs of the scopes you want information on.</p>
        pub fn ipam_scope_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_scope_ids(input.into());
            self
        }
        /// <p>The IDs of the scopes you want information on.</p>
        pub fn set_ipam_scope_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipam_scope_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeIpv6Pools`.
    ///
    /// <p>Describes your IPv6 address pools.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeIpv6Pools {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_ipv6_pools_input::Builder,
    }
    impl DescribeIpv6Pools {
        /// Creates a new `DescribeIpv6Pools`.
        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::DescribeIpv6Pools,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeIpv6PoolsError>,
        > {
            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::DescribeIpv6PoolsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeIpv6PoolsError>,
        > {
            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::DescribeIpv6PoolsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeIpv6PoolsPaginator {
            crate::paginator::DescribeIpv6PoolsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `PoolIds`.
        ///
        /// To override the contents of this collection use [`set_pool_ids`](Self::set_pool_ids).
        ///
        /// <p>The IDs of the IPv6 address pools.</p>
        pub fn pool_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.pool_ids(input.into());
            self
        }
        /// <p>The IDs of the IPv6 address pools.</p>
        pub fn set_pool_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_pool_ids(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeKeyPairs`.
    ///
    /// <p>Describes the specified key pairs or all of your key pairs.</p>
    /// <p>For more information about key pairs, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html">Amazon EC2 key pairs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeKeyPairs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_key_pairs_input::Builder,
    }
    impl DescribeKeyPairs {
        /// Creates a new `DescribeKeyPairs`.
        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::DescribeKeyPairs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeKeyPairsError>,
        > {
            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::DescribeKeyPairsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeKeyPairsError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>key-pair-id</code> - The ID of the key pair.</p> </li>
        /// <li> <p> <code>fingerprint</code> - The fingerprint of the key pair.</p> </li>
        /// <li> <p> <code>key-name</code> - The name of the key pair.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>key-pair-id</code> - The ID of the key pair.</p> </li>
        /// <li> <p> <code>fingerprint</code> - The fingerprint of the key pair.</p> </li>
        /// <li> <p> <code>key-name</code> - The name of the key pair.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `KeyNames`.
        ///
        /// To override the contents of this collection use [`set_key_names`](Self::set_key_names).
        ///
        /// <p>The key pair names.</p>
        /// <p>Default: Describes all of your key pairs.</p>
        pub fn key_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.key_names(input.into());
            self
        }
        /// <p>The key pair names.</p>
        /// <p>Default: Describes all of your key pairs.</p>
        pub fn set_key_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_key_names(input);
            self
        }
        /// Appends an item to `KeyPairIds`.
        ///
        /// To override the contents of this collection use [`set_key_pair_ids`](Self::set_key_pair_ids).
        ///
        /// <p>The IDs of the key pairs.</p>
        pub fn key_pair_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.key_pair_ids(input.into());
            self
        }
        /// <p>The IDs of the key pairs.</p>
        pub fn set_key_pair_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_key_pair_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>If <code>true</code>, the public key material is included in the response.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn include_public_key(mut self, input: bool) -> Self {
            self.inner = self.inner.include_public_key(input);
            self
        }
        /// <p>If <code>true</code>, the public key material is included in the response.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn set_include_public_key(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_include_public_key(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeLaunchTemplates`.
    ///
    /// <p>Describes one or more launch templates.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeLaunchTemplates {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_launch_templates_input::Builder,
    }
    impl DescribeLaunchTemplates {
        /// Creates a new `DescribeLaunchTemplates`.
        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::DescribeLaunchTemplates,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeLaunchTemplatesError>,
        > {
            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::DescribeLaunchTemplatesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeLaunchTemplatesError>,
        > {
            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::DescribeLaunchTemplatesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeLaunchTemplatesPaginator {
            crate::paginator::DescribeLaunchTemplatesPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `LaunchTemplateIds`.
        ///
        /// To override the contents of this collection use [`set_launch_template_ids`](Self::set_launch_template_ids).
        ///
        /// <p>One or more launch template IDs.</p>
        pub fn launch_template_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_ids(input.into());
            self
        }
        /// <p>One or more launch template IDs.</p>
        pub fn set_launch_template_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_ids(input);
            self
        }
        /// Appends an item to `LaunchTemplateNames`.
        ///
        /// To override the contents of this collection use [`set_launch_template_names`](Self::set_launch_template_names).
        ///
        /// <p>One or more launch template names.</p>
        pub fn launch_template_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_names(input.into());
            self
        }
        /// <p>One or more launch template names.</p>
        pub fn set_launch_template_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_names(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>create-time</code> - The time the launch template was created.</p> </li>
        /// <li> <p> <code>launch-template-name</code> - The name of the launch template.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>create-time</code> - The time the launch template was created.</p> </li>
        /// <li> <p> <code>launch-template-name</code> - The name of the launch template.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The token to request the next page of results.</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 to request the next page of results.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200.</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 `DescribeLaunchTemplateVersions`.
    ///
    /// <p>Describes one or more versions of a specified launch template. You can describe all versions, individual versions, or a range of versions. You can also describe all the latest versions or all the default versions of all the launch templates in your account.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeLaunchTemplateVersions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_launch_template_versions_input::Builder,
    }
    impl DescribeLaunchTemplateVersions {
        /// Creates a new `DescribeLaunchTemplateVersions`.
        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::DescribeLaunchTemplateVersions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeLaunchTemplateVersionsError>,
        > {
            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::DescribeLaunchTemplateVersionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeLaunchTemplateVersionsError>,
        > {
            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::DescribeLaunchTemplateVersionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeLaunchTemplateVersionsPaginator {
            crate::paginator::DescribeLaunchTemplateVersionsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>To describe one or more versions of a specified launch template, you must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        /// <p>To describe all the latest or default launch template versions in your account, you must omit this parameter.</p>
        pub fn launch_template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_id(input.into());
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>To describe one or more versions of a specified launch template, you must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        /// <p>To describe all the latest or default launch template versions in your account, you must omit this parameter.</p>
        pub fn set_launch_template_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_id(input);
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>To describe one or more versions of a specified launch template, you must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        /// <p>To describe all the latest or default launch template versions in your account, you must omit this parameter.</p>
        pub fn launch_template_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_name(input.into());
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>To describe one or more versions of a specified launch template, you must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        /// <p>To describe all the latest or default launch template versions in your account, you must omit this parameter.</p>
        pub fn set_launch_template_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_name(input);
            self
        }
        /// Appends an item to `Versions`.
        ///
        /// To override the contents of this collection use [`set_versions`](Self::set_versions).
        ///
        /// <p>One or more versions of the launch template. Valid values depend on whether you are describing a specified launch template (by ID or name) or all launch templates in your account.</p>
        /// <p>To describe one or more versions of a specified launch template, valid values are <code>$Latest</code>, <code>$Default</code>, and numbers.</p>
        /// <p>To describe all launch templates in your account that are defined as the latest version, the valid value is <code>$Latest</code>. To describe all launch templates in your account that are defined as the default version, the valid value is <code>$Default</code>. You can specify <code>$Latest</code> and <code>$Default</code> in the same request. You cannot specify numbers.</p>
        pub fn versions(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.versions(input.into());
            self
        }
        /// <p>One or more versions of the launch template. Valid values depend on whether you are describing a specified launch template (by ID or name) or all launch templates in your account.</p>
        /// <p>To describe one or more versions of a specified launch template, valid values are <code>$Latest</code>, <code>$Default</code>, and numbers.</p>
        /// <p>To describe all launch templates in your account that are defined as the latest version, the valid value is <code>$Latest</code>. To describe all launch templates in your account that are defined as the default version, the valid value is <code>$Default</code>. You can specify <code>$Latest</code> and <code>$Default</code> in the same request. You cannot specify numbers.</p>
        pub fn set_versions(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_versions(input);
            self
        }
        /// <p>The version number after which to describe launch template versions.</p>
        pub fn min_version(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.min_version(input.into());
            self
        }
        /// <p>The version number after which to describe launch template versions.</p>
        pub fn set_min_version(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_min_version(input);
            self
        }
        /// <p>The version number up to which to describe launch template versions.</p>
        pub fn max_version(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.max_version(input.into());
            self
        }
        /// <p>The version number up to which to describe launch template versions.</p>
        pub fn set_max_version(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_max_version(input);
            self
        }
        /// <p>The token to request the next page of results.</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 to request the next page of results.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>create-time</code> - The time the launch template version was created.</p> </li>
        /// <li> <p> <code>ebs-optimized</code> - A boolean that indicates whether the instance is optimized for Amazon EBS I/O.</p> </li>
        /// <li> <p> <code>http-endpoint</code> - Indicates whether the HTTP metadata endpoint on your instances is enabled (<code>enabled</code> | <code>disabled</code>).</p> </li>
        /// <li> <p> <code>http-protocol-ipv4</code> - Indicates whether the IPv4 endpoint for the instance metadata service is enabled (<code>enabled</code> | <code>disabled</code>).</p> </li>
        /// <li> <p> <code>host-resource-group-arn</code> - The ARN of the host resource group in which to launch the instances.</p> </li>
        /// <li> <p> <code>http-tokens</code> - The state of token usage for your instance metadata requests (<code>optional</code> | <code>required</code>).</p> </li>
        /// <li> <p> <code>iam-instance-profile</code> - The ARN of the IAM instance profile.</p> </li>
        /// <li> <p> <code>image-id</code> - The ID of the AMI.</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type.</p> </li>
        /// <li> <p> <code>is-default-version</code> - A boolean that indicates whether the launch template version is the default version.</p> </li>
        /// <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>
        /// <li> <p> <code>license-configuration-arn</code> - The ARN of the license configuration.</p> </li>
        /// <li> <p> <code>network-card-index</code> - The index of the network card.</p> </li>
        /// <li> <p> <code>ram-disk-id</code> - The RAM disk ID.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>create-time</code> - The time the launch template version was created.</p> </li>
        /// <li> <p> <code>ebs-optimized</code> - A boolean that indicates whether the instance is optimized for Amazon EBS I/O.</p> </li>
        /// <li> <p> <code>http-endpoint</code> - Indicates whether the HTTP metadata endpoint on your instances is enabled (<code>enabled</code> | <code>disabled</code>).</p> </li>
        /// <li> <p> <code>http-protocol-ipv4</code> - Indicates whether the IPv4 endpoint for the instance metadata service is enabled (<code>enabled</code> | <code>disabled</code>).</p> </li>
        /// <li> <p> <code>host-resource-group-arn</code> - The ARN of the host resource group in which to launch the instances.</p> </li>
        /// <li> <p> <code>http-tokens</code> - The state of token usage for your instance metadata requests (<code>optional</code> | <code>required</code>).</p> </li>
        /// <li> <p> <code>iam-instance-profile</code> - The ARN of the IAM instance profile.</p> </li>
        /// <li> <p> <code>image-id</code> - The ID of the AMI.</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type.</p> </li>
        /// <li> <p> <code>is-default-version</code> - A boolean that indicates whether the launch template version is the default version.</p> </li>
        /// <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li>
        /// <li> <p> <code>license-configuration-arn</code> - The ARN of the license configuration.</p> </li>
        /// <li> <p> <code>network-card-index</code> - The index of the network card.</p> </li>
        /// <li> <p> <code>ram-disk-id</code> - The RAM disk ID.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageId</code>.</p>
        /// <p>If <code>false</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the parameter is displayed in the response for <code>imageId</code>.</p>
        /// <p> For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn resolve_alias(mut self, input: bool) -> Self {
            self.inner = self.inner.resolve_alias(input);
            self
        }
        /// <p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageId</code>.</p>
        /// <p>If <code>false</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the parameter is displayed in the response for <code>imageId</code>.</p>
        /// <p> For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn set_resolve_alias(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_resolve_alias(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeLocalGatewayRouteTables`.
    ///
    /// <p>Describes one or more local gateway route tables. By default, all local gateway route tables are described. Alternatively, you can filter the results.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeLocalGatewayRouteTables {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_local_gateway_route_tables_input::Builder,
    }
    impl DescribeLocalGatewayRouteTables {
        /// Creates a new `DescribeLocalGatewayRouteTables`.
        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::DescribeLocalGatewayRouteTables,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeLocalGatewayRouteTablesError>,
        > {
            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::DescribeLocalGatewayRouteTablesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeLocalGatewayRouteTablesError>,
        > {
            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::DescribeLocalGatewayRouteTablesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeLocalGatewayRouteTablesPaginator {
            crate::paginator::DescribeLocalGatewayRouteTablesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `LocalGatewayRouteTableIds`.
        ///
        /// To override the contents of this collection use [`set_local_gateway_route_table_ids`](Self::set_local_gateway_route_table_ids).
        ///
        /// <p>The IDs of the local gateway route tables.</p>
        pub fn local_gateway_route_table_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_ids(input.into());
            self
        }
        /// <p>The IDs of the local gateway route tables.</p>
        pub fn set_local_gateway_route_table_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-id</code> - The ID of a local gateway route table.</p> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway route table.</p> </li>
        /// <li> <p> <code>state</code> - The state of the local gateway route table.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-id</code> - The ID of a local gateway route table.</p> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway route table.</p> </li>
        /// <li> <p> <code>state</code> - The state of the local gateway route table.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations`.
    ///
    /// <p>Describes the associations between virtual interface groups and local gateway route tables.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations {
                            handle: std::sync::Arc<super::Handle>,
                            inner: crate::input::describe_local_gateway_route_table_virtual_interface_group_associations_input::Builder
                        }
    impl DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations {
        /// Creates a new `DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations`.
        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::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsError,
            >,
        > {
            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::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsError,
            >,
        > {
            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::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsPaginator{
            crate::paginator::DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `LocalGatewayRouteTableVirtualInterfaceGroupAssociationIds`.
        ///
        /// To override the contents of this collection use [`set_local_gateway_route_table_virtual_interface_group_association_ids`](Self::set_local_gateway_route_table_virtual_interface_group_association_ids).
        ///
        /// <p>The IDs of the associations.</p>
        pub fn local_gateway_route_table_virtual_interface_group_association_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .local_gateway_route_table_virtual_interface_group_association_ids(input.into());
            self
        }
        /// <p>The IDs of the associations.</p>
        pub fn set_local_gateway_route_table_virtual_interface_group_association_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self
                .inner
                .set_local_gateway_route_table_virtual_interface_group_association_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table for the virtual interface group.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-virtual-interface-group-association-id</code> - The ID of the association.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-virtual-interface-group-id</code> - The ID of the virtual interface group.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface group association.</p> </li>
        /// <li> <p> <code>state</code> - The state of the association.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table for the virtual interface group.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-virtual-interface-group-association-id</code> - The ID of the association.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-virtual-interface-group-id</code> - The ID of the virtual interface group.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface group association.</p> </li>
        /// <li> <p> <code>state</code> - The state of the association.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeLocalGatewayRouteTableVpcAssociations`.
    ///
    /// <p>Describes the specified associations between VPCs and local gateway route tables.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeLocalGatewayRouteTableVpcAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_local_gateway_route_table_vpc_associations_input::Builder,
    }
    impl DescribeLocalGatewayRouteTableVpcAssociations {
        /// Creates a new `DescribeLocalGatewayRouteTableVpcAssociations`.
        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::DescribeLocalGatewayRouteTableVpcAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeLocalGatewayRouteTableVpcAssociationsError,
            >,
        > {
            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::DescribeLocalGatewayRouteTableVpcAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeLocalGatewayRouteTableVpcAssociationsError,
            >,
        > {
            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::DescribeLocalGatewayRouteTableVpcAssociationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeLocalGatewayRouteTableVpcAssociationsPaginator {
            crate::paginator::DescribeLocalGatewayRouteTableVpcAssociationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `LocalGatewayRouteTableVpcAssociationIds`.
        ///
        /// To override the contents of this collection use [`set_local_gateway_route_table_vpc_association_ids`](Self::set_local_gateway_route_table_vpc_association_ids).
        ///
        /// <p>The IDs of the associations.</p>
        pub fn local_gateway_route_table_vpc_association_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .local_gateway_route_table_vpc_association_ids(input.into());
            self
        }
        /// <p>The IDs of the associations.</p>
        pub fn set_local_gateway_route_table_vpc_association_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self
                .inner
                .set_local_gateway_route_table_vpc_association_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table for the association.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-vpc-association-id</code> - The ID of the association.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway route table for the association.</p> </li>
        /// <li> <p> <code>state</code> - The state of the association.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-arn</code> - The Amazon Resource Name (ARN) of the local gateway route table for the association.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-id</code> - The ID of the local gateway route table.</p> </li>
        /// <li> <p> <code>local-gateway-route-table-vpc-association-id</code> - The ID of the association.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway route table for the association.</p> </li>
        /// <li> <p> <code>state</code> - The state of the association.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeLocalGateways`.
    ///
    /// <p>Describes one or more local gateways. By default, all local gateways are described. Alternatively, you can filter the results.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeLocalGateways {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_local_gateways_input::Builder,
    }
    impl DescribeLocalGateways {
        /// Creates a new `DescribeLocalGateways`.
        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::DescribeLocalGateways,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeLocalGatewaysError>,
        > {
            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::DescribeLocalGatewaysOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeLocalGatewaysError>,
        > {
            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::DescribeLocalGatewaysPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeLocalGatewaysPaginator {
            crate::paginator::DescribeLocalGatewaysPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `LocalGatewayIds`.
        ///
        /// To override the contents of this collection use [`set_local_gateway_ids`](Self::set_local_gateway_ids).
        ///
        /// <p>The IDs of the local gateways.</p>
        pub fn local_gateway_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.local_gateway_ids(input.into());
            self
        }
        /// <p>The IDs of the local gateways.</p>
        pub fn set_local_gateway_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the association.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the association.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeLocalGatewayVirtualInterfaceGroups`.
    ///
    /// <p>Describes the specified local gateway virtual interface groups.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeLocalGatewayVirtualInterfaceGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_local_gateway_virtual_interface_groups_input::Builder,
    }
    impl DescribeLocalGatewayVirtualInterfaceGroups {
        /// Creates a new `DescribeLocalGatewayVirtualInterfaceGroups`.
        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::DescribeLocalGatewayVirtualInterfaceGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeLocalGatewayVirtualInterfaceGroupsError,
            >,
        > {
            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::DescribeLocalGatewayVirtualInterfaceGroupsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeLocalGatewayVirtualInterfaceGroupsError,
            >,
        > {
            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::DescribeLocalGatewayVirtualInterfaceGroupsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeLocalGatewayVirtualInterfaceGroupsPaginator {
            crate::paginator::DescribeLocalGatewayVirtualInterfaceGroupsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `LocalGatewayVirtualInterfaceGroupIds`.
        ///
        /// To override the contents of this collection use [`set_local_gateway_virtual_interface_group_ids`](Self::set_local_gateway_virtual_interface_group_ids).
        ///
        /// <p>The IDs of the virtual interface groups.</p>
        pub fn local_gateway_virtual_interface_group_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .local_gateway_virtual_interface_group_ids(input.into());
            self
        }
        /// <p>The IDs of the virtual interface groups.</p>
        pub fn set_local_gateway_virtual_interface_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self
                .inner
                .set_local_gateway_virtual_interface_group_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-virtual-interface-group-id</code> - The ID of the virtual interface group.</p> </li>
        /// <li> <p> <code>local-gateway-virtual-interface-id</code> - The ID of the virtual interface.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface group.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-gateway-id</code> - The ID of a local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-virtual-interface-group-id</code> - The ID of the virtual interface group.</p> </li>
        /// <li> <p> <code>local-gateway-virtual-interface-id</code> - The ID of the virtual interface.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface group.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeLocalGatewayVirtualInterfaces`.
    ///
    /// <p>Describes the specified local gateway virtual interfaces.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeLocalGatewayVirtualInterfaces {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_local_gateway_virtual_interfaces_input::Builder,
    }
    impl DescribeLocalGatewayVirtualInterfaces {
        /// Creates a new `DescribeLocalGatewayVirtualInterfaces`.
        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::DescribeLocalGatewayVirtualInterfaces,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeLocalGatewayVirtualInterfacesError,
            >,
        > {
            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::DescribeLocalGatewayVirtualInterfacesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeLocalGatewayVirtualInterfacesError,
            >,
        > {
            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::DescribeLocalGatewayVirtualInterfacesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeLocalGatewayVirtualInterfacesPaginator {
            crate::paginator::DescribeLocalGatewayVirtualInterfacesPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `LocalGatewayVirtualInterfaceIds`.
        ///
        /// To override the contents of this collection use [`set_local_gateway_virtual_interface_ids`](Self::set_local_gateway_virtual_interface_ids).
        ///
        /// <p>The IDs of the virtual interfaces.</p>
        pub fn local_gateway_virtual_interface_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_virtual_interface_ids(input.into());
            self
        }
        /// <p>The IDs of the virtual interfaces.</p>
        pub fn set_local_gateway_virtual_interface_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_virtual_interface_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-address</code> - The local address.</p> </li>
        /// <li> <p> <code>local-bgp-asn</code> - The Border Gateway Protocol (BGP) Autonomous System Number (ASN) of the local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-id</code> - The ID of the local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-virtual-interface-id</code> - The ID of the virtual interface.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface.</p> </li>
        /// <li> <p> <code>peer-address</code> - The peer address.</p> </li>
        /// <li> <p> <code>peer-bgp-asn</code> - The peer BGP ASN.</p> </li>
        /// <li> <p> <code>vlan</code> - The ID of the VLAN.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>local-address</code> - The local address.</p> </li>
        /// <li> <p> <code>local-bgp-asn</code> - The Border Gateway Protocol (BGP) Autonomous System Number (ASN) of the local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-id</code> - The ID of the local gateway.</p> </li>
        /// <li> <p> <code>local-gateway-virtual-interface-id</code> - The ID of the virtual interface.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the local gateway virtual interface.</p> </li>
        /// <li> <p> <code>peer-address</code> - The peer address.</p> </li>
        /// <li> <p> <code>peer-bgp-asn</code> - The peer BGP ASN.</p> </li>
        /// <li> <p> <code>vlan</code> - The ID of the VLAN.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeManagedPrefixLists`.
    ///
    /// <p>Describes your managed prefix lists and any Amazon Web Services-managed prefix lists.</p>
    /// <p>To view the entries for your prefix list, use <code>GetManagedPrefixListEntries</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeManagedPrefixLists {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_managed_prefix_lists_input::Builder,
    }
    impl DescribeManagedPrefixLists {
        /// Creates a new `DescribeManagedPrefixLists`.
        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::DescribeManagedPrefixLists,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeManagedPrefixListsError>,
        > {
            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::DescribeManagedPrefixListsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeManagedPrefixListsError>,
        > {
            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::DescribeManagedPrefixListsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeManagedPrefixListsPaginator {
            crate::paginator::DescribeManagedPrefixListsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>owner-id</code> - The ID of the prefix list owner.</p> </li>
        /// <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>
        /// <li> <p> <code>prefix-list-name</code> - The name of the prefix list.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>owner-id</code> - The ID of the prefix list owner.</p> </li>
        /// <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>
        /// <li> <p> <code>prefix-list-name</code> - The name of the prefix list.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `PrefixListIds`.
        ///
        /// To override the contents of this collection use [`set_prefix_list_ids`](Self::set_prefix_list_ids).
        ///
        /// <p>One or more prefix list IDs.</p>
        pub fn prefix_list_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_ids(input.into());
            self
        }
        /// <p>One or more prefix list IDs.</p>
        pub fn set_prefix_list_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeMovingAddresses`.
    ///
    /// <p>Describes your Elastic IP addresses that are being moved to the EC2-VPC platform, or that are being restored to the EC2-Classic platform. This request does not return information about any other Elastic IP addresses in your account.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeMovingAddresses {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_moving_addresses_input::Builder,
    }
    impl DescribeMovingAddresses {
        /// Creates a new `DescribeMovingAddresses`.
        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::DescribeMovingAddresses,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeMovingAddressesError>,
        > {
            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::DescribeMovingAddressesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeMovingAddressesError>,
        > {
            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::DescribeMovingAddressesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeMovingAddressesPaginator {
            crate::paginator::DescribeMovingAddressesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>moving-status</code> - The status of the Elastic IP address (<code>MovingToVpc</code> | <code>RestoringToClassic</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>moving-status</code> - The status of the Elastic IP address (<code>MovingToVpc</code> | <code>RestoringToClassic</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000; if <code>MaxResults</code> is given a value outside of this range, an error is returned.</p>
        /// <p>Default: If no value is provided, the default is 1000.</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 for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000; if <code>MaxResults</code> is given a value outside of this range, an error is returned.</p>
        /// <p>Default: If no value is provided, the default is 1000.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `PublicIps`.
        ///
        /// To override the contents of this collection use [`set_public_ips`](Self::set_public_ips).
        ///
        /// <p>One or more Elastic IP addresses.</p>
        pub fn public_ips(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ips(input.into());
            self
        }
        /// <p>One or more Elastic IP addresses.</p>
        pub fn set_public_ips(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_public_ips(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeNatGateways`.
    ///
    /// <p>Describes one or more of your NAT gateways.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNatGateways {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_nat_gateways_input::Builder,
    }
    impl DescribeNatGateways {
        /// Creates a new `DescribeNatGateways`.
        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::DescribeNatGateways,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeNatGatewaysError>,
        > {
            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::DescribeNatGatewaysOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeNatGatewaysError>,
        > {
            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::DescribeNatGatewaysPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeNatGatewaysPaginator {
            crate::paginator::DescribeNatGatewaysPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filter`.
        ///
        /// To override the contents of this collection use [`set_filter`](Self::set_filter).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>nat-gateway-id</code> - The ID of the NAT gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the NAT gateway (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet in which the NAT gateway resides.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC in which the NAT gateway resides.</p> </li>
        /// </ul>
        pub fn filter(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filter(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>nat-gateway-id</code> - The ID of the NAT gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the NAT gateway (<code>pending</code> | <code>failed</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet in which the NAT gateway resides.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC in which the NAT gateway resides.</p> </li>
        /// </ul>
        pub fn set_filter(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filter(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// Appends an item to `NatGatewayIds`.
        ///
        /// To override the contents of this collection use [`set_nat_gateway_ids`](Self::set_nat_gateway_ids).
        ///
        /// <p>One or more NAT gateway IDs.</p>
        pub fn nat_gateway_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.nat_gateway_ids(input.into());
            self
        }
        /// <p>One or more NAT gateway IDs.</p>
        pub fn set_nat_gateway_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_nat_gateway_ids(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 `DescribeNetworkAcls`.
    ///
    /// <p>Describes one or more of your network ACLs.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html">Network ACLs</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNetworkAcls {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_network_acls_input::Builder,
    }
    impl DescribeNetworkAcls {
        /// Creates a new `DescribeNetworkAcls`.
        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::DescribeNetworkAcls,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkAclsError>,
        > {
            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::DescribeNetworkAclsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkAclsError>,
        > {
            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::DescribeNetworkAclsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeNetworkAclsPaginator {
            crate::paginator::DescribeNetworkAclsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>association.association-id</code> - The ID of an association ID for the ACL.</p> </li>
        /// <li> <p> <code>association.network-acl-id</code> - The ID of the network ACL involved in the association.</p> </li>
        /// <li> <p> <code>association.subnet-id</code> - The ID of the subnet involved in the association.</p> </li>
        /// <li> <p> <code>default</code> - Indicates whether the ACL is the default network ACL for the VPC.</p> </li>
        /// <li> <p> <code>entry.cidr</code> - The IPv4 CIDR range specified in the entry.</p> </li>
        /// <li> <p> <code>entry.icmp.code</code> - The ICMP code specified in the entry, if any.</p> </li>
        /// <li> <p> <code>entry.icmp.type</code> - The ICMP type specified in the entry, if any.</p> </li>
        /// <li> <p> <code>entry.ipv6-cidr</code> - The IPv6 CIDR range specified in the entry.</p> </li>
        /// <li> <p> <code>entry.port-range.from</code> - The start of the port range specified in the entry. </p> </li>
        /// <li> <p> <code>entry.port-range.to</code> - The end of the port range specified in the entry. </p> </li>
        /// <li> <p> <code>entry.protocol</code> - The protocol specified in the entry (<code>tcp</code> | <code>udp</code> | <code>icmp</code> or a protocol number).</p> </li>
        /// <li> <p> <code>entry.rule-action</code> - Allows or denies the matching traffic (<code>allow</code> | <code>deny</code>).</p> </li>
        /// <li> <p> <code>entry.egress</code> - A Boolean that indicates the type of rule. Specify <code>true</code> for egress rules, or <code>false</code> for ingress rules.</p> </li>
        /// <li> <p> <code>entry.rule-number</code> - The number of an entry (in other words, rule) in the set of ACL entries.</p> </li>
        /// <li> <p> <code>network-acl-id</code> - The ID of the network ACL.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the network ACL.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC for the network ACL.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>association.association-id</code> - The ID of an association ID for the ACL.</p> </li>
        /// <li> <p> <code>association.network-acl-id</code> - The ID of the network ACL involved in the association.</p> </li>
        /// <li> <p> <code>association.subnet-id</code> - The ID of the subnet involved in the association.</p> </li>
        /// <li> <p> <code>default</code> - Indicates whether the ACL is the default network ACL for the VPC.</p> </li>
        /// <li> <p> <code>entry.cidr</code> - The IPv4 CIDR range specified in the entry.</p> </li>
        /// <li> <p> <code>entry.icmp.code</code> - The ICMP code specified in the entry, if any.</p> </li>
        /// <li> <p> <code>entry.icmp.type</code> - The ICMP type specified in the entry, if any.</p> </li>
        /// <li> <p> <code>entry.ipv6-cidr</code> - The IPv6 CIDR range specified in the entry.</p> </li>
        /// <li> <p> <code>entry.port-range.from</code> - The start of the port range specified in the entry. </p> </li>
        /// <li> <p> <code>entry.port-range.to</code> - The end of the port range specified in the entry. </p> </li>
        /// <li> <p> <code>entry.protocol</code> - The protocol specified in the entry (<code>tcp</code> | <code>udp</code> | <code>icmp</code> or a protocol number).</p> </li>
        /// <li> <p> <code>entry.rule-action</code> - Allows or denies the matching traffic (<code>allow</code> | <code>deny</code>).</p> </li>
        /// <li> <p> <code>entry.egress</code> - A Boolean that indicates the type of rule. Specify <code>true</code> for egress rules, or <code>false</code> for ingress rules.</p> </li>
        /// <li> <p> <code>entry.rule-number</code> - The number of an entry (in other words, rule) in the set of ACL entries.</p> </li>
        /// <li> <p> <code>network-acl-id</code> - The ID of the network ACL.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the network ACL.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC for the network ACL.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `NetworkAclIds`.
        ///
        /// To override the contents of this collection use [`set_network_acl_ids`](Self::set_network_acl_ids).
        ///
        /// <p>One or more network ACL IDs.</p>
        /// <p>Default: Describes all your network ACLs.</p>
        pub fn network_acl_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_acl_ids(input.into());
            self
        }
        /// <p>One or more network ACL IDs.</p>
        /// <p>Default: Describes all your network ACLs.</p>
        pub fn set_network_acl_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_acl_ids(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeNetworkInsightsAccessScopeAnalyses`.
    ///
    /// <p>Describes the specified Network Access Scope analyses.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNetworkInsightsAccessScopeAnalyses {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_network_insights_access_scope_analyses_input::Builder,
    }
    impl DescribeNetworkInsightsAccessScopeAnalyses {
        /// Creates a new `DescribeNetworkInsightsAccessScopeAnalyses`.
        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::DescribeNetworkInsightsAccessScopeAnalyses,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeNetworkInsightsAccessScopeAnalysesError,
            >,
        > {
            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::DescribeNetworkInsightsAccessScopeAnalysesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeNetworkInsightsAccessScopeAnalysesError,
            >,
        > {
            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::DescribeNetworkInsightsAccessScopeAnalysesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeNetworkInsightsAccessScopeAnalysesPaginator {
            crate::paginator::DescribeNetworkInsightsAccessScopeAnalysesPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `NetworkInsightsAccessScopeAnalysisIds`.
        ///
        /// To override the contents of this collection use [`set_network_insights_access_scope_analysis_ids`](Self::set_network_insights_access_scope_analysis_ids).
        ///
        /// <p>The IDs of the Network Access Scope analyses.</p>
        pub fn network_insights_access_scope_analysis_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .network_insights_access_scope_analysis_ids(input.into());
            self
        }
        /// <p>The IDs of the Network Access Scope analyses.</p>
        pub fn set_network_insights_access_scope_analysis_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self
                .inner
                .set_network_insights_access_scope_analysis_ids(input);
            self
        }
        /// <p>The ID of the Network Access Scope.</p>
        pub fn network_insights_access_scope_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_insights_access_scope_id(input.into());
            self
        }
        /// <p>The ID of the Network Access Scope.</p>
        pub fn set_network_insights_access_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_access_scope_id(input);
            self
        }
        /// <p>Filters the results based on the start time. The analysis must have started on or after this time.</p>
        pub fn analysis_start_time_begin(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.analysis_start_time_begin(input);
            self
        }
        /// <p>Filters the results based on the start time. The analysis must have started on or after this time.</p>
        pub fn set_analysis_start_time_begin(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_analysis_start_time_begin(input);
            self
        }
        /// <p>Filters the results based on the start time. The analysis must have started on or before this time.</p>
        pub fn analysis_start_time_end(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.analysis_start_time_end(input);
            self
        }
        /// <p>Filters the results based on the start time. The analysis must have started on or before this time.</p>
        pub fn set_analysis_start_time_end(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_analysis_start_time_end(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>There are no supported filters.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>There are no supported filters.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 `DescribeNetworkInsightsAccessScopes`.
    ///
    /// <p>Describes the specified Network Access Scopes.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNetworkInsightsAccessScopes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_network_insights_access_scopes_input::Builder,
    }
    impl DescribeNetworkInsightsAccessScopes {
        /// Creates a new `DescribeNetworkInsightsAccessScopes`.
        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::DescribeNetworkInsightsAccessScopes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeNetworkInsightsAccessScopesError,
            >,
        > {
            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::DescribeNetworkInsightsAccessScopesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeNetworkInsightsAccessScopesError,
            >,
        > {
            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::DescribeNetworkInsightsAccessScopesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeNetworkInsightsAccessScopesPaginator {
            crate::paginator::DescribeNetworkInsightsAccessScopesPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `NetworkInsightsAccessScopeIds`.
        ///
        /// To override the contents of this collection use [`set_network_insights_access_scope_ids`](Self::set_network_insights_access_scope_ids).
        ///
        /// <p>The IDs of the Network Access Scopes.</p>
        pub fn network_insights_access_scope_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_insights_access_scope_ids(input.into());
            self
        }
        /// <p>The IDs of the Network Access Scopes.</p>
        pub fn set_network_insights_access_scope_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_access_scope_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>There are no supported filters.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>There are no supported filters.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 `DescribeNetworkInsightsAnalyses`.
    ///
    /// <p>Describes one or more of your network insights analyses.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNetworkInsightsAnalyses {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_network_insights_analyses_input::Builder,
    }
    impl DescribeNetworkInsightsAnalyses {
        /// Creates a new `DescribeNetworkInsightsAnalyses`.
        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::DescribeNetworkInsightsAnalyses,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkInsightsAnalysesError>,
        > {
            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::DescribeNetworkInsightsAnalysesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkInsightsAnalysesError>,
        > {
            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::DescribeNetworkInsightsAnalysesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeNetworkInsightsAnalysesPaginator {
            crate::paginator::DescribeNetworkInsightsAnalysesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `NetworkInsightsAnalysisIds`.
        ///
        /// To override the contents of this collection use [`set_network_insights_analysis_ids`](Self::set_network_insights_analysis_ids).
        ///
        /// <p>The ID of the network insights analyses. You must specify either analysis IDs or a path ID.</p>
        pub fn network_insights_analysis_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_insights_analysis_ids(input.into());
            self
        }
        /// <p>The ID of the network insights analyses. You must specify either analysis IDs or a path ID.</p>
        pub fn set_network_insights_analysis_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_analysis_ids(input);
            self
        }
        /// <p>The ID of the path. You must specify either a path ID or analysis IDs.</p>
        pub fn network_insights_path_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_insights_path_id(input.into());
            self
        }
        /// <p>The ID of the path. You must specify either a path ID or analysis IDs.</p>
        pub fn set_network_insights_path_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_path_id(input);
            self
        }
        /// <p>The time when the network insights analyses started.</p>
        pub fn analysis_start_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.analysis_start_time(input);
            self
        }
        /// <p>The time when the network insights analyses started.</p>
        pub fn set_analysis_start_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_analysis_start_time(input);
            self
        }
        /// <p>The time when the network insights analyses ended.</p>
        pub fn analysis_end_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.analysis_end_time(input);
            self
        }
        /// <p>The time when the network insights analyses ended.</p>
        pub fn set_analysis_end_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_analysis_end_time(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters. The following are the possible values:</p>
        /// <ul>
        /// <li> <p>path-found - A Boolean value that indicates whether a feasible path is found.</p> </li>
        /// <li> <p>status - The status of the analysis (running | succeeded | failed).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters. The following are the possible values:</p>
        /// <ul>
        /// <li> <p>path-found - A Boolean value that indicates whether a feasible path is found.</p> </li>
        /// <li> <p>status - The status of the analysis (running | succeeded | failed).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 `DescribeNetworkInsightsPaths`.
    ///
    /// <p>Describes one or more of your paths.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNetworkInsightsPaths {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_network_insights_paths_input::Builder,
    }
    impl DescribeNetworkInsightsPaths {
        /// Creates a new `DescribeNetworkInsightsPaths`.
        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::DescribeNetworkInsightsPaths,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkInsightsPathsError>,
        > {
            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::DescribeNetworkInsightsPathsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkInsightsPathsError>,
        > {
            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::DescribeNetworkInsightsPathsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeNetworkInsightsPathsPaginator {
            crate::paginator::DescribeNetworkInsightsPathsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `NetworkInsightsPathIds`.
        ///
        /// To override the contents of this collection use [`set_network_insights_path_ids`](Self::set_network_insights_path_ids).
        ///
        /// <p>The IDs of the paths.</p>
        pub fn network_insights_path_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_insights_path_ids(input.into());
            self
        }
        /// <p>The IDs of the paths.</p>
        pub fn set_network_insights_path_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_path_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters. The following are the possible values:</p>
        /// <ul>
        /// <li> <p>destination - The ID of the resource.</p> </li>
        /// <li> <p>destination-port - The destination port.</p> </li>
        /// <li> <p>protocol - The protocol.</p> </li>
        /// <li> <p>source - The ID of the resource.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters. The following are the possible values:</p>
        /// <ul>
        /// <li> <p>destination - The ID of the resource.</p> </li>
        /// <li> <p>destination-port - The destination port.</p> </li>
        /// <li> <p>protocol - The protocol.</p> </li>
        /// <li> <p>source - The ID of the resource.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 `DescribeNetworkInterfaceAttribute`.
    ///
    /// <p>Describes a network interface attribute. You can specify only one attribute at a time.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNetworkInterfaceAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_network_interface_attribute_input::Builder,
    }
    impl DescribeNetworkInterfaceAttribute {
        /// Creates a new `DescribeNetworkInterfaceAttribute`.
        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::DescribeNetworkInterfaceAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkInterfaceAttributeError>,
        > {
            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::DescribeNetworkInterfaceAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkInterfaceAttributeError>,
        > {
            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 attribute of the network interface. This parameter is required.</p>
        pub fn attribute(mut self, input: crate::model::NetworkInterfaceAttribute) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The attribute of the network interface. This parameter is required.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::NetworkInterfaceAttribute>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeNetworkInterfacePermissions`.
    ///
    /// <p>Describes the permissions for your network interfaces. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNetworkInterfacePermissions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_network_interface_permissions_input::Builder,
    }
    impl DescribeNetworkInterfacePermissions {
        /// Creates a new `DescribeNetworkInterfacePermissions`.
        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::DescribeNetworkInterfacePermissions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeNetworkInterfacePermissionsError,
            >,
        > {
            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::DescribeNetworkInterfacePermissionsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeNetworkInterfacePermissionsError,
            >,
        > {
            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::DescribeNetworkInterfacePermissionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeNetworkInterfacePermissionsPaginator {
            crate::paginator::DescribeNetworkInterfacePermissionsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `NetworkInterfacePermissionIds`.
        ///
        /// To override the contents of this collection use [`set_network_interface_permission_ids`](Self::set_network_interface_permission_ids).
        ///
        /// <p>The network interface permission IDs.</p>
        pub fn network_interface_permission_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_interface_permission_ids(input.into());
            self
        }
        /// <p>The network interface permission IDs.</p>
        pub fn set_network_interface_permission_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_permission_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>network-interface-permission.network-interface-permission-id</code> - The ID of the permission.</p> </li>
        /// <li> <p> <code>network-interface-permission.network-interface-id</code> - The ID of the network interface.</p> </li>
        /// <li> <p> <code>network-interface-permission.aws-account-id</code> - The Amazon Web Services account ID.</p> </li>
        /// <li> <p> <code>network-interface-permission.aws-service</code> - The Amazon Web Service.</p> </li>
        /// <li> <p> <code>network-interface-permission.permission</code> - The type of permission (<code>INSTANCE-ATTACH</code> | <code>EIP-ASSOCIATE</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>network-interface-permission.network-interface-permission-id</code> - The ID of the permission.</p> </li>
        /// <li> <p> <code>network-interface-permission.network-interface-id</code> - The ID of the network interface.</p> </li>
        /// <li> <p> <code>network-interface-permission.aws-account-id</code> - The Amazon Web Services account ID.</p> </li>
        /// <li> <p> <code>network-interface-permission.aws-service</code> - The Amazon Web Service.</p> </li>
        /// <li> <p> <code>network-interface-permission.permission</code> - The type of permission (<code>INSTANCE-ATTACH</code> | <code>EIP-ASSOCIATE</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The token to request the next page of results.</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 to request the next page of results.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. If this parameter is not specified, up to 50 results are returned by default.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. If this parameter is not specified, up to 50 results are returned by default.</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 `DescribeNetworkInterfaces`.
    ///
    /// <p>Describes one or more of your network interfaces.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeNetworkInterfaces {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_network_interfaces_input::Builder,
    }
    impl DescribeNetworkInterfaces {
        /// Creates a new `DescribeNetworkInterfaces`.
        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::DescribeNetworkInterfaces,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkInterfacesError>,
        > {
            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::DescribeNetworkInterfacesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeNetworkInterfacesError>,
        > {
            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::DescribeNetworkInterfacesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeNetworkInterfacesPaginator {
            crate::paginator::DescribeNetworkInterfacesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>addresses.private-ip-address</code> - The private IPv4 addresses associated with the network interface.</p> </li>
        /// <li> <p> <code>addresses.primary</code> - Whether the private IPv4 address is the primary IP address associated with the network interface. </p> </li>
        /// <li> <p> <code>addresses.association.public-ip</code> - The association ID returned when the network interface was associated with the Elastic IP address (IPv4).</p> </li>
        /// <li> <p> <code>addresses.association.owner-id</code> - The owner ID of the addresses associated with the network interface.</p> </li>
        /// <li> <p> <code>association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li>
        /// <li> <p> <code>association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li>
        /// <li> <p> <code>association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li>
        /// <li> <p> <code>association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li>
        /// <li> <p> <code>association.public-dns-name</code> - The public DNS name for the network interface (IPv4).</p> </li>
        /// <li> <p> <code>attachment.attachment-id</code> - The ID of the interface attachment.</p> </li>
        /// <li> <p> <code>attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li>
        /// <li> <p> <code>attachment.delete-on-termination</code> - Indicates whether the attachment is deleted when an instance is terminated.</p> </li>
        /// <li> <p> <code>attachment.device-index</code> - The device index to which the network interface is attached.</p> </li>
        /// <li> <p> <code>attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li>
        /// <li> <p> <code>attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li>
        /// <li> <p> <code>attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the network interface.</p> </li>
        /// <li> <p> <code>description</code> - The description of the network interface.</p> </li>
        /// <li> <p> <code>group-id</code> - The ID of a security group associated with the network interface.</p> </li>
        /// <li> <p> <code>group-name</code> - The name of a security group associated with the network interface.</p> </li>
        /// <li> <p> <code>ipv6-addresses.ipv6-address</code> - An IPv6 address associated with the network interface.</p> </li>
        /// <li> <p> <code>interface-type</code> - The type of network interface (<code>api_gateway_managed</code> | <code>aws_codestar_connections_managed</code> | <code>branch</code> | <code>efa</code> | <code>gateway_load_balancer</code> | <code>gateway_load_balancer_endpoint</code> | <code>global_accelerator_managed</code> | <code>interface</code> | <code>iot_rules_managed</code> | <code>lambda</code> | <code>load_balancer</code> | <code>nat_gateway</code> | <code>network_load_balancer</code> | <code>quicksight</code> | <code>transit_gateway</code> | <code>trunk</code> | <code>vpc_endpoint</code>).</p> </li>
        /// <li> <p> <code>mac-address</code> - The MAC address of the network interface.</p> </li>
        /// <li> <p> <code>network-interface-id</code> - The ID of the network interface.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the network interface owner.</p> </li>
        /// <li> <p> <code>private-ip-address</code> - The private IPv4 address or addresses of the network interface.</p> </li>
        /// <li> <p> <code>private-dns-name</code> - The private DNS name of the network interface (IPv4).</p> </li>
        /// <li> <p> <code>requester-id</code> - The alias or Amazon Web Services account ID of the principal or service that created the network interface.</p> </li>
        /// <li> <p> <code>requester-managed</code> - Indicates whether the network interface is being managed by an Amazon Web Service (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li>
        /// <li> <p> <code>source-dest-check</code> - Indicates whether the network interface performs source/destination checking. A value of <code>true</code> means checking is enabled, and <code>false</code> means checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC. </p> </li>
        /// <li> <p> <code>status</code> - The status of the network interface. If the network interface is not attached to an instance, the status is <code>available</code>; if a network interface is attached to an instance the status is <code>in-use</code>.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet for the network interface.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC for the network interface.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>addresses.private-ip-address</code> - The private IPv4 addresses associated with the network interface.</p> </li>
        /// <li> <p> <code>addresses.primary</code> - Whether the private IPv4 address is the primary IP address associated with the network interface. </p> </li>
        /// <li> <p> <code>addresses.association.public-ip</code> - The association ID returned when the network interface was associated with the Elastic IP address (IPv4).</p> </li>
        /// <li> <p> <code>addresses.association.owner-id</code> - The owner ID of the addresses associated with the network interface.</p> </li>
        /// <li> <p> <code>association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li>
        /// <li> <p> <code>association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li>
        /// <li> <p> <code>association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li>
        /// <li> <p> <code>association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li>
        /// <li> <p> <code>association.public-dns-name</code> - The public DNS name for the network interface (IPv4).</p> </li>
        /// <li> <p> <code>attachment.attachment-id</code> - The ID of the interface attachment.</p> </li>
        /// <li> <p> <code>attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li>
        /// <li> <p> <code>attachment.delete-on-termination</code> - Indicates whether the attachment is deleted when an instance is terminated.</p> </li>
        /// <li> <p> <code>attachment.device-index</code> - The device index to which the network interface is attached.</p> </li>
        /// <li> <p> <code>attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li>
        /// <li> <p> <code>attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li>
        /// <li> <p> <code>attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the network interface.</p> </li>
        /// <li> <p> <code>description</code> - The description of the network interface.</p> </li>
        /// <li> <p> <code>group-id</code> - The ID of a security group associated with the network interface.</p> </li>
        /// <li> <p> <code>group-name</code> - The name of a security group associated with the network interface.</p> </li>
        /// <li> <p> <code>ipv6-addresses.ipv6-address</code> - An IPv6 address associated with the network interface.</p> </li>
        /// <li> <p> <code>interface-type</code> - The type of network interface (<code>api_gateway_managed</code> | <code>aws_codestar_connections_managed</code> | <code>branch</code> | <code>efa</code> | <code>gateway_load_balancer</code> | <code>gateway_load_balancer_endpoint</code> | <code>global_accelerator_managed</code> | <code>interface</code> | <code>iot_rules_managed</code> | <code>lambda</code> | <code>load_balancer</code> | <code>nat_gateway</code> | <code>network_load_balancer</code> | <code>quicksight</code> | <code>transit_gateway</code> | <code>trunk</code> | <code>vpc_endpoint</code>).</p> </li>
        /// <li> <p> <code>mac-address</code> - The MAC address of the network interface.</p> </li>
        /// <li> <p> <code>network-interface-id</code> - The ID of the network interface.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the network interface owner.</p> </li>
        /// <li> <p> <code>private-ip-address</code> - The private IPv4 address or addresses of the network interface.</p> </li>
        /// <li> <p> <code>private-dns-name</code> - The private DNS name of the network interface (IPv4).</p> </li>
        /// <li> <p> <code>requester-id</code> - The alias or Amazon Web Services account ID of the principal or service that created the network interface.</p> </li>
        /// <li> <p> <code>requester-managed</code> - Indicates whether the network interface is being managed by an Amazon Web Service (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li>
        /// <li> <p> <code>source-dest-check</code> - Indicates whether the network interface performs source/destination checking. A value of <code>true</code> means checking is enabled, and <code>false</code> means checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC. </p> </li>
        /// <li> <p> <code>status</code> - The status of the network interface. If the network interface is not attached to an instance, the status is <code>available</code>; if a network interface is attached to an instance the status is <code>in-use</code>.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet for the network interface.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC for the network interface.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `NetworkInterfaceIds`.
        ///
        /// To override the contents of this collection use [`set_network_interface_ids`](Self::set_network_interface_ids).
        ///
        /// <p>The network interface IDs.</p>
        /// <p>Default: Describes all your network interfaces.</p>
        pub fn network_interface_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_ids(input.into());
            self
        }
        /// <p>The network interface IDs.</p>
        /// <p>Default: Describes all your network interfaces.</p>
        pub fn set_network_interface_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_ids(input);
            self
        }
        /// <p>The token to retrieve the next page of results.</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 to retrieve the next page of results.</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 items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. You cannot specify this parameter and the network interface IDs parameter in the same request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. You cannot specify this parameter and the network interface IDs parameter in the same 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 `DescribePlacementGroups`.
    ///
    /// <p>Describes the specified placement groups or all of your placement groups. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html">Placement groups</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribePlacementGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_placement_groups_input::Builder,
    }
    impl DescribePlacementGroups {
        /// Creates a new `DescribePlacementGroups`.
        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::DescribePlacementGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribePlacementGroupsError>,
        > {
            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::DescribePlacementGroupsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribePlacementGroupsError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>group-name</code> - The name of the placement group.</p> </li>
        /// <li> <p> <code>group-arn</code> - The Amazon Resource Name (ARN) of the placement group.</p> </li>
        /// <li> <p> <code>spread-level</code> - The spread level for the placement group (<code>host</code> | <code>rack</code>). </p> </li>
        /// <li> <p> <code>state</code> - The state of the placement group (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>strategy</code> - The strategy of the placement group (<code>cluster</code> | <code>spread</code> | <code>partition</code>).</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>group-name</code> - The name of the placement group.</p> </li>
        /// <li> <p> <code>group-arn</code> - The Amazon Resource Name (ARN) of the placement group.</p> </li>
        /// <li> <p> <code>spread-level</code> - The spread level for the placement group (<code>host</code> | <code>rack</code>). </p> </li>
        /// <li> <p> <code>state</code> - The state of the placement group (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>strategy</code> - The strategy of the placement group (<code>cluster</code> | <code>spread</code> | <code>partition</code>).</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `GroupNames`.
        ///
        /// To override the contents of this collection use [`set_group_names`](Self::set_group_names).
        ///
        /// <p>The names of the placement groups.</p>
        /// <p>Default: Describes all your placement groups, or only those otherwise specified.</p>
        pub fn group_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_names(input.into());
            self
        }
        /// <p>The names of the placement groups.</p>
        /// <p>Default: Describes all your placement groups, or only those otherwise specified.</p>
        pub fn set_group_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_group_names(input);
            self
        }
        /// Appends an item to `GroupIds`.
        ///
        /// To override the contents of this collection use [`set_group_ids`](Self::set_group_ids).
        ///
        /// <p>The IDs of the placement groups.</p>
        pub fn group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_ids(input.into());
            self
        }
        /// <p>The IDs of the placement groups.</p>
        pub fn set_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_group_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribePrefixLists`.
    ///
    /// <p>Describes available Amazon Web Services services in a prefix list format, which includes the prefix list name and prefix list ID of the service and the IP address range for the service.</p>
    /// <p>We recommend that you use <code>DescribeManagedPrefixLists</code> instead.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribePrefixLists {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_prefix_lists_input::Builder,
    }
    impl DescribePrefixLists {
        /// Creates a new `DescribePrefixLists`.
        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::DescribePrefixLists,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribePrefixListsError>,
        > {
            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::DescribePrefixListsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribePrefixListsError>,
        > {
            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::DescribePrefixListsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribePrefixListsPaginator {
            crate::paginator::DescribePrefixListsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>prefix-list-id</code>: The ID of a prefix list.</p> </li>
        /// <li> <p> <code>prefix-list-name</code>: The name of a prefix list.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>prefix-list-id</code>: The ID of a prefix list.</p> </li>
        /// <li> <p> <code>prefix-list-name</code>: The name of a prefix list.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `PrefixListIds`.
        ///
        /// To override the contents of this collection use [`set_prefix_list_ids`](Self::set_prefix_list_ids).
        ///
        /// <p>One or more prefix list IDs.</p>
        pub fn prefix_list_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_ids(input.into());
            self
        }
        /// <p>One or more prefix list IDs.</p>
        pub fn set_prefix_list_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribePrincipalIdFormat`.
    ///
    /// <p>Describes the ID format settings for the root user and all IAM roles and IAM users that have explicitly specified a longer ID (17-character ID) preference. </p>
    /// <p>By default, all IAM roles and IAM users default to the same ID settings as the root user, unless they explicitly override the settings. This request is useful for identifying those IAM users and IAM roles that have overridden the default ID settings.</p>
    /// <p>The following resource types support longer IDs: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribePrincipalIdFormat {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_principal_id_format_input::Builder,
    }
    impl DescribePrincipalIdFormat {
        /// Creates a new `DescribePrincipalIdFormat`.
        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::DescribePrincipalIdFormat,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribePrincipalIdFormatError>,
        > {
            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::DescribePrincipalIdFormatOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribePrincipalIdFormatError>,
        > {
            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::DescribePrincipalIdFormatPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribePrincipalIdFormatPaginator {
            crate::paginator::DescribePrincipalIdFormatPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Resources`.
        ///
        /// To override the contents of this collection use [`set_resources`](Self::set_resources).
        ///
        /// <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
        pub fn resources(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resources(input.into());
            self
        }
        /// <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>instance</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>reservation</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>snapshot</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code> </p>
        pub fn set_resources(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_resources(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned NextToken value. </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 a single call. To retrieve the remaining results, make another call with the returned NextToken value. </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 token to request the next page of results.</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 to request the next page of results.</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 `DescribePublicIpv4Pools`.
    ///
    /// <p>Describes the specified IPv4 address pools.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribePublicIpv4Pools {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_public_ipv4_pools_input::Builder,
    }
    impl DescribePublicIpv4Pools {
        /// Creates a new `DescribePublicIpv4Pools`.
        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::DescribePublicIpv4Pools,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribePublicIpv4PoolsError>,
        > {
            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::DescribePublicIpv4PoolsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribePublicIpv4PoolsError>,
        > {
            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::DescribePublicIpv4PoolsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribePublicIpv4PoolsPaginator {
            crate::paginator::DescribePublicIpv4PoolsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `PoolIds`.
        ///
        /// To override the contents of this collection use [`set_pool_ids`](Self::set_pool_ids).
        ///
        /// <p>The IDs of the address pools.</p>
        pub fn pool_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.pool_ids(input.into());
            self
        }
        /// <p>The IDs of the address pools.</p>
        pub fn set_pool_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_pool_ids(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeRegions`.
    ///
    /// <p>Describes the Regions that are enabled for your account, or all Regions.</p>
    /// <p>For a list of the Regions supported by Amazon EC2, see <a href="https://docs.aws.amazon.com/general/latest/gr/ec2-service.html"> Amazon Elastic Compute Cloud endpoints and quotas</a>.</p>
    /// <p>For information about enabling and disabling Regions for your account, see <a href="https://docs.aws.amazon.com/general/latest/gr/rande-manage.html">Managing Amazon Web Services Regions</a> in the <i>Amazon Web Services General Reference</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeRegions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_regions_input::Builder,
    }
    impl DescribeRegions {
        /// Creates a new `DescribeRegions`.
        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::DescribeRegions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeRegionsError>,
        > {
            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::DescribeRegionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeRegionsError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>endpoint</code> - The endpoint of the Region (for example, <code>ec2.us-east-1.amazonaws.com</code>).</p> </li>
        /// <li> <p> <code>opt-in-status</code> - The opt-in status of the Region (<code>opt-in-not-required</code> | <code>opted-in</code> | <code>not-opted-in</code>).</p> </li>
        /// <li> <p> <code>region-name</code> - The name of the Region (for example, <code>us-east-1</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>endpoint</code> - The endpoint of the Region (for example, <code>ec2.us-east-1.amazonaws.com</code>).</p> </li>
        /// <li> <p> <code>opt-in-status</code> - The opt-in status of the Region (<code>opt-in-not-required</code> | <code>opted-in</code> | <code>not-opted-in</code>).</p> </li>
        /// <li> <p> <code>region-name</code> - The name of the Region (for example, <code>us-east-1</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `RegionNames`.
        ///
        /// To override the contents of this collection use [`set_region_names`](Self::set_region_names).
        ///
        /// <p>The names of the Regions. You can specify any Regions, whether they are enabled and disabled for your account.</p>
        pub fn region_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.region_names(input.into());
            self
        }
        /// <p>The names of the Regions. You can specify any Regions, whether they are enabled and disabled for your account.</p>
        pub fn set_region_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_region_names(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether to display all Regions, including Regions that are disabled for your account.</p>
        pub fn all_regions(mut self, input: bool) -> Self {
            self.inner = self.inner.all_regions(input);
            self
        }
        /// <p>Indicates whether to display all Regions, including Regions that are disabled for your account.</p>
        pub fn set_all_regions(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_all_regions(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeReplaceRootVolumeTasks`.
    ///
    /// <p>Describes a root volume replacement task. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html">Replace a root volume</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeReplaceRootVolumeTasks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_replace_root_volume_tasks_input::Builder,
    }
    impl DescribeReplaceRootVolumeTasks {
        /// Creates a new `DescribeReplaceRootVolumeTasks`.
        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::DescribeReplaceRootVolumeTasks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeReplaceRootVolumeTasksError>,
        > {
            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::DescribeReplaceRootVolumeTasksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeReplaceRootVolumeTasksError>,
        > {
            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::DescribeReplaceRootVolumeTasksPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeReplaceRootVolumeTasksPaginator {
            crate::paginator::DescribeReplaceRootVolumeTasksPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `ReplaceRootVolumeTaskIds`.
        ///
        /// To override the contents of this collection use [`set_replace_root_volume_task_ids`](Self::set_replace_root_volume_task_ids).
        ///
        /// <p>The ID of the root volume replacement task to view.</p>
        pub fn replace_root_volume_task_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.replace_root_volume_task_ids(input.into());
            self
        }
        /// <p>The ID of the root volume replacement task to view.</p>
        pub fn set_replace_root_volume_task_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_replace_root_volume_task_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>Filter to use:</p>
        /// <ul>
        /// <li> <p> <code>instance-id</code> - The ID of the instance for which the root volume replacement task was created.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>Filter to use:</p>
        /// <ul>
        /// <li> <p> <code>instance-id</code> - The ID of the instance for which the root volume replacement task was created.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeReservedInstances`.
    ///
    /// <p>Describes one or more of the Reserved Instances that you purchased.</p>
    /// <p>For more information about Reserved Instances, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html">Reserved Instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeReservedInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_reserved_instances_input::Builder,
    }
    impl DescribeReservedInstances {
        /// Creates a new `DescribeReservedInstances`.
        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::DescribeReservedInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeReservedInstancesError>,
        > {
            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::DescribeReservedInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeReservedInstancesError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li>
        /// <li> <p> <code>duration</code> - The duration of the Reserved Instance (one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li>
        /// <li> <p> <code>end</code> - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z).</p> </li>
        /// <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li>
        /// <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Region</code> or <code>Availability Zone</code>).</p> </li>
        /// <li> <p> <code>product-description</code> - The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC (<code>Linux/UNIX</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>SUSE Linux</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux with HA (Amazon VPC)</code> | <code>Windows</code> | <code>Windows (Amazon VPC)</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Standard (Amazon VPC)</code> | <code>Windows with SQL Server Web</code> | <code>Windows with SQL Server Web (Amazon VPC)</code> | <code>Windows with SQL Server Enterprise</code> | <code>Windows with SQL Server Enterprise (Amazon VPC)</code>).</p> </li>
        /// <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instance.</p> </li>
        /// <li> <p> <code>start</code> - The time at which the Reserved Instance purchase request was placed (for example, 2014-08-07T11:54:42.000Z).</p> </li>
        /// <li> <p> <code>state</code> - The state of the Reserved Instance (<code>payment-pending</code> | <code>active</code> | <code>payment-failed</code> | <code>retired</code>).</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li>
        /// <li> <p> <code>duration</code> - The duration of the Reserved Instance (one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li>
        /// <li> <p> <code>end</code> - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z).</p> </li>
        /// <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li>
        /// <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Region</code> or <code>Availability Zone</code>).</p> </li>
        /// <li> <p> <code>product-description</code> - The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC (<code>Linux/UNIX</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>SUSE Linux</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux with HA (Amazon VPC)</code> | <code>Windows</code> | <code>Windows (Amazon VPC)</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Standard (Amazon VPC)</code> | <code>Windows with SQL Server Web</code> | <code>Windows with SQL Server Web (Amazon VPC)</code> | <code>Windows with SQL Server Enterprise</code> | <code>Windows with SQL Server Enterprise (Amazon VPC)</code>).</p> </li>
        /// <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instance.</p> </li>
        /// <li> <p> <code>start</code> - The time at which the Reserved Instance purchase request was placed (for example, 2014-08-07T11:54:42.000Z).</p> </li>
        /// <li> <p> <code>state</code> - The state of the Reserved Instance (<code>payment-pending</code> | <code>active</code> | <code>payment-failed</code> | <code>retired</code>).</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Describes whether the Reserved Instance is Standard or Convertible.</p>
        pub fn offering_class(mut self, input: crate::model::OfferingClassType) -> Self {
            self.inner = self.inner.offering_class(input);
            self
        }
        /// <p>Describes whether the Reserved Instance is Standard or Convertible.</p>
        pub fn set_offering_class(
            mut self,
            input: std::option::Option<crate::model::OfferingClassType>,
        ) -> Self {
            self.inner = self.inner.set_offering_class(input);
            self
        }
        /// Appends an item to `ReservedInstancesIds`.
        ///
        /// To override the contents of this collection use [`set_reserved_instances_ids`](Self::set_reserved_instances_ids).
        ///
        /// <p>One or more Reserved Instance IDs.</p>
        /// <p>Default: Describes all your Reserved Instances, or only those otherwise specified.</p>
        pub fn reserved_instances_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.reserved_instances_ids(input.into());
            self
        }
        /// <p>One or more Reserved Instance IDs.</p>
        /// <p>Default: Describes all your Reserved Instances, or only those otherwise specified.</p>
        pub fn set_reserved_instances_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the <code>Medium Utilization</code> Reserved Instance offering type.</p>
        pub fn offering_type(mut self, input: crate::model::OfferingTypeValues) -> Self {
            self.inner = self.inner.offering_type(input);
            self
        }
        /// <p>The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the <code>Medium Utilization</code> Reserved Instance offering type.</p>
        pub fn set_offering_type(
            mut self,
            input: std::option::Option<crate::model::OfferingTypeValues>,
        ) -> Self {
            self.inner = self.inner.set_offering_type(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeReservedInstancesListings`.
    ///
    /// <p>Describes your account's Reserved Instance listings in the Reserved Instance Marketplace.</p>
    /// <p>The Reserved Instance Marketplace matches sellers who want to resell Reserved Instance capacity that they no longer need with buyers who want to purchase additional capacity. Reserved Instances bought and sold through the Reserved Instance Marketplace work like any other Reserved Instances.</p>
    /// <p>As a seller, you choose to list some or all of your Reserved Instances, and you specify the upfront price to receive for them. Your Reserved Instances are then listed in the Reserved Instance Marketplace and are available for purchase.</p>
    /// <p>As a buyer, you specify the configuration of the Reserved Instance to purchase, and the Marketplace matches what you're searching for with what's available. The Marketplace first sells the lowest priced Reserved Instances to you, and continues to sell available Reserved Instance listings to you until your demand is met. You are charged based on the total price of all of the listings that you purchase.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html">Reserved Instance Marketplace</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeReservedInstancesListings {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_reserved_instances_listings_input::Builder,
    }
    impl DescribeReservedInstancesListings {
        /// Creates a new `DescribeReservedInstancesListings`.
        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::DescribeReservedInstancesListings,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeReservedInstancesListingsError>,
        > {
            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::DescribeReservedInstancesListingsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeReservedInstancesListingsError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instances.</p> </li>
        /// <li> <p> <code>reserved-instances-listing-id</code> - The ID of the Reserved Instances listing.</p> </li>
        /// <li> <p> <code>status</code> - The status of the Reserved Instance listing (<code>pending</code> | <code>active</code> | <code>cancelled</code> | <code>closed</code>).</p> </li>
        /// <li> <p> <code>status-message</code> - The reason for the status.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instances.</p> </li>
        /// <li> <p> <code>reserved-instances-listing-id</code> - The ID of the Reserved Instances listing.</p> </li>
        /// <li> <p> <code>status</code> - The status of the Reserved Instance listing (<code>pending</code> | <code>active</code> | <code>cancelled</code> | <code>closed</code>).</p> </li>
        /// <li> <p> <code>status-message</code> - The reason for the status.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>One or more Reserved Instance IDs.</p>
        pub fn reserved_instances_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.reserved_instances_id(input.into());
            self
        }
        /// <p>One or more Reserved Instance IDs.</p>
        pub fn set_reserved_instances_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_id(input);
            self
        }
        /// <p>One or more Reserved Instance listing IDs.</p>
        pub fn reserved_instances_listing_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.reserved_instances_listing_id(input.into());
            self
        }
        /// <p>One or more Reserved Instance listing IDs.</p>
        pub fn set_reserved_instances_listing_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_listing_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeReservedInstancesModifications`.
    ///
    /// <p>Describes the modifications made to your Reserved Instances. If no parameter is specified, information about all your Reserved Instances modification requests is returned. If a modification ID is specified, only information about the specific modification is returned.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html">Modifying Reserved Instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeReservedInstancesModifications {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_reserved_instances_modifications_input::Builder,
    }
    impl DescribeReservedInstancesModifications {
        /// Creates a new `DescribeReservedInstancesModifications`.
        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::DescribeReservedInstancesModifications,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeReservedInstancesModificationsError,
            >,
        > {
            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::DescribeReservedInstancesModificationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeReservedInstancesModificationsError,
            >,
        > {
            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::DescribeReservedInstancesModificationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeReservedInstancesModificationsPaginator {
            crate::paginator::DescribeReservedInstancesModificationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>client-token</code> - The idempotency token for the modification request.</p> </li>
        /// <li> <p> <code>create-date</code> - The time when the modification request was created.</p> </li>
        /// <li> <p> <code>effective-date</code> - The time when the modification becomes effective.</p> </li>
        /// <li> <p> <code>modification-result.reserved-instances-id</code> - The ID for the Reserved Instances created as part of the modification request. This ID is only available when the status of the modification is <code>fulfilled</code>.</p> </li>
        /// <li> <p> <code>modification-result.target-configuration.availability-zone</code> - The Availability Zone for the new Reserved Instances.</p> </li>
        /// <li> <p> <code>modification-result.target-configuration.instance-count </code> - The number of new Reserved Instances.</p> </li>
        /// <li> <p> <code>modification-result.target-configuration.instance-type</code> - The instance type of the new Reserved Instances.</p> </li>
        /// <li> <p> <code>modification-result.target-configuration.platform</code> - The network platform of the new Reserved Instances (<code>EC2-Classic</code> | <code>EC2-VPC</code>).</p> </li>
        /// <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instances modified.</p> </li>
        /// <li> <p> <code>reserved-instances-modification-id</code> - The ID of the modification request.</p> </li>
        /// <li> <p> <code>status</code> - The status of the Reserved Instances modification request (<code>processing</code> | <code>fulfilled</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>status-message</code> - The reason for the status.</p> </li>
        /// <li> <p> <code>update-date</code> - The time when the modification request was last updated.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>client-token</code> - The idempotency token for the modification request.</p> </li>
        /// <li> <p> <code>create-date</code> - The time when the modification request was created.</p> </li>
        /// <li> <p> <code>effective-date</code> - The time when the modification becomes effective.</p> </li>
        /// <li> <p> <code>modification-result.reserved-instances-id</code> - The ID for the Reserved Instances created as part of the modification request. This ID is only available when the status of the modification is <code>fulfilled</code>.</p> </li>
        /// <li> <p> <code>modification-result.target-configuration.availability-zone</code> - The Availability Zone for the new Reserved Instances.</p> </li>
        /// <li> <p> <code>modification-result.target-configuration.instance-count </code> - The number of new Reserved Instances.</p> </li>
        /// <li> <p> <code>modification-result.target-configuration.instance-type</code> - The instance type of the new Reserved Instances.</p> </li>
        /// <li> <p> <code>modification-result.target-configuration.platform</code> - The network platform of the new Reserved Instances (<code>EC2-Classic</code> | <code>EC2-VPC</code>).</p> </li>
        /// <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instances modified.</p> </li>
        /// <li> <p> <code>reserved-instances-modification-id</code> - The ID of the modification request.</p> </li>
        /// <li> <p> <code>status</code> - The status of the Reserved Instances modification request (<code>processing</code> | <code>fulfilled</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>status-message</code> - The reason for the status.</p> </li>
        /// <li> <p> <code>update-date</code> - The time when the modification request was last updated.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `ReservedInstancesModificationIds`.
        ///
        /// To override the contents of this collection use [`set_reserved_instances_modification_ids`](Self::set_reserved_instances_modification_ids).
        ///
        /// <p>IDs for the submitted modification request.</p>
        pub fn reserved_instances_modification_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.reserved_instances_modification_ids(input.into());
            self
        }
        /// <p>IDs for the submitted modification request.</p>
        pub fn set_reserved_instances_modification_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_modification_ids(input);
            self
        }
        /// <p>The token to retrieve the next page of results.</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 to retrieve the next page of results.</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 `DescribeReservedInstancesOfferings`.
    ///
    /// <p>Describes Reserved Instance offerings that are available for purchase. With Reserved Instances, you purchase the right to launch instances for a period of time. During that time period, you do not receive insufficient capacity errors, and you pay a lower usage rate than the rate charged for On-Demand instances for the actual time used.</p>
    /// <p>If you have listed your own Reserved Instances for sale in the Reserved Instance Marketplace, they will be excluded from these results. This is to ensure that you do not purchase your own Reserved Instances.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html">Reserved Instance Marketplace</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeReservedInstancesOfferings {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_reserved_instances_offerings_input::Builder,
    }
    impl DescribeReservedInstancesOfferings {
        /// Creates a new `DescribeReservedInstancesOfferings`.
        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::DescribeReservedInstancesOfferings,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeReservedInstancesOfferingsError,
            >,
        > {
            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::DescribeReservedInstancesOfferingsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeReservedInstancesOfferingsError,
            >,
        > {
            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::DescribeReservedInstancesOfferingsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeReservedInstancesOfferingsPaginator {
            crate::paginator::DescribeReservedInstancesOfferingsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The Availability Zone in which the Reserved Instance can be used.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>The Availability Zone in which the Reserved Instance can be used.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li>
        /// <li> <p> <code>duration</code> - The duration of the Reserved Instance (for example, one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li>
        /// <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li>
        /// <li> <p> <code>marketplace</code> - Set to <code>true</code> to show only Reserved Instance Marketplace offerings. When this filter is not used, which is the default behavior, all offerings from both Amazon Web Services and the Reserved Instance Marketplace are listed.</p> </li>
        /// <li> <p> <code>product-description</code> - The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC. (<code>Linux/UNIX</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>SUSE Linux</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux with HA (Amazon VPC)</code> | <code>Windows</code> | <code>Windows (Amazon VPC)</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Standard (Amazon VPC)</code> | <code>Windows with SQL Server Web</code> | <code> Windows with SQL Server Web (Amazon VPC)</code> | <code>Windows with SQL Server Enterprise</code> | <code>Windows with SQL Server Enterprise (Amazon VPC)</code>) </p> </li>
        /// <li> <p> <code>reserved-instances-offering-id</code> - The Reserved Instances offering ID.</p> </li>
        /// <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Availability Zone</code> or <code>Region</code>).</p> </li>
        /// <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li>
        /// <li> <p> <code>duration</code> - The duration of the Reserved Instance (for example, one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li>
        /// <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li>
        /// <li> <p> <code>marketplace</code> - Set to <code>true</code> to show only Reserved Instance Marketplace offerings. When this filter is not used, which is the default behavior, all offerings from both Amazon Web Services and the Reserved Instance Marketplace are listed.</p> </li>
        /// <li> <p> <code>product-description</code> - The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC. (<code>Linux/UNIX</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>SUSE Linux</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>Red Hat Enterprise Linux with HA (Amazon VPC)</code> | <code>Windows</code> | <code>Windows (Amazon VPC)</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Standard (Amazon VPC)</code> | <code>Windows with SQL Server Web</code> | <code> Windows with SQL Server Web (Amazon VPC)</code> | <code>Windows with SQL Server Enterprise</code> | <code>Windows with SQL Server Enterprise (Amazon VPC)</code>) </p> </li>
        /// <li> <p> <code>reserved-instances-offering-id</code> - The Reserved Instances offering ID.</p> </li>
        /// <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Availability Zone</code> or <code>Region</code>).</p> </li>
        /// <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Include Reserved Instance Marketplace offerings in the response.</p>
        pub fn include_marketplace(mut self, input: bool) -> Self {
            self.inner = self.inner.include_marketplace(input);
            self
        }
        /// <p>Include Reserved Instance Marketplace offerings in the response.</p>
        pub fn set_include_marketplace(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_include_marketplace(input);
            self
        }
        /// <p>The instance type that the reservation will cover (for example, <code>m1.small</code>). For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn instance_type(mut self, input: crate::model::InstanceType) -> Self {
            self.inner = self.inner.instance_type(input);
            self
        }
        /// <p>The instance type that the reservation will cover (for example, <code>m1.small</code>). For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_instance_type(
            mut self,
            input: std::option::Option<crate::model::InstanceType>,
        ) -> Self {
            self.inner = self.inner.set_instance_type(input);
            self
        }
        /// <p>The maximum duration (in seconds) to filter when searching for offerings.</p>
        /// <p>Default: 94608000 (3 years)</p>
        pub fn max_duration(mut self, input: i64) -> Self {
            self.inner = self.inner.max_duration(input);
            self
        }
        /// <p>The maximum duration (in seconds) to filter when searching for offerings.</p>
        /// <p>Default: 94608000 (3 years)</p>
        pub fn set_max_duration(mut self, input: std::option::Option<i64>) -> Self {
            self.inner = self.inner.set_max_duration(input);
            self
        }
        /// <p>The maximum number of instances to filter when searching for offerings.</p>
        /// <p>Default: 20</p>
        pub fn max_instance_count(mut self, input: i32) -> Self {
            self.inner = self.inner.max_instance_count(input);
            self
        }
        /// <p>The maximum number of instances to filter when searching for offerings.</p>
        /// <p>Default: 20</p>
        pub fn set_max_instance_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_instance_count(input);
            self
        }
        /// <p>The minimum duration (in seconds) to filter when searching for offerings.</p>
        /// <p>Default: 2592000 (1 month)</p>
        pub fn min_duration(mut self, input: i64) -> Self {
            self.inner = self.inner.min_duration(input);
            self
        }
        /// <p>The minimum duration (in seconds) to filter when searching for offerings.</p>
        /// <p>Default: 2592000 (1 month)</p>
        pub fn set_min_duration(mut self, input: std::option::Option<i64>) -> Self {
            self.inner = self.inner.set_min_duration(input);
            self
        }
        /// <p>The offering class of the Reserved Instance. Can be <code>standard</code> or <code>convertible</code>.</p>
        pub fn offering_class(mut self, input: crate::model::OfferingClassType) -> Self {
            self.inner = self.inner.offering_class(input);
            self
        }
        /// <p>The offering class of the Reserved Instance. Can be <code>standard</code> or <code>convertible</code>.</p>
        pub fn set_offering_class(
            mut self,
            input: std::option::Option<crate::model::OfferingClassType>,
        ) -> Self {
            self.inner = self.inner.set_offering_class(input);
            self
        }
        /// <p>The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the description are for use with Amazon VPC.</p>
        pub fn product_description(mut self, input: crate::model::RiProductDescription) -> Self {
            self.inner = self.inner.product_description(input);
            self
        }
        /// <p>The Reserved Instance product platform description. Instances that include <code>(Amazon VPC)</code> in the description are for use with Amazon VPC.</p>
        pub fn set_product_description(
            mut self,
            input: std::option::Option<crate::model::RiProductDescription>,
        ) -> Self {
            self.inner = self.inner.set_product_description(input);
            self
        }
        /// Appends an item to `ReservedInstancesOfferingIds`.
        ///
        /// To override the contents of this collection use [`set_reserved_instances_offering_ids`](Self::set_reserved_instances_offering_ids).
        ///
        /// <p>One or more Reserved Instances offering IDs.</p>
        pub fn reserved_instances_offering_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.reserved_instances_offering_ids(input.into());
            self
        }
        /// <p>One or more Reserved Instances offering IDs.</p>
        pub fn set_reserved_instances_offering_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_offering_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The tenancy of the instances covered by the reservation. A Reserved Instance with a tenancy of <code>dedicated</code> is applied to instances that run in a VPC on single-tenant hardware (i.e., Dedicated Instances).</p>
        /// <p> <b>Important:</b> The <code>host</code> value cannot be used with this parameter. Use the <code>default</code> or <code>dedicated</code> values only.</p>
        /// <p>Default: <code>default</code> </p>
        pub fn instance_tenancy(mut self, input: crate::model::Tenancy) -> Self {
            self.inner = self.inner.instance_tenancy(input);
            self
        }
        /// <p>The tenancy of the instances covered by the reservation. A Reserved Instance with a tenancy of <code>dedicated</code> is applied to instances that run in a VPC on single-tenant hardware (i.e., Dedicated Instances).</p>
        /// <p> <b>Important:</b> The <code>host</code> value cannot be used with this parameter. Use the <code>default</code> or <code>dedicated</code> values only.</p>
        /// <p>Default: <code>default</code> </p>
        pub fn set_instance_tenancy(
            mut self,
            input: std::option::Option<crate::model::Tenancy>,
        ) -> Self {
            self.inner = self.inner.set_instance_tenancy(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. The maximum is 100.</p>
        /// <p>Default: 100</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 for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. The maximum is 100.</p>
        /// <p>Default: 100</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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 Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the <code>Medium Utilization</code> Reserved Instance offering type. </p>
        pub fn offering_type(mut self, input: crate::model::OfferingTypeValues) -> Self {
            self.inner = self.inner.offering_type(input);
            self
        }
        /// <p>The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the <code>Medium Utilization</code> Reserved Instance offering type. </p>
        pub fn set_offering_type(
            mut self,
            input: std::option::Option<crate::model::OfferingTypeValues>,
        ) -> Self {
            self.inner = self.inner.set_offering_type(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeRouteTables`.
    ///
    /// <p>Describes one or more of your route tables.</p>
    /// <p>Each subnet in your VPC must be associated with a route table. If a subnet is not explicitly associated with any route table, it is implicitly associated with the main route table. This command does not return the subnet ID for implicit associations.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html">Route tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeRouteTables {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_route_tables_input::Builder,
    }
    impl DescribeRouteTables {
        /// Creates a new `DescribeRouteTables`.
        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::DescribeRouteTables,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeRouteTablesError>,
        > {
            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::DescribeRouteTablesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeRouteTablesError>,
        > {
            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::DescribeRouteTablesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeRouteTablesPaginator {
            crate::paginator::DescribeRouteTablesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>association.route-table-association-id</code> - The ID of an association ID for the route table.</p> </li>
        /// <li> <p> <code>association.route-table-id</code> - The ID of the route table involved in the association.</p> </li>
        /// <li> <p> <code>association.subnet-id</code> - The ID of the subnet involved in the association.</p> </li>
        /// <li> <p> <code>association.main</code> - Indicates whether the route table is the main route table for the VPC (<code>true</code> | <code>false</code>). Route tables that do not have an association ID are not returned in the response.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the route table.</p> </li>
        /// <li> <p> <code>route-table-id</code> - The ID of the route table.</p> </li>
        /// <li> <p> <code>route.destination-cidr-block</code> - The IPv4 CIDR range specified in a route in the table.</p> </li>
        /// <li> <p> <code>route.destination-ipv6-cidr-block</code> - The IPv6 CIDR range specified in a route in the route table.</p> </li>
        /// <li> <p> <code>route.destination-prefix-list-id</code> - The ID (prefix) of the Amazon Web Service specified in a route in the table.</p> </li>
        /// <li> <p> <code>route.egress-only-internet-gateway-id</code> - The ID of an egress-only Internet gateway specified in a route in the route table.</p> </li>
        /// <li> <p> <code>route.gateway-id</code> - The ID of a gateway specified in a route in the table.</p> </li>
        /// <li> <p> <code>route.instance-id</code> - The ID of an instance specified in a route in the table.</p> </li>
        /// <li> <p> <code>route.nat-gateway-id</code> - The ID of a NAT gateway.</p> </li>
        /// <li> <p> <code>route.transit-gateway-id</code> - The ID of a transit gateway.</p> </li>
        /// <li> <p> <code>route.origin</code> - Describes how the route was created. <code>CreateRouteTable</code> indicates that the route was automatically created when the route table was created; <code>CreateRoute</code> indicates that the route was manually added to the route table; <code>EnableVgwRoutePropagation</code> indicates that the route was propagated by route propagation.</p> </li>
        /// <li> <p> <code>route.state</code> - The state of a route in the route table (<code>active</code> | <code>blackhole</code>). The blackhole state indicates that the route's target isn't available (for example, the specified gateway isn't attached to the VPC, the specified NAT instance has been terminated, and so on).</p> </li>
        /// <li> <p> <code>route.vpc-peering-connection-id</code> - The ID of a VPC peering connection specified in a route in the table.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC for the route table.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>association.route-table-association-id</code> - The ID of an association ID for the route table.</p> </li>
        /// <li> <p> <code>association.route-table-id</code> - The ID of the route table involved in the association.</p> </li>
        /// <li> <p> <code>association.subnet-id</code> - The ID of the subnet involved in the association.</p> </li>
        /// <li> <p> <code>association.main</code> - Indicates whether the route table is the main route table for the VPC (<code>true</code> | <code>false</code>). Route tables that do not have an association ID are not returned in the response.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the route table.</p> </li>
        /// <li> <p> <code>route-table-id</code> - The ID of the route table.</p> </li>
        /// <li> <p> <code>route.destination-cidr-block</code> - The IPv4 CIDR range specified in a route in the table.</p> </li>
        /// <li> <p> <code>route.destination-ipv6-cidr-block</code> - The IPv6 CIDR range specified in a route in the route table.</p> </li>
        /// <li> <p> <code>route.destination-prefix-list-id</code> - The ID (prefix) of the Amazon Web Service specified in a route in the table.</p> </li>
        /// <li> <p> <code>route.egress-only-internet-gateway-id</code> - The ID of an egress-only Internet gateway specified in a route in the route table.</p> </li>
        /// <li> <p> <code>route.gateway-id</code> - The ID of a gateway specified in a route in the table.</p> </li>
        /// <li> <p> <code>route.instance-id</code> - The ID of an instance specified in a route in the table.</p> </li>
        /// <li> <p> <code>route.nat-gateway-id</code> - The ID of a NAT gateway.</p> </li>
        /// <li> <p> <code>route.transit-gateway-id</code> - The ID of a transit gateway.</p> </li>
        /// <li> <p> <code>route.origin</code> - Describes how the route was created. <code>CreateRouteTable</code> indicates that the route was automatically created when the route table was created; <code>CreateRoute</code> indicates that the route was manually added to the route table; <code>EnableVgwRoutePropagation</code> indicates that the route was propagated by route propagation.</p> </li>
        /// <li> <p> <code>route.state</code> - The state of a route in the route table (<code>active</code> | <code>blackhole</code>). The blackhole state indicates that the route's target isn't available (for example, the specified gateway isn't attached to the VPC, the specified NAT instance has been terminated, and so on).</p> </li>
        /// <li> <p> <code>route.vpc-peering-connection-id</code> - The ID of a VPC peering connection specified in a route in the table.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC for the route table.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `RouteTableIds`.
        ///
        /// To override the contents of this collection use [`set_route_table_ids`](Self::set_route_table_ids).
        ///
        /// <p>One or more route table IDs.</p>
        /// <p>Default: Describes all your route tables.</p>
        pub fn route_table_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_ids(input.into());
            self
        }
        /// <p>One or more route table IDs.</p>
        /// <p>Default: Describes all your route tables.</p>
        pub fn set_route_table_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_route_table_ids(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeScheduledInstanceAvailability`.
    ///
    /// <p>Finds available schedules that meet the specified criteria.</p>
    /// <p>You can search for an available schedule no more than 3 months in advance. You must meet the minimum required duration of 1,200 hours per year. For example, the minimum daily schedule is 4 hours, the minimum weekly schedule is 24 hours, and the minimum monthly schedule is 100 hours.</p>
    /// <p>After you find a schedule that meets your needs, call <code>PurchaseScheduledInstances</code> to purchase Scheduled Instances with that schedule.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeScheduledInstanceAvailability {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_scheduled_instance_availability_input::Builder,
    }
    impl DescribeScheduledInstanceAvailability {
        /// Creates a new `DescribeScheduledInstanceAvailability`.
        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::DescribeScheduledInstanceAvailability,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeScheduledInstanceAvailabilityError,
            >,
        > {
            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::DescribeScheduledInstanceAvailabilityOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeScheduledInstanceAvailabilityError,
            >,
        > {
            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::DescribeScheduledInstanceAvailabilityPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeScheduledInstanceAvailabilityPaginator {
            crate::paginator::DescribeScheduledInstanceAvailabilityPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone (for example, <code>us-west-2a</code>).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type (for example, <code>c4.large</code>).</p> </li>
        /// <li> <p> <code>network-platform</code> - The network platform (<code>EC2-Classic</code> or <code>EC2-VPC</code>).</p> </li>
        /// <li> <p> <code>platform</code> - The platform (<code>Linux/UNIX</code> or <code>Windows</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone (for example, <code>us-west-2a</code>).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type (for example, <code>c4.large</code>).</p> </li>
        /// <li> <p> <code>network-platform</code> - The network platform (<code>EC2-Classic</code> or <code>EC2-VPC</code>).</p> </li>
        /// <li> <p> <code>platform</code> - The platform (<code>Linux/UNIX</code> or <code>Windows</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The time period for the first schedule to start.</p>
        pub fn first_slot_start_time_range(
            mut self,
            input: crate::model::SlotDateTimeRangeRequest,
        ) -> Self {
            self.inner = self.inner.first_slot_start_time_range(input);
            self
        }
        /// <p>The time period for the first schedule to start.</p>
        pub fn set_first_slot_start_time_range(
            mut self,
            input: std::option::Option<crate::model::SlotDateTimeRangeRequest>,
        ) -> Self {
            self.inner = self.inner.set_first_slot_start_time_range(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. This value can be between 5 and 300. The default value is 300. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. This value can be between 5 and 300. The default value is 300. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 maximum available duration, in hours. This value must be greater than <code>MinSlotDurationInHours</code> and less than 1,720.</p>
        pub fn max_slot_duration_in_hours(mut self, input: i32) -> Self {
            self.inner = self.inner.max_slot_duration_in_hours(input);
            self
        }
        /// <p>The maximum available duration, in hours. This value must be greater than <code>MinSlotDurationInHours</code> and less than 1,720.</p>
        pub fn set_max_slot_duration_in_hours(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_slot_duration_in_hours(input);
            self
        }
        /// <p>The minimum available duration, in hours. The minimum required duration is 1,200 hours per year. For example, the minimum daily schedule is 4 hours, the minimum weekly schedule is 24 hours, and the minimum monthly schedule is 100 hours.</p>
        pub fn min_slot_duration_in_hours(mut self, input: i32) -> Self {
            self.inner = self.inner.min_slot_duration_in_hours(input);
            self
        }
        /// <p>The minimum available duration, in hours. The minimum required duration is 1,200 hours per year. For example, the minimum daily schedule is 4 hours, the minimum weekly schedule is 24 hours, and the minimum monthly schedule is 100 hours.</p>
        pub fn set_min_slot_duration_in_hours(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_min_slot_duration_in_hours(input);
            self
        }
        /// <p>The token for the next set of results.</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.</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 schedule recurrence.</p>
        pub fn recurrence(
            mut self,
            input: crate::model::ScheduledInstanceRecurrenceRequest,
        ) -> Self {
            self.inner = self.inner.recurrence(input);
            self
        }
        /// <p>The schedule recurrence.</p>
        pub fn set_recurrence(
            mut self,
            input: std::option::Option<crate::model::ScheduledInstanceRecurrenceRequest>,
        ) -> Self {
            self.inner = self.inner.set_recurrence(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeScheduledInstances`.
    ///
    /// <p>Describes the specified Scheduled Instances or all your Scheduled Instances.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeScheduledInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_scheduled_instances_input::Builder,
    }
    impl DescribeScheduledInstances {
        /// Creates a new `DescribeScheduledInstances`.
        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::DescribeScheduledInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeScheduledInstancesError>,
        > {
            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::DescribeScheduledInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeScheduledInstancesError>,
        > {
            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::DescribeScheduledInstancesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeScheduledInstancesPaginator {
            crate::paginator::DescribeScheduledInstancesPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone (for example, <code>us-west-2a</code>).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type (for example, <code>c4.large</code>).</p> </li>
        /// <li> <p> <code>network-platform</code> - The network platform (<code>EC2-Classic</code> or <code>EC2-VPC</code>).</p> </li>
        /// <li> <p> <code>platform</code> - The platform (<code>Linux/UNIX</code> or <code>Windows</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone (for example, <code>us-west-2a</code>).</p> </li>
        /// <li> <p> <code>instance-type</code> - The instance type (for example, <code>c4.large</code>).</p> </li>
        /// <li> <p> <code>network-platform</code> - The network platform (<code>EC2-Classic</code> or <code>EC2-VPC</code>).</p> </li>
        /// <li> <p> <code>platform</code> - The platform (<code>Linux/UNIX</code> or <code>Windows</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. This value can be between 5 and 300. The default value is 100. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. This value can be between 5 and 300. The default value is 100. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</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
        }
        /// Appends an item to `ScheduledInstanceIds`.
        ///
        /// To override the contents of this collection use [`set_scheduled_instance_ids`](Self::set_scheduled_instance_ids).
        ///
        /// <p>The Scheduled Instance IDs.</p>
        pub fn scheduled_instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.scheduled_instance_ids(input.into());
            self
        }
        /// <p>The Scheduled Instance IDs.</p>
        pub fn set_scheduled_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_scheduled_instance_ids(input);
            self
        }
        /// <p>The time period for the first schedule to start.</p>
        pub fn slot_start_time_range(
            mut self,
            input: crate::model::SlotStartTimeRangeRequest,
        ) -> Self {
            self.inner = self.inner.slot_start_time_range(input);
            self
        }
        /// <p>The time period for the first schedule to start.</p>
        pub fn set_slot_start_time_range(
            mut self,
            input: std::option::Option<crate::model::SlotStartTimeRangeRequest>,
        ) -> Self {
            self.inner = self.inner.set_slot_start_time_range(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeSecurityGroupReferences`.
    ///
    /// <p>[VPC only] Describes the VPCs on the other side of a VPC peering connection that are referencing the security groups you've specified in this request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSecurityGroupReferences {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_security_group_references_input::Builder,
    }
    impl DescribeSecurityGroupReferences {
        /// Creates a new `DescribeSecurityGroupReferences`.
        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::DescribeSecurityGroupReferences,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSecurityGroupReferencesError>,
        > {
            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::DescribeSecurityGroupReferencesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSecurityGroupReferencesError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `GroupId`.
        ///
        /// To override the contents of this collection use [`set_group_id`](Self::set_group_id).
        ///
        /// <p>The IDs of the security groups in your account.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The IDs of the security groups in your account.</p>
        pub fn set_group_id(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeSecurityGroupRules`.
    ///
    /// <p>Describes one or more of your security group rules.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSecurityGroupRules {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_security_group_rules_input::Builder,
    }
    impl DescribeSecurityGroupRules {
        /// Creates a new `DescribeSecurityGroupRules`.
        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::DescribeSecurityGroupRules,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSecurityGroupRulesError>,
        > {
            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::DescribeSecurityGroupRulesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSecurityGroupRulesError>,
        > {
            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::DescribeSecurityGroupRulesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeSecurityGroupRulesPaginator {
            crate::paginator::DescribeSecurityGroupRulesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>group-id</code> - The ID of the security group.</p> </li>
        /// <li> <p> <code>security-group-rule-id</code> - The ID of the security group rule.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>group-id</code> - The ID of the security group.</p> </li>
        /// <li> <p> <code>security-group-rule-id</code> - The ID of the security group rule.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `SecurityGroupRuleIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_rule_ids`](Self::set_security_group_rule_ids).
        ///
        /// <p>The IDs of the security group rules.</p>
        pub fn security_group_rule_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_rule_ids(input.into());
            self
        }
        /// <p>The IDs of the security group rules.</p>
        pub fn set_security_group_rule_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_rule_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000. If this parameter is not specified, then all results are returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000. If this parameter is not specified, then all results are returned.</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 `DescribeSecurityGroups`.
    ///
    /// <p>Describes the specified security groups or all of your security groups.</p>
    /// <p>A security group is for use with instances either in the EC2-Classic platform or in a specific VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">Amazon EC2 security groups</a> in the <i>Amazon Elastic Compute Cloud User Guide</i> and <a href="https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html">Security groups for your VPC</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSecurityGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_security_groups_input::Builder,
    }
    impl DescribeSecurityGroups {
        /// Creates a new `DescribeSecurityGroups`.
        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::DescribeSecurityGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSecurityGroupsError>,
        > {
            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::DescribeSecurityGroupsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSecurityGroupsError>,
        > {
            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::DescribeSecurityGroupsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeSecurityGroupsPaginator {
            crate::paginator::DescribeSecurityGroupsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters. If using multiple filters for rules, the results include security groups for which any combination of rules - not necessarily a single rule - match all filters.</p>
        /// <ul>
        /// <li> <p> <code>description</code> - The description of the security group.</p> </li>
        /// <li> <p> <code>egress.ip-permission.cidr</code> - An IPv4 CIDR block for an outbound security group rule.</p> </li>
        /// <li> <p> <code>egress.ip-permission.from-port</code> - For an outbound rule, the start of port range for the TCP and UDP protocols, or an ICMP type number.</p> </li>
        /// <li> <p> <code>egress.ip-permission.group-id</code> - The ID of a security group that has been referenced in an outbound security group rule.</p> </li>
        /// <li> <p> <code>egress.ip-permission.group-name</code> - The name of a security group that is referenced in an outbound security group rule.</p> </li>
        /// <li> <p> <code>egress.ip-permission.ipv6-cidr</code> - An IPv6 CIDR block for an outbound security group rule.</p> </li>
        /// <li> <p> <code>egress.ip-permission.prefix-list-id</code> - The ID of a prefix list to which a security group rule allows outbound access.</p> </li>
        /// <li> <p> <code>egress.ip-permission.protocol</code> - The IP protocol for an outbound security group rule (<code>tcp</code> | <code>udp</code> | <code>icmp</code>, a protocol number, or -1 for all protocols).</p> </li>
        /// <li> <p> <code>egress.ip-permission.to-port</code> - For an outbound rule, the end of port range for the TCP and UDP protocols, or an ICMP code.</p> </li>
        /// <li> <p> <code>egress.ip-permission.user-id</code> - The ID of an Amazon Web Services account that has been referenced in an outbound security group rule.</p> </li>
        /// <li> <p> <code>group-id</code> - The ID of the security group. </p> </li>
        /// <li> <p> <code>group-name</code> - The name of the security group.</p> </li>
        /// <li> <p> <code>ip-permission.cidr</code> - An IPv4 CIDR block for an inbound security group rule.</p> </li>
        /// <li> <p> <code>ip-permission.from-port</code> - For an inbound rule, the start of port range for the TCP and UDP protocols, or an ICMP type number.</p> </li>
        /// <li> <p> <code>ip-permission.group-id</code> - The ID of a security group that has been referenced in an inbound security group rule.</p> </li>
        /// <li> <p> <code>ip-permission.group-name</code> - The name of a security group that is referenced in an inbound security group rule.</p> </li>
        /// <li> <p> <code>ip-permission.ipv6-cidr</code> - An IPv6 CIDR block for an inbound security group rule.</p> </li>
        /// <li> <p> <code>ip-permission.prefix-list-id</code> - The ID of a prefix list from which a security group rule allows inbound access.</p> </li>
        /// <li> <p> <code>ip-permission.protocol</code> - The IP protocol for an inbound security group rule (<code>tcp</code> | <code>udp</code> | <code>icmp</code>, a protocol number, or -1 for all protocols).</p> </li>
        /// <li> <p> <code>ip-permission.to-port</code> - For an inbound rule, the end of port range for the TCP and UDP protocols, or an ICMP code.</p> </li>
        /// <li> <p> <code>ip-permission.user-id</code> - The ID of an Amazon Web Services account that has been referenced in an inbound security group rule.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner of the security group.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC specified when the security group was created.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters. If using multiple filters for rules, the results include security groups for which any combination of rules - not necessarily a single rule - match all filters.</p>
        /// <ul>
        /// <li> <p> <code>description</code> - The description of the security group.</p> </li>
        /// <li> <p> <code>egress.ip-permission.cidr</code> - An IPv4 CIDR block for an outbound security group rule.</p> </li>
        /// <li> <p> <code>egress.ip-permission.from-port</code> - For an outbound rule, the start of port range for the TCP and UDP protocols, or an ICMP type number.</p> </li>
        /// <li> <p> <code>egress.ip-permission.group-id</code> - The ID of a security group that has been referenced in an outbound security group rule.</p> </li>
        /// <li> <p> <code>egress.ip-permission.group-name</code> - The name of a security group that is referenced in an outbound security group rule.</p> </li>
        /// <li> <p> <code>egress.ip-permission.ipv6-cidr</code> - An IPv6 CIDR block for an outbound security group rule.</p> </li>
        /// <li> <p> <code>egress.ip-permission.prefix-list-id</code> - The ID of a prefix list to which a security group rule allows outbound access.</p> </li>
        /// <li> <p> <code>egress.ip-permission.protocol</code> - The IP protocol for an outbound security group rule (<code>tcp</code> | <code>udp</code> | <code>icmp</code>, a protocol number, or -1 for all protocols).</p> </li>
        /// <li> <p> <code>egress.ip-permission.to-port</code> - For an outbound rule, the end of port range for the TCP and UDP protocols, or an ICMP code.</p> </li>
        /// <li> <p> <code>egress.ip-permission.user-id</code> - The ID of an Amazon Web Services account that has been referenced in an outbound security group rule.</p> </li>
        /// <li> <p> <code>group-id</code> - The ID of the security group. </p> </li>
        /// <li> <p> <code>group-name</code> - The name of the security group.</p> </li>
        /// <li> <p> <code>ip-permission.cidr</code> - An IPv4 CIDR block for an inbound security group rule.</p> </li>
        /// <li> <p> <code>ip-permission.from-port</code> - For an inbound rule, the start of port range for the TCP and UDP protocols, or an ICMP type number.</p> </li>
        /// <li> <p> <code>ip-permission.group-id</code> - The ID of a security group that has been referenced in an inbound security group rule.</p> </li>
        /// <li> <p> <code>ip-permission.group-name</code> - The name of a security group that is referenced in an inbound security group rule.</p> </li>
        /// <li> <p> <code>ip-permission.ipv6-cidr</code> - An IPv6 CIDR block for an inbound security group rule.</p> </li>
        /// <li> <p> <code>ip-permission.prefix-list-id</code> - The ID of a prefix list from which a security group rule allows inbound access.</p> </li>
        /// <li> <p> <code>ip-permission.protocol</code> - The IP protocol for an inbound security group rule (<code>tcp</code> | <code>udp</code> | <code>icmp</code>, a protocol number, or -1 for all protocols).</p> </li>
        /// <li> <p> <code>ip-permission.to-port</code> - For an inbound rule, the end of port range for the TCP and UDP protocols, or an ICMP code.</p> </li>
        /// <li> <p> <code>ip-permission.user-id</code> - The ID of an Amazon Web Services account that has been referenced in an inbound security group rule.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner of the security group.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC specified when the security group was created.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `GroupIds`.
        ///
        /// To override the contents of this collection use [`set_group_ids`](Self::set_group_ids).
        ///
        /// <p>The IDs of the security groups. Required for security groups in a nondefault VPC.</p>
        /// <p>Default: Describes all of your security groups.</p>
        pub fn group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_ids(input.into());
            self
        }
        /// <p>The IDs of the security groups. Required for security groups in a nondefault VPC.</p>
        /// <p>Default: Describes all of your security groups.</p>
        pub fn set_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_group_ids(input);
            self
        }
        /// Appends an item to `GroupNames`.
        ///
        /// To override the contents of this collection use [`set_group_names`](Self::set_group_names).
        ///
        /// <p>[EC2-Classic and default VPC only] The names of the security groups. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, use the <code>group-name</code> filter to describe security groups by name.</p>
        /// <p>Default: Describes all of your security groups.</p>
        pub fn group_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_names(input.into());
            self
        }
        /// <p>[EC2-Classic and default VPC only] The names of the security groups. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, use the <code>group-name</code> filter to describe security groups by name.</p>
        /// <p>Default: Describes all of your security groups.</p>
        pub fn set_group_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_group_names(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token to request the next page of results.</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 to request the next page of results.</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 a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000. If this parameter is not specified, then all results are returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value. This value can be between 5 and 1000. If this parameter is not specified, then all results are returned.</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 `DescribeSnapshotAttribute`.
    ///
    /// <p>Describes the specified attribute of the specified snapshot. You can specify only one attribute at a time.</p>
    /// <p>For more information about EBS snapshots, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html">Amazon EBS snapshots</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSnapshotAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_snapshot_attribute_input::Builder,
    }
    impl DescribeSnapshotAttribute {
        /// Creates a new `DescribeSnapshotAttribute`.
        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::DescribeSnapshotAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSnapshotAttributeError>,
        > {
            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::DescribeSnapshotAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSnapshotAttributeError>,
        > {
            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 snapshot attribute you would like to view.</p>
        pub fn attribute(mut self, input: crate::model::SnapshotAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The snapshot attribute you would like to view.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::SnapshotAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>The ID of the EBS snapshot.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The ID of the EBS snapshot.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeSnapshots`.
    ///
    /// <p>Describes the specified EBS snapshots available to you or all of the EBS snapshots available to you.</p>
    /// <p>The snapshots available to you include public snapshots, private snapshots that you own, and private snapshots owned by other Amazon Web Services accounts for which you have explicit create volume permissions.</p>
    /// <p>The create volume permissions fall into the following categories:</p>
    /// <ul>
    /// <li> <p> <i>public</i>: The owner of the snapshot granted create volume permissions for the snapshot to the <code>all</code> group. All Amazon Web Services accounts have create volume permissions for these snapshots.</p> </li>
    /// <li> <p> <i>explicit</i>: The owner of the snapshot granted create volume permissions to a specific Amazon Web Services account.</p> </li>
    /// <li> <p> <i>implicit</i>: An Amazon Web Services account has implicit create volume permissions for all snapshots it owns.</p> </li>
    /// </ul>
    /// <p>The list of snapshots returned can be filtered by specifying snapshot IDs, snapshot owners, or Amazon Web Services accounts with create volume permissions. If no options are specified, Amazon EC2 returns all snapshots for which you have create volume permissions.</p>
    /// <p>If you specify one or more snapshot IDs, only snapshots that have the specified IDs are returned. If you specify an invalid snapshot ID, an error is returned. If you specify a snapshot ID for which you do not have access, it is not included in the returned results.</p>
    /// <p>If you specify one or more snapshot owners using the <code>OwnerIds</code> option, only snapshots from the specified owners and for which you have access are returned. The results can include the Amazon Web Services account IDs of the specified owners, <code>amazon</code> for snapshots owned by Amazon, or <code>self</code> for snapshots that you own.</p>
    /// <p>If you specify a list of restorable users, only snapshots with create snapshot permissions for those users are returned. You can specify Amazon Web Services account IDs (if you own the snapshots), <code>self</code> for snapshots for which you own or have explicit permissions, or <code>all</code> for public snapshots.</p>
    /// <p>If you are describing a long list of snapshots, we recommend that you paginate the output to make the list more manageable. The <code>MaxResults</code> parameter sets the maximum number of results returned in a single page. If the list of results exceeds your <code>MaxResults</code> value, then that number of results is returned along with a <code>NextToken</code> value that can be passed to a subsequent <code>DescribeSnapshots</code> request to retrieve the remaining results.</p>
    /// <p>To get the state of fast snapshot restores for a snapshot, use <code>DescribeFastSnapshotRestores</code>.</p>
    /// <p>For more information about EBS snapshots, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html">Amazon EBS snapshots</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSnapshots {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_snapshots_input::Builder,
    }
    impl DescribeSnapshots {
        /// Creates a new `DescribeSnapshots`.
        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::DescribeSnapshots,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSnapshotsError>,
        > {
            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::DescribeSnapshotsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSnapshotsError>,
        > {
            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::DescribeSnapshotsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeSnapshotsPaginator {
            crate::paginator::DescribeSnapshotsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>description</code> - A description of the snapshot.</p> </li>
        /// <li> <p> <code>encrypted</code> - Indicates whether the snapshot is encrypted (<code>true</code> | <code>false</code>)</p> </li>
        /// <li> <p> <code>owner-alias</code> - The owner alias, from an Amazon-maintained list (<code>amazon</code>). This is not the user-configured Amazon Web Services account alias set using the IAM console. We recommend that you use the related parameter instead of this filter.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner. We recommend that you use the related parameter instead of this filter.</p> </li>
        /// <li> <p> <code>progress</code> - The progress of the snapshot, as a percentage (for example, 80%).</p> </li>
        /// <li> <p> <code>snapshot-id</code> - The snapshot ID.</p> </li>
        /// <li> <p> <code>start-time</code> - The time stamp when the snapshot was initiated.</p> </li>
        /// <li> <p> <code>status</code> - The status of the snapshot (<code>pending</code> | <code>completed</code> | <code>error</code>).</p> </li>
        /// <li> <p> <code>storage-tier</code> - The storage tier of the snapshot (<code>archive</code> | <code>standard</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>volume-id</code> - The ID of the volume the snapshot is for.</p> </li>
        /// <li> <p> <code>volume-size</code> - The size of the volume, in GiB.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>description</code> - A description of the snapshot.</p> </li>
        /// <li> <p> <code>encrypted</code> - Indicates whether the snapshot is encrypted (<code>true</code> | <code>false</code>)</p> </li>
        /// <li> <p> <code>owner-alias</code> - The owner alias, from an Amazon-maintained list (<code>amazon</code>). This is not the user-configured Amazon Web Services account alias set using the IAM console. We recommend that you use the related parameter instead of this filter.</p> </li>
        /// <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner. We recommend that you use the related parameter instead of this filter.</p> </li>
        /// <li> <p> <code>progress</code> - The progress of the snapshot, as a percentage (for example, 80%).</p> </li>
        /// <li> <p> <code>snapshot-id</code> - The snapshot ID.</p> </li>
        /// <li> <p> <code>start-time</code> - The time stamp when the snapshot was initiated.</p> </li>
        /// <li> <p> <code>status</code> - The status of the snapshot (<code>pending</code> | <code>completed</code> | <code>error</code>).</p> </li>
        /// <li> <p> <code>storage-tier</code> - The storage tier of the snapshot (<code>archive</code> | <code>standard</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>volume-id</code> - The ID of the volume the snapshot is for.</p> </li>
        /// <li> <p> <code>volume-size</code> - The size of the volume, in GiB.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of snapshot results returned by <code>DescribeSnapshots</code> in paginated output. When this parameter is used, <code>DescribeSnapshots</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>DescribeSnapshots</code> request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned. If this parameter is not used, then <code>DescribeSnapshots</code> returns all results. You cannot specify this parameter and the snapshot IDs parameter in the same request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of snapshot results returned by <code>DescribeSnapshots</code> in paginated output. When this parameter is used, <code>DescribeSnapshots</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>DescribeSnapshots</code> request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned. If this parameter is not used, then <code>DescribeSnapshots</code> returns all results. You cannot specify this parameter and the snapshot IDs parameter in the same 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 <code>NextToken</code> value returned from a previous paginated <code>DescribeSnapshots</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is <code>null</code> when there are no more results to return.</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 <code>NextToken</code> value returned from a previous paginated <code>DescribeSnapshots</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is <code>null</code> when there are no more results to return.</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
        }
        /// Appends an item to `OwnerIds`.
        ///
        /// To override the contents of this collection use [`set_owner_ids`](Self::set_owner_ids).
        ///
        /// <p>Scopes the results to snapshots with the specified owners. You can specify a combination of Amazon Web Services account IDs, <code>self</code>, and <code>amazon</code>.</p>
        pub fn owner_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.owner_ids(input.into());
            self
        }
        /// <p>Scopes the results to snapshots with the specified owners. You can specify a combination of Amazon Web Services account IDs, <code>self</code>, and <code>amazon</code>.</p>
        pub fn set_owner_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_owner_ids(input);
            self
        }
        /// Appends an item to `RestorableByUserIds`.
        ///
        /// To override the contents of this collection use [`set_restorable_by_user_ids`](Self::set_restorable_by_user_ids).
        ///
        /// <p>The IDs of the Amazon Web Services accounts that can create volumes from the snapshot.</p>
        pub fn restorable_by_user_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.restorable_by_user_ids(input.into());
            self
        }
        /// <p>The IDs of the Amazon Web Services accounts that can create volumes from the snapshot.</p>
        pub fn set_restorable_by_user_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_restorable_by_user_ids(input);
            self
        }
        /// Appends an item to `SnapshotIds`.
        ///
        /// To override the contents of this collection use [`set_snapshot_ids`](Self::set_snapshot_ids).
        ///
        /// <p>The snapshot IDs.</p>
        /// <p>Default: Describes the snapshots for which you have create volume permissions.</p>
        pub fn snapshot_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_ids(input.into());
            self
        }
        /// <p>The snapshot IDs.</p>
        /// <p>Default: Describes the snapshots for which you have create volume permissions.</p>
        pub fn set_snapshot_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_snapshot_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeSnapshotTierStatus`.
    ///
    /// <p>Describes the storage tier status of one or more Amazon EBS snapshots.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSnapshotTierStatus {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_snapshot_tier_status_input::Builder,
    }
    impl DescribeSnapshotTierStatus {
        /// Creates a new `DescribeSnapshotTierStatus`.
        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::DescribeSnapshotTierStatus,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSnapshotTierStatusError>,
        > {
            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::DescribeSnapshotTierStatusOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSnapshotTierStatusError>,
        > {
            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::DescribeSnapshotTierStatusPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeSnapshotTierStatusPaginator {
            crate::paginator::DescribeSnapshotTierStatusPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>snapshot-id</code> - The snapshot ID.</p> </li>
        /// <li> <p> <code>volume-id</code> - The ID of the volume the snapshot is for.</p> </li>
        /// <li> <p> <code>last-tiering-operation</code> - The state of the last archive or restore action. (<code>archival-in-progress</code> | <code>archival-completed</code> | <code>archival-failed</code> | <code>permanent-restore-in-progress</code> | <code>permanent-restore-completed</code> | <code>permanent-restore-failed</code> | <code>temporary-restore-in-progress</code> | <code>temporary-restore-completed</code> | <code>temporary-restore-failed</code>)</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>snapshot-id</code> - The snapshot ID.</p> </li>
        /// <li> <p> <code>volume-id</code> - The ID of the volume the snapshot is for.</p> </li>
        /// <li> <p> <code>last-tiering-operation</code> - The state of the last archive or restore action. (<code>archival-in-progress</code> | <code>archival-completed</code> | <code>archival-failed</code> | <code>permanent-restore-in-progress</code> | <code>permanent-restore-completed</code> | <code>permanent-restore-failed</code> | <code>temporary-restore-in-progress</code> | <code>temporary-restore-completed</code> | <code>temporary-restore-failed</code>)</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeSpotDatafeedSubscription`.
    ///
    /// <p>Describes the data feed for Spot Instances. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html">Spot Instance data feed</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSpotDatafeedSubscription {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_spot_datafeed_subscription_input::Builder,
    }
    impl DescribeSpotDatafeedSubscription {
        /// Creates a new `DescribeSpotDatafeedSubscription`.
        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::DescribeSpotDatafeedSubscription,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotDatafeedSubscriptionError>,
        > {
            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::DescribeSpotDatafeedSubscriptionOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotDatafeedSubscriptionError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeSpotFleetInstances`.
    ///
    /// <p>Describes the running instances for the specified Spot Fleet.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSpotFleetInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_spot_fleet_instances_input::Builder,
    }
    impl DescribeSpotFleetInstances {
        /// Creates a new `DescribeSpotFleetInstances`.
        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::DescribeSpotFleetInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotFleetInstancesError>,
        > {
            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::DescribeSpotFleetInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotFleetInstancesError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the Spot Fleet request.</p>
        pub fn spot_fleet_request_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.spot_fleet_request_id(input.into());
            self
        }
        /// <p>The ID of the Spot Fleet request.</p>
        pub fn set_spot_fleet_request_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_spot_fleet_request_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeSpotFleetRequestHistory`.
    ///
    /// <p>Describes the events for the specified Spot Fleet request during the specified time.</p>
    /// <p>Spot Fleet events are delayed by up to 30 seconds before they can be described. This ensures that you can query by the last evaluated time and not miss a recorded event. Spot Fleet events are available for 48 hours.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/fleet-monitor.html">Monitor fleet events using Amazon EventBridge</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSpotFleetRequestHistory {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_spot_fleet_request_history_input::Builder,
    }
    impl DescribeSpotFleetRequestHistory {
        /// Creates a new `DescribeSpotFleetRequestHistory`.
        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::DescribeSpotFleetRequestHistory,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotFleetRequestHistoryError>,
        > {
            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::DescribeSpotFleetRequestHistoryOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotFleetRequestHistoryError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The type of events to describe. By default, all events are described.</p>
        pub fn event_type(mut self, input: crate::model::EventType) -> Self {
            self.inner = self.inner.event_type(input);
            self
        }
        /// <p>The type of events to describe. By default, all events are described.</p>
        pub fn set_event_type(
            mut self,
            input: std::option::Option<crate::model::EventType>,
        ) -> Self {
            self.inner = self.inner.set_event_type(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the Spot Fleet request.</p>
        pub fn spot_fleet_request_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.spot_fleet_request_id(input.into());
            self
        }
        /// <p>The ID of the Spot Fleet request.</p>
        pub fn set_spot_fleet_request_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_spot_fleet_request_id(input);
            self
        }
        /// <p>The starting date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn start_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.start_time(input);
            self
        }
        /// <p>The starting date and time for the events, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn set_start_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_start_time(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeSpotFleetRequests`.
    ///
    /// <p>Describes your Spot Fleet requests.</p>
    /// <p>Spot Fleet requests are deleted 48 hours after they are canceled and their instances are terminated.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSpotFleetRequests {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_spot_fleet_requests_input::Builder,
    }
    impl DescribeSpotFleetRequests {
        /// Creates a new `DescribeSpotFleetRequests`.
        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::DescribeSpotFleetRequests,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotFleetRequestsError>,
        > {
            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::DescribeSpotFleetRequestsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotFleetRequestsError>,
        > {
            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::DescribeSpotFleetRequestsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeSpotFleetRequestsPaginator {
            crate::paginator::DescribeSpotFleetRequestsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</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
        }
        /// Appends an item to `SpotFleetRequestIds`.
        ///
        /// To override the contents of this collection use [`set_spot_fleet_request_ids`](Self::set_spot_fleet_request_ids).
        ///
        /// <p>The IDs of the Spot Fleet requests.</p>
        pub fn spot_fleet_request_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.spot_fleet_request_ids(input.into());
            self
        }
        /// <p>The IDs of the Spot Fleet requests.</p>
        pub fn set_spot_fleet_request_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_spot_fleet_request_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeSpotInstanceRequests`.
    ///
    /// <p>Describes the specified Spot Instance requests.</p>
    /// <p>You can use <code>DescribeSpotInstanceRequests</code> to find a running Spot Instance by examining the response. If the status of the Spot Instance is <code>fulfilled</code>, the instance ID appears in the response and contains the identifier of the instance. Alternatively, you can use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances">DescribeInstances</a> with a filter to look for instances where the instance lifecycle is <code>spot</code>.</p>
    /// <p>We recommend that you set <code>MaxResults</code> to a value between 5 and 1000 to limit the number of results returned. This paginates the output, which makes the list more manageable and returns the results faster. If the list of results exceeds your <code>MaxResults</code> value, then that number of results is returned along with a <code>NextToken</code> value that can be passed to a subsequent <code>DescribeSpotInstanceRequests</code> request to retrieve the remaining results.</p>
    /// <p>Spot Instance requests are deleted four hours after they are canceled and their instances are terminated.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSpotInstanceRequests {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_spot_instance_requests_input::Builder,
    }
    impl DescribeSpotInstanceRequests {
        /// Creates a new `DescribeSpotInstanceRequests`.
        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::DescribeSpotInstanceRequests,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotInstanceRequestsError>,
        > {
            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::DescribeSpotInstanceRequestsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotInstanceRequestsError>,
        > {
            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::DescribeSpotInstanceRequestsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeSpotInstanceRequestsPaginator {
            crate::paginator::DescribeSpotInstanceRequestsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone-group</code> - The Availability Zone group.</p> </li>
        /// <li> <p> <code>create-time</code> - The time stamp when the Spot Instance request was created.</p> </li>
        /// <li> <p> <code>fault-code</code> - The fault code related to the request.</p> </li>
        /// <li> <p> <code>fault-message</code> - The fault message related to the request.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance that fulfilled the request.</p> </li>
        /// <li> <p> <code>launch-group</code> - The Spot Instance launch group.</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.delete-on-termination</code> - Indicates whether the EBS volume is deleted on instance termination.</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.device-name</code> - The device name for the volume in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.snapshot-id</code> - The ID of the snapshot for the EBS volume.</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.volume-size</code> - The size of the EBS volume, in GiB.</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.volume-type</code> - The type of EBS volume: <code>gp2</code> for General Purpose SSD, <code>io1</code> or <code>io2</code> for Provisioned IOPS SSD, <code>st1</code> for Throughput Optimized HDD, <code>sc1</code>for Cold HDD, or <code>standard</code> for Magnetic.</p> </li>
        /// <li> <p> <code>launch.group-id</code> - The ID of the security group for the instance.</p> </li>
        /// <li> <p> <code>launch.group-name</code> - The name of the security group for the instance.</p> </li>
        /// <li> <p> <code>launch.image-id</code> - The ID of the AMI.</p> </li>
        /// <li> <p> <code>launch.instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li>
        /// <li> <p> <code>launch.kernel-id</code> - The kernel ID.</p> </li>
        /// <li> <p> <code>launch.key-name</code> - The name of the key pair the instance launched with.</p> </li>
        /// <li> <p> <code>launch.monitoring-enabled</code> - Whether detailed monitoring is enabled for the Spot Instance.</p> </li>
        /// <li> <p> <code>launch.ramdisk-id</code> - The RAM disk ID.</p> </li>
        /// <li> <p> <code>launched-availability-zone</code> - The Availability Zone in which the request is launched.</p> </li>
        /// <li> <p> <code>network-interface.addresses.primary</code> - Indicates whether the IP address is the primary private IP address.</p> </li>
        /// <li> <p> <code>network-interface.delete-on-termination</code> - Indicates whether the network interface is deleted when the instance is terminated.</p> </li>
        /// <li> <p> <code>network-interface.description</code> - A description of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.device-index</code> - The index of the device for the network interface attachment on the instance.</p> </li>
        /// <li> <p> <code>network-interface.group-id</code> - The ID of the security group associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.private-ip-address</code> - The primary private IP address of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the instance.</p> </li>
        /// <li> <p> <code>product-description</code> - The product description associated with the instance (<code>Linux/UNIX</code> | <code>Windows</code>).</p> </li>
        /// <li> <p> <code>spot-instance-request-id</code> - The Spot Instance request ID.</p> </li>
        /// <li> <p> <code>spot-price</code> - The maximum hourly price for any Spot Instance launched to fulfill the request.</p> </li>
        /// <li> <p> <code>state</code> - The state of the Spot Instance request (<code>open</code> | <code>active</code> | <code>closed</code> | <code>cancelled</code> | <code>failed</code>). Spot request status information can help you track your Amazon EC2 Spot Instance requests. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html">Spot request status</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> </li>
        /// <li> <p> <code>status-code</code> - The short code describing the most recent evaluation of your Spot Instance request.</p> </li>
        /// <li> <p> <code>status-message</code> - The message explaining the status of the Spot Instance request.</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>type</code> - The type of Spot Instance request (<code>one-time</code> | <code>persistent</code>).</p> </li>
        /// <li> <p> <code>valid-from</code> - The start date of the request.</p> </li>
        /// <li> <p> <code>valid-until</code> - The end date of the request.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone-group</code> - The Availability Zone group.</p> </li>
        /// <li> <p> <code>create-time</code> - The time stamp when the Spot Instance request was created.</p> </li>
        /// <li> <p> <code>fault-code</code> - The fault code related to the request.</p> </li>
        /// <li> <p> <code>fault-message</code> - The fault message related to the request.</p> </li>
        /// <li> <p> <code>instance-id</code> - The ID of the instance that fulfilled the request.</p> </li>
        /// <li> <p> <code>launch-group</code> - The Spot Instance launch group.</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.delete-on-termination</code> - Indicates whether the EBS volume is deleted on instance termination.</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.device-name</code> - The device name for the volume in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.snapshot-id</code> - The ID of the snapshot for the EBS volume.</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.volume-size</code> - The size of the EBS volume, in GiB.</p> </li>
        /// <li> <p> <code>launch.block-device-mapping.volume-type</code> - The type of EBS volume: <code>gp2</code> for General Purpose SSD, <code>io1</code> or <code>io2</code> for Provisioned IOPS SSD, <code>st1</code> for Throughput Optimized HDD, <code>sc1</code>for Cold HDD, or <code>standard</code> for Magnetic.</p> </li>
        /// <li> <p> <code>launch.group-id</code> - The ID of the security group for the instance.</p> </li>
        /// <li> <p> <code>launch.group-name</code> - The name of the security group for the instance.</p> </li>
        /// <li> <p> <code>launch.image-id</code> - The ID of the AMI.</p> </li>
        /// <li> <p> <code>launch.instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li>
        /// <li> <p> <code>launch.kernel-id</code> - The kernel ID.</p> </li>
        /// <li> <p> <code>launch.key-name</code> - The name of the key pair the instance launched with.</p> </li>
        /// <li> <p> <code>launch.monitoring-enabled</code> - Whether detailed monitoring is enabled for the Spot Instance.</p> </li>
        /// <li> <p> <code>launch.ramdisk-id</code> - The RAM disk ID.</p> </li>
        /// <li> <p> <code>launched-availability-zone</code> - The Availability Zone in which the request is launched.</p> </li>
        /// <li> <p> <code>network-interface.addresses.primary</code> - Indicates whether the IP address is the primary private IP address.</p> </li>
        /// <li> <p> <code>network-interface.delete-on-termination</code> - Indicates whether the network interface is deleted when the instance is terminated.</p> </li>
        /// <li> <p> <code>network-interface.description</code> - A description of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.device-index</code> - The index of the device for the network interface attachment on the instance.</p> </li>
        /// <li> <p> <code>network-interface.group-id</code> - The ID of the security group associated with the network interface.</p> </li>
        /// <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.private-ip-address</code> - The primary private IP address of the network interface.</p> </li>
        /// <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the instance.</p> </li>
        /// <li> <p> <code>product-description</code> - The product description associated with the instance (<code>Linux/UNIX</code> | <code>Windows</code>).</p> </li>
        /// <li> <p> <code>spot-instance-request-id</code> - The Spot Instance request ID.</p> </li>
        /// <li> <p> <code>spot-price</code> - The maximum hourly price for any Spot Instance launched to fulfill the request.</p> </li>
        /// <li> <p> <code>state</code> - The state of the Spot Instance request (<code>open</code> | <code>active</code> | <code>closed</code> | <code>cancelled</code> | <code>failed</code>). Spot request status information can help you track your Amazon EC2 Spot Instance requests. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html">Spot request status</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> </li>
        /// <li> <p> <code>status-code</code> - The short code describing the most recent evaluation of your Spot Instance request.</p> </li>
        /// <li> <p> <code>status-message</code> - The message explaining the status of the Spot Instance request.</p> </li>
        /// <li> <p> <code>tag:
        /// <key></key></code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>type</code> - The type of Spot Instance request (<code>one-time</code> | <code>persistent</code>).</p> </li>
        /// <li> <p> <code>valid-from</code> - The start date of the request.</p> </li>
        /// <li> <p> <code>valid-until</code> - The end date of the request.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `SpotInstanceRequestIds`.
        ///
        /// To override the contents of this collection use [`set_spot_instance_request_ids`](Self::set_spot_instance_request_ids).
        ///
        /// <p>One or more Spot Instance request IDs.</p>
        pub fn spot_instance_request_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.spot_instance_request_ids(input.into());
            self
        }
        /// <p>One or more Spot Instance request IDs.</p>
        pub fn set_spot_instance_request_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_spot_instance_request_ids(input);
            self
        }
        /// <p>The token to request the next set of results. This value is <code>null</code> when there are no more results to return.</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 to request the next set of results. This value is <code>null</code> when there are no more results to return.</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 a single call. Specify a value between 5 and 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. Specify a value between 5 and 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 `DescribeSpotPriceHistory`.
    ///
    /// <p>Describes the Spot price history. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html">Spot Instance pricing history</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>
    /// <p>When you specify a start and end time, the operation returns the prices of the instance types within that time range. It also returns the last price change before the start time, which is the effective price as of the start time.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSpotPriceHistory {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_spot_price_history_input::Builder,
    }
    impl DescribeSpotPriceHistory {
        /// Creates a new `DescribeSpotPriceHistory`.
        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::DescribeSpotPriceHistory,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotPriceHistoryError>,
        > {
            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::DescribeSpotPriceHistoryOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSpotPriceHistoryError>,
        > {
            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::DescribeSpotPriceHistoryPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeSpotPriceHistoryPaginator {
            crate::paginator::DescribeSpotPriceHistoryPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone for which prices should be returned.</p> </li>
        /// <li> <p> <code>instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li>
        /// <li> <p> <code>product-description</code> - The product description for the Spot price (<code>Linux/UNIX</code> | <code>Red Hat Enterprise Linux</code> | <code>SUSE Linux</code> | <code>Windows</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Windows (Amazon VPC)</code>).</p> </li>
        /// <li> <p> <code>spot-price</code> - The Spot price. The value must match exactly (or use wildcards; greater than or less than comparison is not supported).</p> </li>
        /// <li> <p> <code>timestamp</code> - The time stamp of the Spot price history, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). You can use wildcards (* and ?). Greater than or less than comparison is not supported.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone for which prices should be returned.</p> </li>
        /// <li> <p> <code>instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li>
        /// <li> <p> <code>product-description</code> - The product description for the Spot price (<code>Linux/UNIX</code> | <code>Red Hat Enterprise Linux</code> | <code>SUSE Linux</code> | <code>Windows</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Windows (Amazon VPC)</code>).</p> </li>
        /// <li> <p> <code>spot-price</code> - The Spot price. The value must match exactly (or use wildcards; greater than or less than comparison is not supported).</p> </li>
        /// <li> <p> <code>timestamp</code> - The time stamp of the Spot price history, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z). You can use wildcards (* and ?). Greater than or less than comparison is not supported.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Filters the results by the specified Availability Zone.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>Filters the results by the specified Availability Zone.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The date and time, up to the current date, from which to stop retrieving the price history data, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn end_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.end_time(input);
            self
        }
        /// <p>The date and time, up to the current date, from which to stop retrieving the price history data, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn set_end_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_end_time(input);
            self
        }
        /// Appends an item to `InstanceTypes`.
        ///
        /// To override the contents of this collection use [`set_instance_types`](Self::set_instance_types).
        ///
        /// <p>Filters the results by the specified instance types.</p>
        pub fn instance_types(mut self, input: crate::model::InstanceType) -> Self {
            self.inner = self.inner.instance_types(input);
            self
        }
        /// <p>Filters the results by the specified instance types.</p>
        pub fn set_instance_types(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::InstanceType>>,
        ) -> Self {
            self.inner = self.inner.set_instance_types(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</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
        }
        /// Appends an item to `ProductDescriptions`.
        ///
        /// To override the contents of this collection use [`set_product_descriptions`](Self::set_product_descriptions).
        ///
        /// <p>Filters the results by the specified basic product descriptions.</p>
        pub fn product_descriptions(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.product_descriptions(input.into());
            self
        }
        /// <p>Filters the results by the specified basic product descriptions.</p>
        pub fn set_product_descriptions(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_product_descriptions(input);
            self
        }
        /// <p>The date and time, up to the past 90 days, from which to start retrieving the price history data, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn start_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.start_time(input);
            self
        }
        /// <p>The date and time, up to the past 90 days, from which to start retrieving the price history data, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn set_start_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_start_time(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeStaleSecurityGroups`.
    ///
    /// <p>[VPC only] Describes the stale security group rules for security groups in a specified VPC. Rules are stale when they reference a deleted security group in the same VPC or in a peer VPC, or if they reference a security group in a peer VPC for which the VPC peering connection has been deleted.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeStaleSecurityGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_stale_security_groups_input::Builder,
    }
    impl DescribeStaleSecurityGroups {
        /// Creates a new `DescribeStaleSecurityGroups`.
        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::DescribeStaleSecurityGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeStaleSecurityGroupsError>,
        > {
            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::DescribeStaleSecurityGroupsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeStaleSecurityGroupsError>,
        > {
            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::DescribeStaleSecurityGroupsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeStaleSecurityGroupsPaginator {
            crate::paginator::DescribeStaleSecurityGroupsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</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 token for the next set of items to return. (You received this token from a prior 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>The token for the next set of items to return. (You received this token from a prior 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 ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeStoreImageTasks`.
    ///
    /// <p>Describes the progress of the AMI store tasks. You can describe the store tasks for specified AMIs. If you don't specify the AMIs, you get a paginated list of store tasks from the last 31 days.</p>
    /// <p>For each AMI task, the response indicates if the task is <code>InProgress</code>, <code>Completed</code>, or <code>Failed</code>. For tasks <code>InProgress</code>, the response shows the estimated progress as a percentage.</p>
    /// <p>Tasks are listed in reverse chronological order. Currently, only tasks from the past 31 days can be viewed.</p>
    /// <p>To use this API, you must have the required permissions. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions">Permissions for storing and restoring AMIs using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html">Store and restore an AMI using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeStoreImageTasks {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_store_image_tasks_input::Builder,
    }
    impl DescribeStoreImageTasks {
        /// Creates a new `DescribeStoreImageTasks`.
        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::DescribeStoreImageTasks,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeStoreImageTasksError>,
        > {
            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::DescribeStoreImageTasksOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeStoreImageTasksError>,
        > {
            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::DescribeStoreImageTasksPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeStoreImageTasksPaginator {
            crate::paginator::DescribeStoreImageTasksPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `ImageIds`.
        ///
        /// To override the contents of this collection use [`set_image_ids`](Self::set_image_ids).
        ///
        /// <p>The AMI IDs for which to show progress. Up to 20 AMI IDs can be included in a request.</p>
        pub fn image_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_ids(input.into());
            self
        }
        /// <p>The AMI IDs for which to show progress. Up to 20 AMI IDs can be included in a request.</p>
        pub fn set_image_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_image_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>task-state</code> - Returns tasks in a certain state (<code>InProgress</code> | <code>Completed</code> | <code>Failed</code>)</p> </li>
        /// <li> <p> <code>bucket</code> - Returns task information for tasks that targeted a specific bucket. For the filter value, specify the bucket name.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>task-state</code> - Returns tasks in a certain state (<code>InProgress</code> | <code>Completed</code> | <code>Failed</code>)</p> </li>
        /// <li> <p> <code>bucket</code> - Returns task information for tasks that targeted a specific bucket. For the filter value, specify the bucket name.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200. You cannot specify this parameter and the <code>ImageIDs</code> parameter in the same call.</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 a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 1 and 200. You cannot specify this parameter and the <code>ImageIDs</code> parameter in the same call.</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 `DescribeSubnets`.
    ///
    /// <p>Describes one or more of your subnets.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html">Your VPC and subnets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeSubnets {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_subnets_input::Builder,
    }
    impl DescribeSubnets {
        /// Creates a new `DescribeSubnets`.
        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::DescribeSubnets,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeSubnetsError>,
        > {
            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::DescribeSubnetsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeSubnetsError>,
        > {
            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::DescribeSubnetsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeSubnetsPaginator {
            crate::paginator::DescribeSubnetsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone for the subnet. You can also use <code>availabilityZone</code> as the filter name.</p> </li>
        /// <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone for the subnet. You can also use <code>availabilityZoneId</code> as the filter name.</p> </li>
        /// <li> <p> <code>available-ip-address-count</code> - The number of IPv4 addresses in the subnet that are available.</p> </li>
        /// <li> <p> <code>cidr-block</code> - The IPv4 CIDR block of the subnet. The CIDR block you specify must exactly match the subnet's CIDR block for information to be returned for the subnet. You can also use <code>cidr</code> or <code>cidrBlock</code> as the filter names.</p> </li>
        /// <li> <p> <code>customer-owned-ipv4-pool</code> - The customer-owned IPv4 address pool associated with the subnet.</p> </li>
        /// <li> <p> <code>default-for-az</code> - Indicates whether this is the default subnet for the Availability Zone (<code>true</code> | <code>false</code>). You can also use <code>defaultForAz</code> as the filter name.</p> </li>
        /// <li> <p> <code>enable-dns64</code> - Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this subnet should return synthetic IPv6 addresses for IPv4-only destinations.</p> </li>
        /// <li> <p> <code>enable-lni-at-device-index</code> - Indicates the device position for local network interfaces in this subnet. For example, <code>1</code> indicates local network interfaces in this subnet are the secondary network interface (eth1). </p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.ipv6-cidr-block</code> - An IPv6 CIDR block associated with the subnet.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.association-id</code> - An association ID for an IPv6 CIDR block associated with the subnet.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.state</code> - The state of an IPv6 CIDR block associated with the subnet.</p> </li>
        /// <li> <p> <code>ipv6-native</code> - Indicates whether this is an IPv6 only subnet (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>map-customer-owned-ip-on-launch</code> - Indicates whether a network interface created in this subnet (including a network interface created by <code>RunInstances</code>) receives a customer-owned IPv4 address.</p> </li>
        /// <li> <p> <code>map-public-ip-on-launch</code> - Indicates whether instances launched in this subnet receive a public IPv4 address.</p> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the subnet.</p> </li>
        /// <li> <p> <code>private-dns-name-options-on-launch.hostname-type</code> - The type of hostname to assign to instances in the subnet at launch. For IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name can be based on the instance IPv4 address (ip-name) or the instance ID (resource-name). For IPv6 only subnets, an instance DNS name must be based on the instance ID (resource-name).</p> </li>
        /// <li> <p> <code>private-dns-name-options-on-launch.enable-resource-name-dns-a-record</code> - Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p> </li>
        /// <li> <p> <code>private-dns-name-options-on-launch.enable-resource-name-dns-aaaa-record</code> - Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p> </li>
        /// <li> <p> <code>state</code> - The state of the subnet (<code>pending</code> | <code>available</code>).</p> </li>
        /// <li> <p> <code>subnet-arn</code> - The Amazon Resource Name (ARN) of the subnet.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC for the subnet.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone for the subnet. You can also use <code>availabilityZone</code> as the filter name.</p> </li>
        /// <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone for the subnet. You can also use <code>availabilityZoneId</code> as the filter name.</p> </li>
        /// <li> <p> <code>available-ip-address-count</code> - The number of IPv4 addresses in the subnet that are available.</p> </li>
        /// <li> <p> <code>cidr-block</code> - The IPv4 CIDR block of the subnet. The CIDR block you specify must exactly match the subnet's CIDR block for information to be returned for the subnet. You can also use <code>cidr</code> or <code>cidrBlock</code> as the filter names.</p> </li>
        /// <li> <p> <code>customer-owned-ipv4-pool</code> - The customer-owned IPv4 address pool associated with the subnet.</p> </li>
        /// <li> <p> <code>default-for-az</code> - Indicates whether this is the default subnet for the Availability Zone (<code>true</code> | <code>false</code>). You can also use <code>defaultForAz</code> as the filter name.</p> </li>
        /// <li> <p> <code>enable-dns64</code> - Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this subnet should return synthetic IPv6 addresses for IPv4-only destinations.</p> </li>
        /// <li> <p> <code>enable-lni-at-device-index</code> - Indicates the device position for local network interfaces in this subnet. For example, <code>1</code> indicates local network interfaces in this subnet are the secondary network interface (eth1). </p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.ipv6-cidr-block</code> - An IPv6 CIDR block associated with the subnet.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.association-id</code> - An association ID for an IPv6 CIDR block associated with the subnet.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.state</code> - The state of an IPv6 CIDR block associated with the subnet.</p> </li>
        /// <li> <p> <code>ipv6-native</code> - Indicates whether this is an IPv6 only subnet (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>map-customer-owned-ip-on-launch</code> - Indicates whether a network interface created in this subnet (including a network interface created by <code>RunInstances</code>) receives a customer-owned IPv4 address.</p> </li>
        /// <li> <p> <code>map-public-ip-on-launch</code> - Indicates whether instances launched in this subnet receive a public IPv4 address.</p> </li>
        /// <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the subnet.</p> </li>
        /// <li> <p> <code>private-dns-name-options-on-launch.hostname-type</code> - The type of hostname to assign to instances in the subnet at launch. For IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name can be based on the instance IPv4 address (ip-name) or the instance ID (resource-name). For IPv6 only subnets, an instance DNS name must be based on the instance ID (resource-name).</p> </li>
        /// <li> <p> <code>private-dns-name-options-on-launch.enable-resource-name-dns-a-record</code> - Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p> </li>
        /// <li> <p> <code>private-dns-name-options-on-launch.enable-resource-name-dns-aaaa-record</code> - Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p> </li>
        /// <li> <p> <code>state</code> - The state of the subnet (<code>pending</code> | <code>available</code>).</p> </li>
        /// <li> <p> <code>subnet-arn</code> - The Amazon Resource Name (ARN) of the subnet.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC for the subnet.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `SubnetIds`.
        ///
        /// To override the contents of this collection use [`set_subnet_ids`](Self::set_subnet_ids).
        ///
        /// <p>One or more subnet IDs.</p>
        /// <p>Default: Describes all your subnets.</p>
        pub fn subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_ids(input.into());
            self
        }
        /// <p>One or more subnet IDs.</p>
        /// <p>Default: Describes all your subnets.</p>
        pub fn set_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_subnet_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeTags`.
    ///
    /// <p>Describes the specified tags for your EC2 resources.</p>
    /// <p>For more information about tags, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html">Tag your Amazon EC2 resources</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTags {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_tags_input::Builder,
    }
    impl DescribeTags {
        /// Creates a new `DescribeTags`.
        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::DescribeTags,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeTagsError>,
        > {
            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::DescribeTagsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeTagsError>,
        > {
            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::DescribeTagsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeTagsPaginator {
            crate::paginator::DescribeTagsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>key</code> - The tag key.</p> </li>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The resource type (<code>customer-gateway</code> | <code>dedicated-host</code> | <code>dhcp-options</code> | <code>elastic-ip</code> | <code>fleet</code> | <code>fpga-image</code> | <code>host-reservation</code> | <code>image</code> | <code>instance</code> | <code>internet-gateway</code> | <code>key-pair</code> | <code>launch-template</code> | <code>natgateway</code> | <code>network-acl</code> | <code>network-interface</code> | <code>placement-group</code> | <code>reserved-instances</code> | <code>route-table</code> | <code>security-group</code> | <code>snapshot</code> | <code>spot-instances-request</code> | <code>subnet</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-endpoint</code> | <code>vpc-endpoint-service</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of the tag. For example, specify "tag:Owner" for the filter name and "TeamA" for the filter value to find resources with the tag "Owner=TeamA".
        /// </key></p> </li>
        /// <li> <p> <code>value</code> - The tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>key</code> - The tag key.</p> </li>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The resource type (<code>customer-gateway</code> | <code>dedicated-host</code> | <code>dhcp-options</code> | <code>elastic-ip</code> | <code>fleet</code> | <code>fpga-image</code> | <code>host-reservation</code> | <code>image</code> | <code>instance</code> | <code>internet-gateway</code> | <code>key-pair</code> | <code>launch-template</code> | <code>natgateway</code> | <code>network-acl</code> | <code>network-interface</code> | <code>placement-group</code> | <code>reserved-instances</code> | <code>route-table</code> | <code>security-group</code> | <code>snapshot</code> | <code>spot-instances-request</code> | <code>subnet</code> | <code>volume</code> | <code>vpc</code> | <code>vpc-endpoint</code> | <code>vpc-endpoint-service</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of the tag. For example, specify "tag:Owner" for the filter name and "TeamA" for the filter value to find resources with the tag "Owner=TeamA".
        /// </key></p> </li>
        /// <li> <p> <code>value</code> - The tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. This value can be between 5 and 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 a single call. This value can be between 5 and 1000. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</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 token to retrieve the next page of results.</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 to retrieve the next page of results.</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 `DescribeTrafficMirrorFilters`.
    ///
    /// <p>Describes one or more Traffic Mirror filters.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTrafficMirrorFilters {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_traffic_mirror_filters_input::Builder,
    }
    impl DescribeTrafficMirrorFilters {
        /// Creates a new `DescribeTrafficMirrorFilters`.
        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::DescribeTrafficMirrorFilters,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeTrafficMirrorFiltersError>,
        > {
            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::DescribeTrafficMirrorFiltersOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeTrafficMirrorFiltersError>,
        > {
            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::DescribeTrafficMirrorFiltersPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeTrafficMirrorFiltersPaginator {
            crate::paginator::DescribeTrafficMirrorFiltersPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `TrafficMirrorFilterIds`.
        ///
        /// To override the contents of this collection use [`set_traffic_mirror_filter_ids`](Self::set_traffic_mirror_filter_ids).
        ///
        /// <p>The ID of the Traffic Mirror filter.</p>
        pub fn traffic_mirror_filter_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_filter_ids(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror filter.</p>
        pub fn set_traffic_mirror_filter_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_filter_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>description</code>: The Traffic Mirror filter description.</p> </li>
        /// <li> <p> <code>traffic-mirror-filter-id</code>: The ID of the Traffic Mirror filter.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>description</code>: The Traffic Mirror filter description.</p> </li>
        /// <li> <p> <code>traffic-mirror-filter-id</code>: The ID of the Traffic Mirror filter.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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 `DescribeTrafficMirrorSessions`.
    ///
    /// <p>Describes one or more Traffic Mirror sessions. By default, all Traffic Mirror sessions are described. Alternatively, you can filter the results.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTrafficMirrorSessions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_traffic_mirror_sessions_input::Builder,
    }
    impl DescribeTrafficMirrorSessions {
        /// Creates a new `DescribeTrafficMirrorSessions`.
        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::DescribeTrafficMirrorSessions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeTrafficMirrorSessionsError>,
        > {
            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::DescribeTrafficMirrorSessionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeTrafficMirrorSessionsError>,
        > {
            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::DescribeTrafficMirrorSessionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeTrafficMirrorSessionsPaginator {
            crate::paginator::DescribeTrafficMirrorSessionsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `TrafficMirrorSessionIds`.
        ///
        /// To override the contents of this collection use [`set_traffic_mirror_session_ids`](Self::set_traffic_mirror_session_ids).
        ///
        /// <p>The ID of the Traffic Mirror session.</p>
        pub fn traffic_mirror_session_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_session_ids(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror session.</p>
        pub fn set_traffic_mirror_session_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_session_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>description</code>: The Traffic Mirror session description.</p> </li>
        /// <li> <p> <code>network-interface-id</code>: The ID of the Traffic Mirror session network interface.</p> </li>
        /// <li> <p> <code>owner-id</code>: The ID of the account that owns the Traffic Mirror session.</p> </li>
        /// <li> <p> <code>packet-length</code>: The assigned number of packets to mirror. </p> </li>
        /// <li> <p> <code>session-number</code>: The assigned session number. </p> </li>
        /// <li> <p> <code>traffic-mirror-filter-id</code>: The ID of the Traffic Mirror filter.</p> </li>
        /// <li> <p> <code>traffic-mirror-session-id</code>: The ID of the Traffic Mirror session.</p> </li>
        /// <li> <p> <code>traffic-mirror-target-id</code>: The ID of the Traffic Mirror target.</p> </li>
        /// <li> <p> <code>virtual-network-id</code>: The virtual network ID of the Traffic Mirror session.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>description</code>: The Traffic Mirror session description.</p> </li>
        /// <li> <p> <code>network-interface-id</code>: The ID of the Traffic Mirror session network interface.</p> </li>
        /// <li> <p> <code>owner-id</code>: The ID of the account that owns the Traffic Mirror session.</p> </li>
        /// <li> <p> <code>packet-length</code>: The assigned number of packets to mirror. </p> </li>
        /// <li> <p> <code>session-number</code>: The assigned session number. </p> </li>
        /// <li> <p> <code>traffic-mirror-filter-id</code>: The ID of the Traffic Mirror filter.</p> </li>
        /// <li> <p> <code>traffic-mirror-session-id</code>: The ID of the Traffic Mirror session.</p> </li>
        /// <li> <p> <code>traffic-mirror-target-id</code>: The ID of the Traffic Mirror target.</p> </li>
        /// <li> <p> <code>virtual-network-id</code>: The virtual network ID of the Traffic Mirror session.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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 `DescribeTrafficMirrorTargets`.
    ///
    /// <p>Information about one or more Traffic Mirror targets.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTrafficMirrorTargets {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_traffic_mirror_targets_input::Builder,
    }
    impl DescribeTrafficMirrorTargets {
        /// Creates a new `DescribeTrafficMirrorTargets`.
        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::DescribeTrafficMirrorTargets,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeTrafficMirrorTargetsError>,
        > {
            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::DescribeTrafficMirrorTargetsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeTrafficMirrorTargetsError>,
        > {
            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::DescribeTrafficMirrorTargetsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeTrafficMirrorTargetsPaginator {
            crate::paginator::DescribeTrafficMirrorTargetsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `TrafficMirrorTargetIds`.
        ///
        /// To override the contents of this collection use [`set_traffic_mirror_target_ids`](Self::set_traffic_mirror_target_ids).
        ///
        /// <p>The ID of the Traffic Mirror targets.</p>
        pub fn traffic_mirror_target_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_target_ids(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror targets.</p>
        pub fn set_traffic_mirror_target_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_target_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>description</code>: The Traffic Mirror target description.</p> </li>
        /// <li> <p> <code>network-interface-id</code>: The ID of the Traffic Mirror session network interface.</p> </li>
        /// <li> <p> <code>network-load-balancer-arn</code>: The Amazon Resource Name (ARN) of the Network Load Balancer that is associated with the session.</p> </li>
        /// <li> <p> <code>owner-id</code>: The ID of the account that owns the Traffic Mirror session.</p> </li>
        /// <li> <p> <code>traffic-mirror-target-id</code>: The ID of the Traffic Mirror target.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>description</code>: The Traffic Mirror target description.</p> </li>
        /// <li> <p> <code>network-interface-id</code>: The ID of the Traffic Mirror session network interface.</p> </li>
        /// <li> <p> <code>network-load-balancer-arn</code>: The Amazon Resource Name (ARN) of the Network Load Balancer that is associated with the session.</p> </li>
        /// <li> <p> <code>owner-id</code>: The ID of the account that owns the Traffic Mirror session.</p> </li>
        /// <li> <p> <code>traffic-mirror-target-id</code>: The ID of the Traffic Mirror target.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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 `DescribeTransitGatewayAttachments`.
    ///
    /// <p>Describes one or more attachments between resources and transit gateways. By default, all attachments are described. Alternatively, you can filter the results by attachment ID, attachment state, resource ID, or resource owner.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayAttachments {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_attachments_input::Builder,
    }
    impl DescribeTransitGatewayAttachments {
        /// Creates a new `DescribeTransitGatewayAttachments`.
        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::DescribeTransitGatewayAttachments,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeTransitGatewayAttachmentsError>,
        > {
            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::DescribeTransitGatewayAttachmentsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeTransitGatewayAttachmentsError>,
        > {
            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::DescribeTransitGatewayAttachmentsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTransitGatewayAttachmentsPaginator {
            crate::paginator::DescribeTransitGatewayAttachmentsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `TransitGatewayAttachmentIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_attachment_ids`](Self::set_transit_gateway_attachment_ids).
        ///
        /// <p>The IDs of the attachments.</p>
        pub fn transit_gateway_attachment_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_ids(input.into());
            self
        }
        /// <p>The IDs of the attachments.</p>
        pub fn set_transit_gateway_attachment_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>association.state</code> - The state of the association (<code>associating</code> | <code>associated</code> | <code>disassociating</code>).</p> </li>
        /// <li> <p> <code>association.transit-gateway-route-table-id</code> - The ID of the route table for the transit gateway.</p> </li>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-owner-id</code> - The ID of the Amazon Web Services account that owns the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>
        /// <li> <p> <code>state</code> - The state of the attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>transit-gateway-owner-id</code> - The ID of the Amazon Web Services account that owns the transit gateway.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>association.state</code> - The state of the association (<code>associating</code> | <code>associated</code> | <code>disassociating</code>).</p> </li>
        /// <li> <p> <code>association.transit-gateway-route-table-id</code> - The ID of the route table for the transit gateway.</p> </li>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-owner-id</code> - The ID of the Amazon Web Services account that owns the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>
        /// <li> <p> <code>state</code> - The state of the attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>transit-gateway-owner-id</code> - The ID of the Amazon Web Services account that owns the transit gateway.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGatewayConnectPeers`.
    ///
    /// <p>Describes one or more Connect peers.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayConnectPeers {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_connect_peers_input::Builder,
    }
    impl DescribeTransitGatewayConnectPeers {
        /// Creates a new `DescribeTransitGatewayConnectPeers`.
        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::DescribeTransitGatewayConnectPeers,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayConnectPeersError,
            >,
        > {
            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::DescribeTransitGatewayConnectPeersOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayConnectPeersError,
            >,
        > {
            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::DescribeTransitGatewayConnectPeersPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTransitGatewayConnectPeersPaginator {
            crate::paginator::DescribeTransitGatewayConnectPeersPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `TransitGatewayConnectPeerIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_connect_peer_ids`](Self::set_transit_gateway_connect_peer_ids).
        ///
        /// <p>The IDs of the Connect peers.</p>
        pub fn transit_gateway_connect_peer_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_connect_peer_ids(input.into());
            self
        }
        /// <p>The IDs of the Connect peers.</p>
        pub fn set_transit_gateway_connect_peer_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_connect_peer_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>state</code> - The state of the Connect peer (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// <li> <p> <code>transit-gateway-connect-peer-id</code> - The ID of the Connect peer.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>state</code> - The state of the Connect peer (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// <li> <p> <code>transit-gateway-connect-peer-id</code> - The ID of the Connect peer.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGatewayConnects`.
    ///
    /// <p>Describes one or more Connect attachments.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayConnects {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_connects_input::Builder,
    }
    impl DescribeTransitGatewayConnects {
        /// Creates a new `DescribeTransitGatewayConnects`.
        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::DescribeTransitGatewayConnects,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeTransitGatewayConnectsError>,
        > {
            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::DescribeTransitGatewayConnectsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeTransitGatewayConnectsError>,
        > {
            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::DescribeTransitGatewayConnectsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeTransitGatewayConnectsPaginator {
            crate::paginator::DescribeTransitGatewayConnectsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `TransitGatewayAttachmentIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_attachment_ids`](Self::set_transit_gateway_attachment_ids).
        ///
        /// <p>The IDs of the attachments.</p>
        pub fn transit_gateway_attachment_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_ids(input.into());
            self
        }
        /// <p>The IDs of the attachments.</p>
        pub fn set_transit_gateway_attachment_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>options.protocol</code> - The tunnel protocol (<code>gre</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the attachment (<code>initiating</code> | <code>initiatingRequest</code> | <code>pendingAcceptance</code> | <code>rollingBack</code> | <code>pending</code> | <code>available</code> | <code>modifying</code> | <code>deleting</code> | <code>deleted</code> | <code>failed</code> | <code>rejected</code> | <code>rejecting</code> | <code>failing</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the Connect attachment.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>transport-transit-gateway-attachment-id</code> - The ID of the transit gateway attachment from which the Connect attachment was created.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>options.protocol</code> - The tunnel protocol (<code>gre</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the attachment (<code>initiating</code> | <code>initiatingRequest</code> | <code>pendingAcceptance</code> | <code>rollingBack</code> | <code>pending</code> | <code>available</code> | <code>modifying</code> | <code>deleting</code> | <code>deleted</code> | <code>failed</code> | <code>rejected</code> | <code>rejecting</code> | <code>failing</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the Connect attachment.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>transport-transit-gateway-attachment-id</code> - The ID of the transit gateway attachment from which the Connect attachment was created.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGatewayMulticastDomains`.
    ///
    /// <p>Describes one or more transit gateway multicast domains.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayMulticastDomains {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_multicast_domains_input::Builder,
    }
    impl DescribeTransitGatewayMulticastDomains {
        /// Creates a new `DescribeTransitGatewayMulticastDomains`.
        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::DescribeTransitGatewayMulticastDomains,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayMulticastDomainsError,
            >,
        > {
            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::DescribeTransitGatewayMulticastDomainsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayMulticastDomainsError,
            >,
        > {
            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::DescribeTransitGatewayMulticastDomainsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTransitGatewayMulticastDomainsPaginator {
            crate::paginator::DescribeTransitGatewayMulticastDomainsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `TransitGatewayMulticastDomainIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_multicast_domain_ids`](Self::set_transit_gateway_multicast_domain_ids).
        ///
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .transit_gateway_multicast_domain_ids(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>state</code> - The state of the transit gateway multicast domain. Valid values are <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>transit-gateway-multicast-domain-id</code> - The ID of the transit gateway multicast domain.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>state</code> - The state of the transit gateway multicast domain. Valid values are <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>transit-gateway-multicast-domain-id</code> - The ID of the transit gateway multicast domain.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGatewayPeeringAttachments`.
    ///
    /// <p>Describes your transit gateway peering attachments.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayPeeringAttachments {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_peering_attachments_input::Builder,
    }
    impl DescribeTransitGatewayPeeringAttachments {
        /// Creates a new `DescribeTransitGatewayPeeringAttachments`.
        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::DescribeTransitGatewayPeeringAttachments,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayPeeringAttachmentsError,
            >,
        > {
            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::DescribeTransitGatewayPeeringAttachmentsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayPeeringAttachmentsError,
            >,
        > {
            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::DescribeTransitGatewayPeeringAttachmentsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTransitGatewayPeeringAttachmentsPaginator {
            crate::paginator::DescribeTransitGatewayPeeringAttachmentsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `TransitGatewayAttachmentIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_attachment_ids`](Self::set_transit_gateway_attachment_ids).
        ///
        /// <p>One or more IDs of the transit gateway peering attachments.</p>
        pub fn transit_gateway_attachment_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_ids(input.into());
            self
        }
        /// <p>One or more IDs of the transit gateway peering attachments.</p>
        pub fn set_transit_gateway_attachment_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>local-owner-id</code> - The ID of your Amazon Web Services account.</p> </li>
        /// <li> <p> <code>remote-owner-id</code> - The ID of the Amazon Web Services account in the remote Region that owns the transit gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the peering attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>local-owner-id</code> - The ID of your Amazon Web Services account.</p> </li>
        /// <li> <p> <code>remote-owner-id</code> - The ID of the Amazon Web Services account in the remote Region that owns the transit gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the peering attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGatewayPolicyTables`.
    ///
    /// <p>Describes one or more transit gateway route policy tables. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayPolicyTables {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_policy_tables_input::Builder,
    }
    impl DescribeTransitGatewayPolicyTables {
        /// Creates a new `DescribeTransitGatewayPolicyTables`.
        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::DescribeTransitGatewayPolicyTables,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayPolicyTablesError,
            >,
        > {
            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::DescribeTransitGatewayPolicyTablesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayPolicyTablesError,
            >,
        > {
            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::DescribeTransitGatewayPolicyTablesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTransitGatewayPolicyTablesPaginator {
            crate::paginator::DescribeTransitGatewayPolicyTablesPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `TransitGatewayPolicyTableIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_policy_table_ids`](Self::set_transit_gateway_policy_table_ids).
        ///
        /// <p>The IDs of the transit gateway policy tables.</p>
        pub fn transit_gateway_policy_table_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_policy_table_ids(input.into());
            self
        }
        /// <p>The IDs of the transit gateway policy tables.</p>
        pub fn set_transit_gateway_policy_table_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_policy_table_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters associated with the transit gateway policy table.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters associated with the transit gateway policy table.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGatewayRouteTableAnnouncements`.
    ///
    /// <p>Describes one or more transit gateway route table advertisements.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayRouteTableAnnouncements {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_route_table_announcements_input::Builder,
    }
    impl DescribeTransitGatewayRouteTableAnnouncements {
        /// Creates a new `DescribeTransitGatewayRouteTableAnnouncements`.
        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::DescribeTransitGatewayRouteTableAnnouncements,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayRouteTableAnnouncementsError,
            >,
        > {
            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::DescribeTransitGatewayRouteTableAnnouncementsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayRouteTableAnnouncementsError,
            >,
        > {
            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::DescribeTransitGatewayRouteTableAnnouncementsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTransitGatewayRouteTableAnnouncementsPaginator {
            crate::paginator::DescribeTransitGatewayRouteTableAnnouncementsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `TransitGatewayRouteTableAnnouncementIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_route_table_announcement_ids`](Self::set_transit_gateway_route_table_announcement_ids).
        ///
        /// <p>The IDs of the transit gateway route tables that are being advertised.</p>
        pub fn transit_gateway_route_table_announcement_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .transit_gateway_route_table_announcement_ids(input.into());
            self
        }
        /// <p>The IDs of the transit gateway route tables that are being advertised.</p>
        pub fn set_transit_gateway_route_table_announcement_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self
                .inner
                .set_transit_gateway_route_table_announcement_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters associated with the transit gateway policy table.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters associated with the transit gateway policy table.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGatewayRouteTables`.
    ///
    /// <p>Describes one or more transit gateway route tables. By default, all transit gateway route tables are described. Alternatively, you can filter the results.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayRouteTables {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_route_tables_input::Builder,
    }
    impl DescribeTransitGatewayRouteTables {
        /// Creates a new `DescribeTransitGatewayRouteTables`.
        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::DescribeTransitGatewayRouteTables,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeTransitGatewayRouteTablesError>,
        > {
            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::DescribeTransitGatewayRouteTablesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeTransitGatewayRouteTablesError>,
        > {
            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::DescribeTransitGatewayRouteTablesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTransitGatewayRouteTablesPaginator {
            crate::paginator::DescribeTransitGatewayRouteTablesPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `TransitGatewayRouteTableIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_route_table_ids`](Self::set_transit_gateway_route_table_ids).
        ///
        /// <p>The IDs of the transit gateway route tables.</p>
        pub fn transit_gateway_route_table_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_ids(input.into());
            self
        }
        /// <p>The IDs of the transit gateway route tables.</p>
        pub fn set_transit_gateway_route_table_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>default-association-route-table</code> - Indicates whether this is the default association route table for the transit gateway (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>default-propagation-route-table</code> - Indicates whether this is the default propagation route table for the transit gateway (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the route table (<code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>pending</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>transit-gateway-route-table-id</code> - The ID of the transit gateway route table.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>default-association-route-table</code> - Indicates whether this is the default association route table for the transit gateway (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>default-propagation-route-table</code> - Indicates whether this is the default propagation route table for the transit gateway (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>state</code> - The state of the route table (<code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>pending</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>transit-gateway-route-table-id</code> - The ID of the transit gateway route table.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGateways`.
    ///
    /// <p>Describes one or more transit gateways. By default, all transit gateways are described. Alternatively, you can filter the results.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGateways {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateways_input::Builder,
    }
    impl DescribeTransitGateways {
        /// Creates a new `DescribeTransitGateways`.
        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::DescribeTransitGateways,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeTransitGatewaysError>,
        > {
            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::DescribeTransitGatewaysOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeTransitGatewaysError>,
        > {
            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::DescribeTransitGatewaysPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeTransitGatewaysPaginator {
            crate::paginator::DescribeTransitGatewaysPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `TransitGatewayIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_ids`](Self::set_transit_gateway_ids).
        ///
        /// <p>The IDs of the transit gateways.</p>
        pub fn transit_gateway_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_ids(input.into());
            self
        }
        /// <p>The IDs of the transit gateways.</p>
        pub fn set_transit_gateway_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>options.propagation-default-route-table-id</code> - The ID of the default propagation route table.</p> </li>
        /// <li> <p> <code>options.amazon-side-asn</code> - The private ASN for the Amazon side of a BGP session.</p> </li>
        /// <li> <p> <code>options.association-default-route-table-id</code> - The ID of the default association route table.</p> </li>
        /// <li> <p> <code>options.auto-accept-shared-attachments</code> - Indicates whether there is automatic acceptance of attachment requests (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>options.default-route-table-association</code> - Indicates whether resource attachments are automatically associated with the default association route table (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>options.default-route-table-propagation</code> - Indicates whether resource attachments automatically propagate routes to the default propagation route table (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>options.dns-support</code> - Indicates whether DNS support is enabled (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>options.vpn-ecmp-support</code> - Indicates whether Equal Cost Multipath Protocol support is enabled (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the transit gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the transit gateway (<code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>modifying</code> | <code>pending</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>options.propagation-default-route-table-id</code> - The ID of the default propagation route table.</p> </li>
        /// <li> <p> <code>options.amazon-side-asn</code> - The private ASN for the Amazon side of a BGP session.</p> </li>
        /// <li> <p> <code>options.association-default-route-table-id</code> - The ID of the default association route table.</p> </li>
        /// <li> <p> <code>options.auto-accept-shared-attachments</code> - Indicates whether there is automatic acceptance of attachment requests (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>options.default-route-table-association</code> - Indicates whether resource attachments are automatically associated with the default association route table (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>options.default-route-table-propagation</code> - Indicates whether resource attachments automatically propagate routes to the default propagation route table (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>options.dns-support</code> - Indicates whether DNS support is enabled (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>options.vpn-ecmp-support</code> - Indicates whether Equal Cost Multipath Protocol support is enabled (<code>enable</code> | <code>disable</code>).</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the transit gateway.</p> </li>
        /// <li> <p> <code>state</code> - The state of the transit gateway (<code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>modifying</code> | <code>pending</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTransitGatewayVpcAttachments`.
    ///
    /// <p>Describes one or more VPC attachments. By default, all VPC attachments are described. Alternatively, you can filter the results.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTransitGatewayVpcAttachments {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_transit_gateway_vpc_attachments_input::Builder,
    }
    impl DescribeTransitGatewayVpcAttachments {
        /// Creates a new `DescribeTransitGatewayVpcAttachments`.
        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::DescribeTransitGatewayVpcAttachments,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayVpcAttachmentsError,
            >,
        > {
            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::DescribeTransitGatewayVpcAttachmentsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTransitGatewayVpcAttachmentsError,
            >,
        > {
            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::DescribeTransitGatewayVpcAttachmentsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTransitGatewayVpcAttachmentsPaginator {
            crate::paginator::DescribeTransitGatewayVpcAttachmentsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `TransitGatewayAttachmentIds`.
        ///
        /// To override the contents of this collection use [`set_transit_gateway_attachment_ids`](Self::set_transit_gateway_attachment_ids).
        ///
        /// <p>The IDs of the attachments.</p>
        pub fn transit_gateway_attachment_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_ids(input.into());
            self
        }
        /// <p>The IDs of the attachments.</p>
        pub fn set_transit_gateway_attachment_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>state</code> - The state of the attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>state</code> - The state of the attachment. Valid values are <code>available</code> | <code>deleted</code> | <code>deleting</code> | <code>failed</code> | <code>failing</code> | <code>initiatingRequest</code> | <code>modifying</code> | <code>pendingAcceptance</code> | <code>pending</code> | <code>rollingBack</code> | <code>rejected</code> | <code>rejecting</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of the transit gateway.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeTrunkInterfaceAssociations`.
    ///
    /// <note>
    /// <p>This API action is currently in <b>limited preview only</b>. If you are interested in using this feature, contact your account manager.</p>
    /// </note>
    /// <p>Describes one or more network interface trunk associations.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeTrunkInterfaceAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_trunk_interface_associations_input::Builder,
    }
    impl DescribeTrunkInterfaceAssociations {
        /// Creates a new `DescribeTrunkInterfaceAssociations`.
        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::DescribeTrunkInterfaceAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTrunkInterfaceAssociationsError,
            >,
        > {
            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::DescribeTrunkInterfaceAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeTrunkInterfaceAssociationsError,
            >,
        > {
            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::DescribeTrunkInterfaceAssociationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeTrunkInterfaceAssociationsPaginator {
            crate::paginator::DescribeTrunkInterfaceAssociationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `AssociationIds`.
        ///
        /// To override the contents of this collection use [`set_association_ids`](Self::set_association_ids).
        ///
        /// <p>The IDs of the associations.</p>
        pub fn association_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_ids(input.into());
            self
        }
        /// <p>The IDs of the associations.</p>
        pub fn set_association_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_association_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>gre-key</code> - The ID of a trunk interface association.</p> </li>
        /// <li> <p> <code>interface-protocol</code> - The interface protocol. Valid values are <code>VLAN</code> and <code>GRE</code>.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>gre-key</code> - The ID of a trunk interface association.</p> </li>
        /// <li> <p> <code>interface-protocol</code> - The interface protocol. Valid values are <code>VLAN</code> and <code>GRE</code>.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeVerifiedAccessEndpoints`.
    ///
    /// <p>Describe Amazon Web Services Verified Access endpoints.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVerifiedAccessEndpoints {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_verified_access_endpoints_input::Builder,
    }
    impl DescribeVerifiedAccessEndpoints {
        /// Creates a new `DescribeVerifiedAccessEndpoints`.
        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::DescribeVerifiedAccessEndpoints,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVerifiedAccessEndpointsError>,
        > {
            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::DescribeVerifiedAccessEndpointsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVerifiedAccessEndpointsError>,
        > {
            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::DescribeVerifiedAccessEndpointsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVerifiedAccessEndpointsPaginator {
            crate::paginator::DescribeVerifiedAccessEndpointsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `VerifiedAccessEndpointIds`.
        ///
        /// To override the contents of this collection use [`set_verified_access_endpoint_ids`](Self::set_verified_access_endpoint_ids).
        ///
        /// <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
        pub fn verified_access_endpoint_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_endpoint_ids(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
        pub fn set_verified_access_endpoint_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_endpoint_ids(input);
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access group.</p>
        pub fn verified_access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.verified_access_group_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access group.</p>
        pub fn set_verified_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_group_id(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVerifiedAccessGroups`.
    ///
    /// <p>Describe details of existing Verified Access groups.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVerifiedAccessGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_verified_access_groups_input::Builder,
    }
    impl DescribeVerifiedAccessGroups {
        /// Creates a new `DescribeVerifiedAccessGroups`.
        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::DescribeVerifiedAccessGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVerifiedAccessGroupsError>,
        > {
            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::DescribeVerifiedAccessGroupsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVerifiedAccessGroupsError>,
        > {
            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::DescribeVerifiedAccessGroupsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVerifiedAccessGroupsPaginator {
            crate::paginator::DescribeVerifiedAccessGroupsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `VerifiedAccessGroupIds`.
        ///
        /// To override the contents of this collection use [`set_verified_access_group_ids`](Self::set_verified_access_group_ids).
        ///
        /// <p>The ID of the Amazon Web Services Verified Access groups.</p>
        pub fn verified_access_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.verified_access_group_ids(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access groups.</p>
        pub fn set_verified_access_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_group_ids(input);
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVerifiedAccessInstanceLoggingConfigurations`.
    ///
    /// <p>Describes the current logging configuration for the Amazon Web Services Verified Access instances.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVerifiedAccessInstanceLoggingConfigurations {
        handle: std::sync::Arc<super::Handle>,
        inner:
            crate::input::describe_verified_access_instance_logging_configurations_input::Builder,
    }
    impl DescribeVerifiedAccessInstanceLoggingConfigurations {
        /// Creates a new `DescribeVerifiedAccessInstanceLoggingConfigurations`.
        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::DescribeVerifiedAccessInstanceLoggingConfigurations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVerifiedAccessInstanceLoggingConfigurationsError,
            >,
        > {
            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::DescribeVerifiedAccessInstanceLoggingConfigurationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVerifiedAccessInstanceLoggingConfigurationsError,
            >,
        > {
            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::DescribeVerifiedAccessInstanceLoggingConfigurationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeVerifiedAccessInstanceLoggingConfigurationsPaginator
        {
            crate::paginator::DescribeVerifiedAccessInstanceLoggingConfigurationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `VerifiedAccessInstanceIds`.
        ///
        /// To override the contents of this collection use [`set_verified_access_instance_ids`](Self::set_verified_access_instance_ids).
        ///
        /// <p>The IDs of the Amazon Web Services Verified Access instances.</p>
        pub fn verified_access_instance_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_ids(input.into());
            self
        }
        /// <p>The IDs of the Amazon Web Services Verified Access instances.</p>
        pub fn set_verified_access_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_ids(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVerifiedAccessInstances`.
    ///
    /// <p>Describe Verified Access instances.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVerifiedAccessInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_verified_access_instances_input::Builder,
    }
    impl DescribeVerifiedAccessInstances {
        /// Creates a new `DescribeVerifiedAccessInstances`.
        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::DescribeVerifiedAccessInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVerifiedAccessInstancesError>,
        > {
            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::DescribeVerifiedAccessInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVerifiedAccessInstancesError>,
        > {
            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::DescribeVerifiedAccessInstancesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVerifiedAccessInstancesPaginator {
            crate::paginator::DescribeVerifiedAccessInstancesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `VerifiedAccessInstanceIds`.
        ///
        /// To override the contents of this collection use [`set_verified_access_instance_ids`](Self::set_verified_access_instance_ids).
        ///
        /// <p>The IDs of the Amazon Web Services Verified Access instances.</p>
        pub fn verified_access_instance_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_ids(input.into());
            self
        }
        /// <p>The IDs of the Amazon Web Services Verified Access instances.</p>
        pub fn set_verified_access_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_ids(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVerifiedAccessTrustProviders`.
    ///
    /// <p>Describe details of existing Verified Access trust providers.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVerifiedAccessTrustProviders {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_verified_access_trust_providers_input::Builder,
    }
    impl DescribeVerifiedAccessTrustProviders {
        /// Creates a new `DescribeVerifiedAccessTrustProviders`.
        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::DescribeVerifiedAccessTrustProviders,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVerifiedAccessTrustProvidersError,
            >,
        > {
            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::DescribeVerifiedAccessTrustProvidersOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVerifiedAccessTrustProvidersError,
            >,
        > {
            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::DescribeVerifiedAccessTrustProvidersPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeVerifiedAccessTrustProvidersPaginator {
            crate::paginator::DescribeVerifiedAccessTrustProvidersPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// Appends an item to `VerifiedAccessTrustProviderIds`.
        ///
        /// To override the contents of this collection use [`set_verified_access_trust_provider_ids`](Self::set_verified_access_trust_provider_ids).
        ///
        /// <p>The IDs of the Amazon Web Services Verified Access trust providers.</p>
        pub fn verified_access_trust_provider_ids(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_trust_provider_ids(input.into());
            self
        }
        /// <p>The IDs of the Amazon Web Services Verified Access trust providers.</p>
        pub fn set_verified_access_trust_provider_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_trust_provider_ids(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. Filter names and values are case-sensitive.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVolumeAttribute`.
    ///
    /// <p>Describes the specified attribute of the specified volume. You can specify only one attribute at a time.</p>
    /// <p>For more information about EBS volumes, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html">Amazon EBS volumes</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVolumeAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_volume_attribute_input::Builder,
    }
    impl DescribeVolumeAttribute {
        /// Creates a new `DescribeVolumeAttribute`.
        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::DescribeVolumeAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVolumeAttributeError>,
        > {
            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::DescribeVolumeAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVolumeAttributeError>,
        > {
            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 attribute of the volume. This parameter is required.</p>
        pub fn attribute(mut self, input: crate::model::VolumeAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The attribute of the volume. This parameter is required.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::VolumeAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn volume_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_id(input.into());
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn set_volume_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_volume_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVolumes`.
    ///
    /// <p>Describes the specified EBS volumes or all of your EBS volumes.</p>
    /// <p>If you are describing a long list of volumes, we recommend that you paginate the output to make the list more manageable. The <code>MaxResults</code> parameter sets the maximum number of results returned in a single page. If the list of results exceeds your <code>MaxResults</code> value, then that number of results is returned along with a <code>NextToken</code> value that can be passed to a subsequent <code>DescribeVolumes</code> request to retrieve the remaining results.</p>
    /// <p>For more information about EBS volumes, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html">Amazon EBS volumes</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVolumes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_volumes_input::Builder,
    }
    impl DescribeVolumes {
        /// Creates a new `DescribeVolumes`.
        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::DescribeVolumes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVolumesError>,
        > {
            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::DescribeVolumesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVolumesError>,
        > {
            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::DescribeVolumesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVolumesPaginator {
            crate::paginator::DescribeVolumesPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>attachment.attach-time</code> - The time stamp when the attachment initiated.</p> </li>
        /// <li> <p> <code>attachment.delete-on-termination</code> - Whether the volume is deleted on instance termination.</p> </li>
        /// <li> <p> <code>attachment.device</code> - The device name specified in the block device mapping (for example, <code>/dev/sda1</code>).</p> </li>
        /// <li> <p> <code>attachment.instance-id</code> - The ID of the instance the volume is attached to.</p> </li>
        /// <li> <p> <code>attachment.status</code> - The attachment state (<code>attaching</code> | <code>attached</code> | <code>detaching</code>).</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone in which the volume was created.</p> </li>
        /// <li> <p> <code>create-time</code> - The time stamp when the volume was created.</p> </li>
        /// <li> <p> <code>encrypted</code> - Indicates whether the volume is encrypted (<code>true</code> | <code>false</code>)</p> </li>
        /// <li> <p> <code>multi-attach-enabled</code> - Indicates whether the volume is enabled for Multi-Attach (<code>true</code> | <code>false</code>)</p> </li>
        /// <li> <p> <code>fast-restored</code> - Indicates whether the volume was created from a snapshot that is enabled for fast snapshot restore (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>size</code> - The size of the volume, in GiB.</p> </li>
        /// <li> <p> <code>snapshot-id</code> - The snapshot from which the volume was created.</p> </li>
        /// <li> <p> <code>status</code> - The state of the volume (<code>creating</code> | <code>available</code> | <code>in-use</code> | <code>deleting</code> | <code>deleted</code> | <code>error</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>volume-id</code> - The volume ID.</p> </li>
        /// <li> <p> <code>volume-type</code> - The Amazon EBS volume type (<code>gp2</code> | <code>gp3</code> | <code>io1</code> | <code>io2</code> | <code>st1</code> | <code>sc1</code>| <code>standard</code>)</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>attachment.attach-time</code> - The time stamp when the attachment initiated.</p> </li>
        /// <li> <p> <code>attachment.delete-on-termination</code> - Whether the volume is deleted on instance termination.</p> </li>
        /// <li> <p> <code>attachment.device</code> - The device name specified in the block device mapping (for example, <code>/dev/sda1</code>).</p> </li>
        /// <li> <p> <code>attachment.instance-id</code> - The ID of the instance the volume is attached to.</p> </li>
        /// <li> <p> <code>attachment.status</code> - The attachment state (<code>attaching</code> | <code>attached</code> | <code>detaching</code>).</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone in which the volume was created.</p> </li>
        /// <li> <p> <code>create-time</code> - The time stamp when the volume was created.</p> </li>
        /// <li> <p> <code>encrypted</code> - Indicates whether the volume is encrypted (<code>true</code> | <code>false</code>)</p> </li>
        /// <li> <p> <code>multi-attach-enabled</code> - Indicates whether the volume is enabled for Multi-Attach (<code>true</code> | <code>false</code>)</p> </li>
        /// <li> <p> <code>fast-restored</code> - Indicates whether the volume was created from a snapshot that is enabled for fast snapshot restore (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>size</code> - The size of the volume, in GiB.</p> </li>
        /// <li> <p> <code>snapshot-id</code> - The snapshot from which the volume was created.</p> </li>
        /// <li> <p> <code>status</code> - The state of the volume (<code>creating</code> | <code>available</code> | <code>in-use</code> | <code>deleting</code> | <code>deleted</code> | <code>error</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>volume-id</code> - The volume ID.</p> </li>
        /// <li> <p> <code>volume-type</code> - The Amazon EBS volume type (<code>gp2</code> | <code>gp3</code> | <code>io1</code> | <code>io2</code> | <code>st1</code> | <code>sc1</code>| <code>standard</code>)</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `VolumeIds`.
        ///
        /// To override the contents of this collection use [`set_volume_ids`](Self::set_volume_ids).
        ///
        /// <p>The volume IDs.</p>
        pub fn volume_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_ids(input.into());
            self
        }
        /// <p>The volume IDs.</p>
        pub fn set_volume_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_volume_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of volume results returned by <code>DescribeVolumes</code> in paginated output. When this parameter is used, <code>DescribeVolumes</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>DescribeVolumes</code> request with the returned <code>NextToken</code> value. This value can be between 5 and 500; if <code>MaxResults</code> is given a value larger than 500, only 500 results are returned. If this parameter is not used, then <code>DescribeVolumes</code> returns all results. You cannot specify this parameter and the volume IDs parameter in the same request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of volume results returned by <code>DescribeVolumes</code> in paginated output. When this parameter is used, <code>DescribeVolumes</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>DescribeVolumes</code> request with the returned <code>NextToken</code> value. This value can be between 5 and 500; if <code>MaxResults</code> is given a value larger than 500, only 500 results are returned. If this parameter is not used, then <code>DescribeVolumes</code> returns all results. You cannot specify this parameter and the volume IDs parameter in the same 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 <code>NextToken</code> value returned from a previous paginated <code>DescribeVolumes</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is <code>null</code> when there are no more results to return.</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 <code>NextToken</code> value returned from a previous paginated <code>DescribeVolumes</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is <code>null</code> when there are no more results to return.</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 `DescribeVolumesModifications`.
    ///
    /// <p>Describes the most recent volume modification request for the specified EBS volumes.</p>
    /// <p>If a volume has never been modified, some information in the output will be null. If a volume has been modified more than once, the output includes only the most recent modification request.</p>
    /// <p>You can also use CloudWatch Events to check the status of a modification to an EBS volume. For information about CloudWatch Events, see the <a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/">Amazon CloudWatch Events User Guide</a>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-modifications.html">Monitor the progress of volume modifications</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVolumesModifications {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_volumes_modifications_input::Builder,
    }
    impl DescribeVolumesModifications {
        /// Creates a new `DescribeVolumesModifications`.
        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::DescribeVolumesModifications,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVolumesModificationsError>,
        > {
            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::DescribeVolumesModificationsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVolumesModificationsError>,
        > {
            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::DescribeVolumesModificationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVolumesModificationsPaginator {
            crate::paginator::DescribeVolumesModificationsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `VolumeIds`.
        ///
        /// To override the contents of this collection use [`set_volume_ids`](Self::set_volume_ids).
        ///
        /// <p>The IDs of the volumes.</p>
        pub fn volume_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_ids(input.into());
            self
        }
        /// <p>The IDs of the volumes.</p>
        pub fn set_volume_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_volume_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>modification-state</code> - The current modification state (modifying | optimizing | completed | failed).</p> </li>
        /// <li> <p> <code>original-iops</code> - The original IOPS rate of the volume.</p> </li>
        /// <li> <p> <code>original-size</code> - The original size of the volume, in GiB.</p> </li>
        /// <li> <p> <code>original-volume-type</code> - The original volume type of the volume (standard | io1 | io2 | gp2 | sc1 | st1).</p> </li>
        /// <li> <p> <code>originalMultiAttachEnabled</code> - Indicates whether Multi-Attach support was enabled (true | false).</p> </li>
        /// <li> <p> <code>start-time</code> - The modification start time.</p> </li>
        /// <li> <p> <code>target-iops</code> - The target IOPS rate of the volume.</p> </li>
        /// <li> <p> <code>target-size</code> - The target size of the volume, in GiB.</p> </li>
        /// <li> <p> <code>target-volume-type</code> - The target volume type of the volume (standard | io1 | io2 | gp2 | sc1 | st1).</p> </li>
        /// <li> <p> <code>targetMultiAttachEnabled</code> - Indicates whether Multi-Attach support is to be enabled (true | false).</p> </li>
        /// <li> <p> <code>volume-id</code> - The ID of the volume.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>modification-state</code> - The current modification state (modifying | optimizing | completed | failed).</p> </li>
        /// <li> <p> <code>original-iops</code> - The original IOPS rate of the volume.</p> </li>
        /// <li> <p> <code>original-size</code> - The original size of the volume, in GiB.</p> </li>
        /// <li> <p> <code>original-volume-type</code> - The original volume type of the volume (standard | io1 | io2 | gp2 | sc1 | st1).</p> </li>
        /// <li> <p> <code>originalMultiAttachEnabled</code> - Indicates whether Multi-Attach support was enabled (true | false).</p> </li>
        /// <li> <p> <code>start-time</code> - The modification start time.</p> </li>
        /// <li> <p> <code>target-iops</code> - The target IOPS rate of the volume.</p> </li>
        /// <li> <p> <code>target-size</code> - The target size of the volume, in GiB.</p> </li>
        /// <li> <p> <code>target-volume-type</code> - The target volume type of the volume (standard | io1 | io2 | gp2 | sc1 | st1).</p> </li>
        /// <li> <p> <code>targetMultiAttachEnabled</code> - Indicates whether Multi-Attach support is to be enabled (true | false).</p> </li>
        /// <li> <p> <code>volume-id</code> - The ID of the volume.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The <code>nextToken</code> value returned by a previous paginated request.</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 <code>nextToken</code> value returned by a previous paginated request.</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 (up to a limit of 500) to be returned in a paginated 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 (up to a limit of 500) to be returned in a paginated 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 `DescribeVolumeStatus`.
    ///
    /// <p>Describes the status of the specified volumes. Volume status provides the result of the checks performed on your volumes to determine events that can impair the performance of your volumes. The performance of a volume can be affected if an issue occurs on the volume's underlying host. If the volume's underlying host experiences a power outage or system issue, after the system is restored, there could be data inconsistencies on the volume. Volume events notify you if this occurs. Volume actions notify you if any action needs to be taken in response to the event.</p>
    /// <p>The <code>DescribeVolumeStatus</code> operation provides the following information about the specified volumes:</p>
    /// <p> <i>Status</i>: Reflects the current status of the volume. The possible values are <code>ok</code>, <code>impaired</code> , <code>warning</code>, or <code>insufficient-data</code>. If all checks pass, the overall status of the volume is <code>ok</code>. If the check fails, the overall status is <code>impaired</code>. If the status is <code>insufficient-data</code>, then the checks might still be taking place on your volume at the time. We recommend that you retry the request. For more information about volume status, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-status.html">Monitor the status of your volumes</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p> <i>Events</i>: Reflect the cause of a volume status and might require you to take action. For example, if your volume returns an <code>impaired</code> status, then the volume event might be <code>potential-data-inconsistency</code>. This means that your volume has been affected by an issue with the underlying host, has all I/O operations disabled, and might have inconsistent data.</p>
    /// <p> <i>Actions</i>: Reflect the actions you might have to take in response to an event. For example, if the status of the volume is <code>impaired</code> and the volume event shows <code>potential-data-inconsistency</code>, then the action shows <code>enable-volume-io</code>. This means that you may want to enable the I/O operations for the volume by calling the <code>EnableVolumeIO</code> action and then check the volume for data consistency.</p>
    /// <p>Volume status is based on the volume status checks, and does not reflect the volume state. Therefore, volume status does not indicate volumes in the <code>error</code> state (for example, when a volume is incapable of accepting I/O.)</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVolumeStatus {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_volume_status_input::Builder,
    }
    impl DescribeVolumeStatus {
        /// Creates a new `DescribeVolumeStatus`.
        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::DescribeVolumeStatus,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVolumeStatusError>,
        > {
            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::DescribeVolumeStatusOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVolumeStatusError>,
        > {
            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::DescribeVolumeStatusPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVolumeStatusPaginator {
            crate::paginator::DescribeVolumeStatusPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>action.code</code> - The action code for the event (for example, <code>enable-volume-io</code>).</p> </li>
        /// <li> <p> <code>action.description</code> - A description of the action.</p> </li>
        /// <li> <p> <code>action.event-id</code> - The event ID associated with the action.</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>
        /// <li> <p> <code>event.description</code> - A description of the event.</p> </li>
        /// <li> <p> <code>event.event-id</code> - The event ID.</p> </li>
        /// <li> <p> <code>event.event-type</code> - The event type (for <code>io-enabled</code>: <code>passed</code> | <code>failed</code>; for <code>io-performance</code>: <code>io-performance:degraded</code> | <code>io-performance:severely-degraded</code> | <code>io-performance:stalled</code>).</p> </li>
        /// <li> <p> <code>event.not-after</code> - The latest end time for the event.</p> </li>
        /// <li> <p> <code>event.not-before</code> - The earliest start time for the event.</p> </li>
        /// <li> <p> <code>volume-status.details-name</code> - The cause for <code>volume-status.status</code> (<code>io-enabled</code> | <code>io-performance</code>).</p> </li>
        /// <li> <p> <code>volume-status.details-status</code> - The status of <code>volume-status.details-name</code> (for <code>io-enabled</code>: <code>passed</code> | <code>failed</code>; for <code>io-performance</code>: <code>normal</code> | <code>degraded</code> | <code>severely-degraded</code> | <code>stalled</code>).</p> </li>
        /// <li> <p> <code>volume-status.status</code> - The status of the volume (<code>ok</code> | <code>impaired</code> | <code>warning</code> | <code>insufficient-data</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>action.code</code> - The action code for the event (for example, <code>enable-volume-io</code>).</p> </li>
        /// <li> <p> <code>action.description</code> - A description of the action.</p> </li>
        /// <li> <p> <code>action.event-id</code> - The event ID associated with the action.</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li>
        /// <li> <p> <code>event.description</code> - A description of the event.</p> </li>
        /// <li> <p> <code>event.event-id</code> - The event ID.</p> </li>
        /// <li> <p> <code>event.event-type</code> - The event type (for <code>io-enabled</code>: <code>passed</code> | <code>failed</code>; for <code>io-performance</code>: <code>io-performance:degraded</code> | <code>io-performance:severely-degraded</code> | <code>io-performance:stalled</code>).</p> </li>
        /// <li> <p> <code>event.not-after</code> - The latest end time for the event.</p> </li>
        /// <li> <p> <code>event.not-before</code> - The earliest start time for the event.</p> </li>
        /// <li> <p> <code>volume-status.details-name</code> - The cause for <code>volume-status.status</code> (<code>io-enabled</code> | <code>io-performance</code>).</p> </li>
        /// <li> <p> <code>volume-status.details-status</code> - The status of <code>volume-status.details-name</code> (for <code>io-enabled</code>: <code>passed</code> | <code>failed</code>; for <code>io-performance</code>: <code>normal</code> | <code>degraded</code> | <code>severely-degraded</code> | <code>stalled</code>).</p> </li>
        /// <li> <p> <code>volume-status.status</code> - The status of the volume (<code>ok</code> | <code>impaired</code> | <code>warning</code> | <code>insufficient-data</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of volume results returned by <code>DescribeVolumeStatus</code> in paginated output. When this parameter is used, the request only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned. If this parameter is not used, then <code>DescribeVolumeStatus</code> returns all results. You cannot specify this parameter and the volume IDs parameter in the same request.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of volume results returned by <code>DescribeVolumeStatus</code> in paginated output. When this parameter is used, the request only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned. If this parameter is not used, then <code>DescribeVolumeStatus</code> returns all results. You cannot specify this parameter and the volume IDs parameter in the same 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 <code>NextToken</code> value to include in a future <code>DescribeVolumeStatus</code> request. When the results of the request exceed <code>MaxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</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 <code>NextToken</code> value to include in a future <code>DescribeVolumeStatus</code> request. When the results of the request exceed <code>MaxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</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
        }
        /// Appends an item to `VolumeIds`.
        ///
        /// To override the contents of this collection use [`set_volume_ids`](Self::set_volume_ids).
        ///
        /// <p>The IDs of the volumes.</p>
        /// <p>Default: Describes all your volumes.</p>
        pub fn volume_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_ids(input.into());
            self
        }
        /// <p>The IDs of the volumes.</p>
        /// <p>Default: Describes all your volumes.</p>
        pub fn set_volume_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_volume_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVpcAttribute`.
    ///
    /// <p>Describes the specified attribute of the specified VPC. You can specify only one attribute at a time.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_attribute_input::Builder,
    }
    impl DescribeVpcAttribute {
        /// Creates a new `DescribeVpcAttribute`.
        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::DescribeVpcAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcAttributeError>,
        > {
            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::DescribeVpcAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcAttributeError>,
        > {
            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 VPC attribute.</p>
        pub fn attribute(mut self, input: crate::model::VpcAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The VPC attribute.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::VpcAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVpcClassicLink`.
    ///
    /// <p>Describes the ClassicLink status of one or more VPCs.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcClassicLink {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_classic_link_input::Builder,
    }
    impl DescribeVpcClassicLink {
        /// Creates a new `DescribeVpcClassicLink`.
        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::DescribeVpcClassicLink,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcClassicLinkError>,
        > {
            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::DescribeVpcClassicLinkOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcClassicLinkError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>is-classic-link-enabled</code> - Whether the VPC is enabled for ClassicLink (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>is-classic-link-enabled</code> - Whether the VPC is enabled for ClassicLink (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `VpcIds`.
        ///
        /// To override the contents of this collection use [`set_vpc_ids`](Self::set_vpc_ids).
        ///
        /// <p>One or more VPCs for which you want to describe the ClassicLink status.</p>
        pub fn vpc_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_ids(input.into());
            self
        }
        /// <p>One or more VPCs for which you want to describe the ClassicLink status.</p>
        pub fn set_vpc_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpc_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVpcClassicLinkDnsSupport`.
    ///
    /// <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    /// <p>Describes the ClassicLink DNS support status of one or more VPCs. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html">ClassicLink</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcClassicLinkDnsSupport {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_classic_link_dns_support_input::Builder,
    }
    impl DescribeVpcClassicLinkDnsSupport {
        /// Creates a new `DescribeVpcClassicLinkDnsSupport`.
        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::DescribeVpcClassicLinkDnsSupport,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcClassicLinkDnsSupportError>,
        > {
            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::DescribeVpcClassicLinkDnsSupportOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcClassicLinkDnsSupportError>,
        > {
            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::DescribeVpcClassicLinkDnsSupportPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVpcClassicLinkDnsSupportPaginator {
            crate::paginator::DescribeVpcClassicLinkDnsSupportPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `VpcIds`.
        ///
        /// To override the contents of this collection use [`set_vpc_ids`](Self::set_vpc_ids).
        ///
        /// <p>One or more VPC IDs.</p>
        pub fn vpc_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_ids(input.into());
            self
        }
        /// <p>One or more VPC IDs.</p>
        pub fn set_vpc_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpc_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVpcEndpointConnectionNotifications`.
    ///
    /// <p>Describes the connection notifications for VPC endpoints and VPC endpoint services.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcEndpointConnectionNotifications {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_endpoint_connection_notifications_input::Builder,
    }
    impl DescribeVpcEndpointConnectionNotifications {
        /// Creates a new `DescribeVpcEndpointConnectionNotifications`.
        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::DescribeVpcEndpointConnectionNotifications,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVpcEndpointConnectionNotificationsError,
            >,
        > {
            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::DescribeVpcEndpointConnectionNotificationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVpcEndpointConnectionNotificationsError,
            >,
        > {
            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::DescribeVpcEndpointConnectionNotificationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeVpcEndpointConnectionNotificationsPaginator {
            crate::paginator::DescribeVpcEndpointConnectionNotificationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the notification.</p>
        pub fn connection_notification_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.connection_notification_id(input.into());
            self
        }
        /// <p>The ID of the notification.</p>
        pub fn set_connection_notification_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_connection_notification_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>connection-notification-arn</code> - The ARN of the SNS topic for the notification.</p> </li>
        /// <li> <p> <code>connection-notification-id</code> - The ID of the notification.</p> </li>
        /// <li> <p> <code>connection-notification-state</code> - The state of the notification (<code>Enabled</code> | <code>Disabled</code>).</p> </li>
        /// <li> <p> <code>connection-notification-type</code> - The type of notification (<code>Topic</code>).</p> </li>
        /// <li> <p> <code>service-id</code> - The ID of the endpoint service.</p> </li>
        /// <li> <p> <code>vpc-endpoint-id</code> - The ID of the VPC endpoint.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>connection-notification-arn</code> - The ARN of the SNS topic for the notification.</p> </li>
        /// <li> <p> <code>connection-notification-id</code> - The ID of the notification.</p> </li>
        /// <li> <p> <code>connection-notification-state</code> - The state of the notification (<code>Enabled</code> | <code>Disabled</code>).</p> </li>
        /// <li> <p> <code>connection-notification-type</code> - The type of notification (<code>Topic</code>).</p> </li>
        /// <li> <p> <code>service-id</code> - The ID of the endpoint service.</p> </li>
        /// <li> <p> <code>vpc-endpoint-id</code> - The ID of the VPC endpoint.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value.</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 a single call. To retrieve the remaining results, make another request with the returned <code>NextToken</code> value.</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 token to request the next page of results.</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 to request the next page of results.</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 `DescribeVpcEndpointConnections`.
    ///
    /// <p>Describes the VPC endpoint connections to your VPC endpoint services, including any endpoints that are pending your acceptance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcEndpointConnections {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_endpoint_connections_input::Builder,
    }
    impl DescribeVpcEndpointConnections {
        /// Creates a new `DescribeVpcEndpointConnections`.
        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::DescribeVpcEndpointConnections,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcEndpointConnectionsError>,
        > {
            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::DescribeVpcEndpointConnectionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcEndpointConnectionsError>,
        > {
            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::DescribeVpcEndpointConnectionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVpcEndpointConnectionsPaginator {
            crate::paginator::DescribeVpcEndpointConnectionsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>ip-address-type</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>
        /// <li> <p> <code>service-id</code> - The ID of the service.</p> </li>
        /// <li> <p> <code>vpc-endpoint-owner</code> - The ID of the Amazon Web Services account ID that owns the endpoint.</p> </li>
        /// <li> <p> <code>vpc-endpoint-state</code> - The state of the endpoint (<code>pendingAcceptance</code> | <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>vpc-endpoint-id</code> - The ID of the endpoint.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>ip-address-type</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>
        /// <li> <p> <code>service-id</code> - The ID of the service.</p> </li>
        /// <li> <p> <code>vpc-endpoint-owner</code> - The ID of the Amazon Web Services account ID that owns the endpoint.</p> </li>
        /// <li> <p> <code>vpc-endpoint-state</code> - The state of the endpoint (<code>pendingAcceptance</code> | <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>vpc-endpoint-id</code> - The ID of the endpoint.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The token to retrieve the next page of results.</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 to retrieve the next page of results.</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 `DescribeVpcEndpoints`.
    ///
    /// <p>Describes your VPC endpoints.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcEndpoints {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_endpoints_input::Builder,
    }
    impl DescribeVpcEndpoints {
        /// Creates a new `DescribeVpcEndpoints`.
        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::DescribeVpcEndpoints,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcEndpointsError>,
        > {
            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::DescribeVpcEndpointsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcEndpointsError>,
        > {
            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::DescribeVpcEndpointsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVpcEndpointsPaginator {
            crate::paginator::DescribeVpcEndpointsPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `VpcEndpointIds`.
        ///
        /// To override the contents of this collection use [`set_vpc_endpoint_ids`](Self::set_vpc_endpoint_ids).
        ///
        /// <p>The IDs of the VPC endpoints.</p>
        pub fn vpc_endpoint_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_endpoint_ids(input.into());
            self
        }
        /// <p>The IDs of the VPC endpoints.</p>
        pub fn set_vpc_endpoint_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>ip-address-type</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>
        /// <li> <p> <code>service-name</code> - The name of the service.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC in which the endpoint resides.</p> </li>
        /// <li> <p> <code>vpc-endpoint-id</code> - The ID of the endpoint.</p> </li>
        /// <li> <p> <code>vpc-endpoint-state</code> - The state of the endpoint (<code>pendingAcceptance</code> | <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>vpc-endpoint-type</code> - The type of VPC endpoint (<code>Interface</code> | <code>Gateway</code> | <code>GatewayLoadBalancer</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>ip-address-type</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>
        /// <li> <p> <code>service-name</code> - The name of the service.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC in which the endpoint resides.</p> </li>
        /// <li> <p> <code>vpc-endpoint-id</code> - The ID of the endpoint.</p> </li>
        /// <li> <p> <code>vpc-endpoint-state</code> - The state of the endpoint (<code>pendingAcceptance</code> | <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code> | <code>failed</code>).</p> </li>
        /// <li> <p> <code>vpc-endpoint-type</code> - The type of VPC endpoint (<code>Interface</code> | <code>Gateway</code> | <code>GatewayLoadBalancer</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>
        /// <p>Constraint: If the value is greater than 1,000, we return only 1,000 items.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>
        /// <p>Constraint: If the value is greater than 1,000, we return only 1,000 items.</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 token for the next set of items to return. (You received this token from a prior 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>The token for the next set of items to return. (You received this token from a prior 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 `DescribeVpcEndpointServiceConfigurations`.
    ///
    /// <p>Describes the VPC endpoint service configurations in your account (your services).</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcEndpointServiceConfigurations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_endpoint_service_configurations_input::Builder,
    }
    impl DescribeVpcEndpointServiceConfigurations {
        /// Creates a new `DescribeVpcEndpointServiceConfigurations`.
        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::DescribeVpcEndpointServiceConfigurations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVpcEndpointServiceConfigurationsError,
            >,
        > {
            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::DescribeVpcEndpointServiceConfigurationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVpcEndpointServiceConfigurationsError,
            >,
        > {
            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::DescribeVpcEndpointServiceConfigurationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeVpcEndpointServiceConfigurationsPaginator {
            crate::paginator::DescribeVpcEndpointServiceConfigurationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `ServiceIds`.
        ///
        /// To override the contents of this collection use [`set_service_ids`](Self::set_service_ids).
        ///
        /// <p>The IDs of the endpoint services.</p>
        pub fn service_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_ids(input.into());
            self
        }
        /// <p>The IDs of the endpoint services.</p>
        pub fn set_service_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_service_ids(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>service-name</code> - The name of the service.</p> </li>
        /// <li> <p> <code>service-id</code> - The ID of the service.</p> </li>
        /// <li> <p> <code>service-state</code> - The state of the service (<code>Pending</code> | <code>Available</code> | <code>Deleting</code> | <code>Deleted</code> | <code>Failed</code>). </p> </li>
        /// <li> <p> <code>supported-ip-address-types</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>service-name</code> - The name of the service.</p> </li>
        /// <li> <p> <code>service-id</code> - The ID of the service.</p> </li>
        /// <li> <p> <code>service-state</code> - The state of the service (<code>Pending</code> | <code>Available</code> | <code>Deleting</code> | <code>Deleted</code> | <code>Failed</code>). </p> </li>
        /// <li> <p> <code>supported-ip-address-types</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The token to retrieve the next page of results.</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 to retrieve the next page of results.</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 `DescribeVpcEndpointServicePermissions`.
    ///
    /// <p>Describes the principals (service consumers) that are permitted to discover your VPC endpoint service.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcEndpointServicePermissions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_endpoint_service_permissions_input::Builder,
    }
    impl DescribeVpcEndpointServicePermissions {
        /// Creates a new `DescribeVpcEndpointServicePermissions`.
        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::DescribeVpcEndpointServicePermissions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVpcEndpointServicePermissionsError,
            >,
        > {
            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::DescribeVpcEndpointServicePermissionsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DescribeVpcEndpointServicePermissionsError,
            >,
        > {
            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::DescribeVpcEndpointServicePermissionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::DescribeVpcEndpointServicePermissionsPaginator {
            crate::paginator::DescribeVpcEndpointServicePermissionsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the service.</p>
        pub fn service_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_id(input.into());
            self
        }
        /// <p>The ID of the service.</p>
        pub fn set_service_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>principal</code> - The ARN of the principal.</p> </li>
        /// <li> <p> <code>principal-type</code> - The principal type (<code>All</code> | <code>Service</code> | <code>OrganizationUnit</code> | <code>Account</code> | <code>User</code> | <code>Role</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>principal</code> - The ARN of the principal.</p> </li>
        /// <li> <p> <code>principal-type</code> - The principal type (<code>All</code> | <code>Service</code> | <code>OrganizationUnit</code> | <code>Account</code> | <code>User</code> | <code>Role</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned <code>NextToken</code> value. This value can be between 5 and 1,000; if <code>MaxResults</code> is given a value larger than 1,000, only 1,000 results are returned.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>The token to retrieve the next page of results.</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 to retrieve the next page of results.</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 `DescribeVpcEndpointServices`.
    ///
    /// <p>Describes available services to which you can create a VPC endpoint.</p>
    /// <p>When the service provider and the consumer have different accounts in multiple Availability Zones, and the consumer views the VPC endpoint service information, the response only includes the common Availability Zones. For example, when the service provider account uses <code>us-east-1a</code> and <code>us-east-1c</code> and the consumer uses <code>us-east-1a</code> and <code>us-east-1b</code>, the response includes the VPC endpoint services in the common Availability Zone, <code>us-east-1a</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcEndpointServices {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_endpoint_services_input::Builder,
    }
    impl DescribeVpcEndpointServices {
        /// Creates a new `DescribeVpcEndpointServices`.
        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::DescribeVpcEndpointServices,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcEndpointServicesError>,
        > {
            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::DescribeVpcEndpointServicesOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcEndpointServicesError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `ServiceNames`.
        ///
        /// To override the contents of this collection use [`set_service_names`](Self::set_service_names).
        ///
        /// <p>The service names.</p>
        pub fn service_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_names(input.into());
            self
        }
        /// <p>The service names.</p>
        pub fn set_service_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_service_names(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>owner</code> - The ID or alias of the Amazon Web Services account that owns the service.</p> </li>
        /// <li> <p> <code>service-name</code> - The name of the service.</p> </li>
        /// <li> <p> <code>service-type</code> - The type of service (<code>Interface</code> | <code>Gateway</code> | <code>GatewayLoadBalancer</code>).</p> </li>
        /// <li> <p> <code>supported-ip-address-types</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters.</p>
        /// <ul>
        /// <li> <p> <code>owner</code> - The ID or alias of the Amazon Web Services account that owns the service.</p> </li>
        /// <li> <p> <code>service-name</code> - The name of the service.</p> </li>
        /// <li> <p> <code>service-type</code> - The type of service (<code>Interface</code> | <code>Gateway</code> | <code>GatewayLoadBalancer</code>).</p> </li>
        /// <li> <p> <code>supported-ip-address-types</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>
        /// <p>Constraint: If the value is greater than 1,000, we return only 1,000 items.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>
        /// <p>Constraint: If the value is greater than 1,000, we return only 1,000 items.</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 token for the next set of items to return. (You received this token from a prior 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>The token for the next set of items to return. (You received this token from a prior 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 `DescribeVpcPeeringConnections`.
    ///
    /// <p>Describes one or more of your VPC peering connections.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcPeeringConnections {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpc_peering_connections_input::Builder,
    }
    impl DescribeVpcPeeringConnections {
        /// Creates a new `DescribeVpcPeeringConnections`.
        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::DescribeVpcPeeringConnections,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcPeeringConnectionsError>,
        > {
            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::DescribeVpcPeeringConnectionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcPeeringConnectionsError>,
        > {
            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::DescribeVpcPeeringConnectionsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVpcPeeringConnectionsPaginator {
            crate::paginator::DescribeVpcPeeringConnectionsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>accepter-vpc-info.cidr-block</code> - The IPv4 CIDR block of the accepter VPC.</p> </li>
        /// <li> <p> <code>accepter-vpc-info.owner-id</code> - The ID of the Amazon Web Services account that owns the accepter VPC.</p> </li>
        /// <li> <p> <code>accepter-vpc-info.vpc-id</code> - The ID of the accepter VPC.</p> </li>
        /// <li> <p> <code>expiration-time</code> - The expiration date and time for the VPC peering connection.</p> </li>
        /// <li> <p> <code>requester-vpc-info.cidr-block</code> - The IPv4 CIDR block of the requester's VPC.</p> </li>
        /// <li> <p> <code>requester-vpc-info.owner-id</code> - The ID of the Amazon Web Services account that owns the requester VPC.</p> </li>
        /// <li> <p> <code>requester-vpc-info.vpc-id</code> - The ID of the requester VPC.</p> </li>
        /// <li> <p> <code>status-code</code> - The status of the VPC peering connection (<code>pending-acceptance</code> | <code>failed</code> | <code>expired</code> | <code>provisioning</code> | <code>active</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code>).</p> </li>
        /// <li> <p> <code>status-message</code> - A message that provides more information about the status of the VPC peering connection, if applicable.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-peering-connection-id</code> - The ID of the VPC peering connection.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>accepter-vpc-info.cidr-block</code> - The IPv4 CIDR block of the accepter VPC.</p> </li>
        /// <li> <p> <code>accepter-vpc-info.owner-id</code> - The ID of the Amazon Web Services account that owns the accepter VPC.</p> </li>
        /// <li> <p> <code>accepter-vpc-info.vpc-id</code> - The ID of the accepter VPC.</p> </li>
        /// <li> <p> <code>expiration-time</code> - The expiration date and time for the VPC peering connection.</p> </li>
        /// <li> <p> <code>requester-vpc-info.cidr-block</code> - The IPv4 CIDR block of the requester's VPC.</p> </li>
        /// <li> <p> <code>requester-vpc-info.owner-id</code> - The ID of the Amazon Web Services account that owns the requester VPC.</p> </li>
        /// <li> <p> <code>requester-vpc-info.vpc-id</code> - The ID of the requester VPC.</p> </li>
        /// <li> <p> <code>status-code</code> - The status of the VPC peering connection (<code>pending-acceptance</code> | <code>failed</code> | <code>expired</code> | <code>provisioning</code> | <code>active</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code>).</p> </li>
        /// <li> <p> <code>status-message</code> - A message that provides more information about the status of the VPC peering connection, if applicable.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-peering-connection-id</code> - The ID of the VPC peering connection.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `VpcPeeringConnectionIds`.
        ///
        /// To override the contents of this collection use [`set_vpc_peering_connection_ids`](Self::set_vpc_peering_connection_ids).
        ///
        /// <p>One or more VPC peering connection IDs.</p>
        /// <p>Default: Describes all your VPC peering connections.</p>
        pub fn vpc_peering_connection_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_peering_connection_ids(input.into());
            self
        }
        /// <p>One or more VPC peering connection IDs.</p>
        /// <p>Default: Describes all your VPC peering connections.</p>
        pub fn set_vpc_peering_connection_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpc_peering_connection_ids(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeVpcs`.
    ///
    /// <p>Describes one or more of your VPCs.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpcs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpcs_input::Builder,
    }
    impl DescribeVpcs {
        /// Creates a new `DescribeVpcs`.
        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::DescribeVpcs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcsError>,
        > {
            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::DescribeVpcsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpcsError>,
        > {
            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::DescribeVpcsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::DescribeVpcsPaginator {
            crate::paginator::DescribeVpcsPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>cidr</code> - The primary IPv4 CIDR block of the VPC. The CIDR block you specify must exactly match the VPC's CIDR block for information to be returned for the VPC. Must contain the slash followed by one or two digits (for example, <code>/28</code>).</p> </li>
        /// <li> <p> <code>cidr-block-association.cidr-block</code> - An IPv4 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>cidr-block-association.association-id</code> - The association ID for an IPv4 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>cidr-block-association.state</code> - The state of an IPv4 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>dhcp-options-id</code> - The ID of a set of DHCP options.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.ipv6-cidr-block</code> - An IPv6 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.ipv6-pool</code> - The ID of the IPv6 address pool from which the IPv6 CIDR block is allocated.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.association-id</code> - The association ID for an IPv6 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.state</code> - The state of an IPv6 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>is-default</code> - Indicates whether the VPC is the default VPC.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the VPC.</p> </li>
        /// <li> <p> <code>state</code> - The state of the VPC (<code>pending</code> | <code>available</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>cidr</code> - The primary IPv4 CIDR block of the VPC. The CIDR block you specify must exactly match the VPC's CIDR block for information to be returned for the VPC. Must contain the slash followed by one or two digits (for example, <code>/28</code>).</p> </li>
        /// <li> <p> <code>cidr-block-association.cidr-block</code> - An IPv4 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>cidr-block-association.association-id</code> - The association ID for an IPv4 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>cidr-block-association.state</code> - The state of an IPv4 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>dhcp-options-id</code> - The ID of a set of DHCP options.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.ipv6-cidr-block</code> - An IPv6 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.ipv6-pool</code> - The ID of the IPv6 address pool from which the IPv6 CIDR block is allocated.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.association-id</code> - The association ID for an IPv6 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>ipv6-cidr-block-association.state</code> - The state of an IPv6 CIDR block associated with the VPC.</p> </li>
        /// <li> <p> <code>is-default</code> - Indicates whether the VPC is the default VPC.</p> </li>
        /// <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the VPC.</p> </li>
        /// <li> <p> <code>state</code> - The state of the VPC (<code>pending</code> | <code>available</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>vpc-id</code> - The ID of the VPC.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `VpcIds`.
        ///
        /// To override the contents of this collection use [`set_vpc_ids`](Self::set_vpc_ids).
        ///
        /// <p>One or more VPC IDs.</p>
        /// <p>Default: Describes all your VPCs.</p>
        pub fn vpc_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_ids(input.into());
            self
        }
        /// <p>One or more VPC IDs.</p>
        /// <p>Default: Describes all your VPCs.</p>
        pub fn set_vpc_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpc_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `DescribeVpnConnections`.
    ///
    /// <p>Describes one or more of your VPN connections.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html">Amazon Web Services Site-to-Site VPN</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpnConnections {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpn_connections_input::Builder,
    }
    impl DescribeVpnConnections {
        /// Creates a new `DescribeVpnConnections`.
        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::DescribeVpnConnections,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpnConnectionsError>,
        > {
            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::DescribeVpnConnectionsOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpnConnectionsError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>customer-gateway-configuration</code> - The configuration information for the customer gateway.</p> </li>
        /// <li> <p> <code>customer-gateway-id</code> - The ID of a customer gateway associated with the VPN connection.</p> </li>
        /// <li> <p> <code>state</code> - The state of the VPN connection (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>option.static-routes-only</code> - Indicates whether the connection has static routes only. Used for devices that do not support Border Gateway Protocol (BGP).</p> </li>
        /// <li> <p> <code>route.destination-cidr-block</code> - The destination CIDR block. This corresponds to the subnet used in a customer data center.</p> </li>
        /// <li> <p> <code>bgp-asn</code> - The BGP Autonomous System Number (ASN) associated with a BGP device.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>type</code> - The type of VPN connection. Currently the only supported type is <code>ipsec.1</code>.</p> </li>
        /// <li> <p> <code>vpn-connection-id</code> - The ID of the VPN connection.</p> </li>
        /// <li> <p> <code>vpn-gateway-id</code> - The ID of a virtual private gateway associated with the VPN connection.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of a transit gateway associated with the VPN connection.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>customer-gateway-configuration</code> - The configuration information for the customer gateway.</p> </li>
        /// <li> <p> <code>customer-gateway-id</code> - The ID of a customer gateway associated with the VPN connection.</p> </li>
        /// <li> <p> <code>state</code> - The state of the VPN connection (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>option.static-routes-only</code> - Indicates whether the connection has static routes only. Used for devices that do not support Border Gateway Protocol (BGP).</p> </li>
        /// <li> <p> <code>route.destination-cidr-block</code> - The destination CIDR block. This corresponds to the subnet used in a customer data center.</p> </li>
        /// <li> <p> <code>bgp-asn</code> - The BGP Autonomous System Number (ASN) associated with a BGP device.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>type</code> - The type of VPN connection. Currently the only supported type is <code>ipsec.1</code>.</p> </li>
        /// <li> <p> <code>vpn-connection-id</code> - The ID of the VPN connection.</p> </li>
        /// <li> <p> <code>vpn-gateway-id</code> - The ID of a virtual private gateway associated with the VPN connection.</p> </li>
        /// <li> <p> <code>transit-gateway-id</code> - The ID of a transit gateway associated with the VPN connection.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `VpnConnectionIds`.
        ///
        /// To override the contents of this collection use [`set_vpn_connection_ids`](Self::set_vpn_connection_ids).
        ///
        /// <p>One or more VPN connection IDs.</p>
        /// <p>Default: Describes your VPN connections.</p>
        pub fn vpn_connection_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_ids(input.into());
            self
        }
        /// <p>One or more VPN connection IDs.</p>
        /// <p>Default: Describes your VPN connections.</p>
        pub fn set_vpn_connection_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DescribeVpnGateways`.
    ///
    /// <p>Describes one or more of your virtual private gateways.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html">Amazon Web Services Site-to-Site VPN</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DescribeVpnGateways {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::describe_vpn_gateways_input::Builder,
    }
    impl DescribeVpnGateways {
        /// Creates a new `DescribeVpnGateways`.
        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::DescribeVpnGateways,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpnGatewaysError>,
        > {
            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::DescribeVpnGatewaysOutput,
            aws_smithy_http::result::SdkError<crate::error::DescribeVpnGatewaysError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>amazon-side-asn</code> - The Autonomous System Number (ASN) for the Amazon side of the gateway.</p> </li>
        /// <li> <p> <code>attachment.state</code> - The current state of the attachment between the gateway and the VPC (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>
        /// <li> <p> <code>attachment.vpc-id</code> - The ID of an attached VPC.</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone for the virtual private gateway (if applicable).</p> </li>
        /// <li> <p> <code>state</code> - The state of the virtual private gateway (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>type</code> - The type of virtual private gateway. Currently the only supported type is <code>ipsec.1</code>.</p> </li>
        /// <li> <p> <code>vpn-gateway-id</code> - The ID of the virtual private gateway.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>amazon-side-asn</code> - The Autonomous System Number (ASN) for the Amazon side of the gateway.</p> </li>
        /// <li> <p> <code>attachment.state</code> - The current state of the attachment between the gateway and the VPC (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li>
        /// <li> <p> <code>attachment.vpc-id</code> - The ID of an attached VPC.</p> </li>
        /// <li> <p> <code>availability-zone</code> - The Availability Zone for the virtual private gateway (if applicable).</p> </li>
        /// <li> <p> <code>state</code> - The state of the virtual private gateway (<code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code>).</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// <li> <p> <code>type</code> - The type of virtual private gateway. Currently the only supported type is <code>ipsec.1</code>.</p> </li>
        /// <li> <p> <code>vpn-gateway-id</code> - The ID of the virtual private gateway.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// Appends an item to `VpnGatewayIds`.
        ///
        /// To override the contents of this collection use [`set_vpn_gateway_ids`](Self::set_vpn_gateway_ids).
        ///
        /// <p>One or more virtual private gateway IDs.</p>
        /// <p>Default: Describes all your virtual private gateways.</p>
        pub fn vpn_gateway_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_gateway_ids(input.into());
            self
        }
        /// <p>One or more virtual private gateway IDs.</p>
        /// <p>Default: Describes all your virtual private gateways.</p>
        pub fn set_vpn_gateway_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpn_gateway_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DetachClassicLinkVpc`.
    ///
    /// <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    /// <p>Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance has been unlinked, the VPC security groups are no longer associated with it. An instance is automatically unlinked from a VPC when it's stopped.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DetachClassicLinkVpc {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::detach_classic_link_vpc_input::Builder,
    }
    impl DetachClassicLinkVpc {
        /// Creates a new `DetachClassicLinkVpc`.
        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::DetachClassicLinkVpc,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DetachClassicLinkVpcError>,
        > {
            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::DetachClassicLinkVpcOutput,
            aws_smithy_http::result::SdkError<crate::error::DetachClassicLinkVpcError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance to unlink from the VPC.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance to unlink from the VPC.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The ID of the VPC to which the instance is linked.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC to which the instance is linked.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DetachInternetGateway`.
    ///
    /// <p>Detaches an internet gateway from a VPC, disabling connectivity between the internet and the VPC. The VPC must not contain any running instances with Elastic IP addresses or public IPv4 addresses.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DetachInternetGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::detach_internet_gateway_input::Builder,
    }
    impl DetachInternetGateway {
        /// Creates a new `DetachInternetGateway`.
        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::DetachInternetGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DetachInternetGatewayError>,
        > {
            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::DetachInternetGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DetachInternetGatewayError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the internet gateway.</p>
        pub fn internet_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.internet_gateway_id(input.into());
            self
        }
        /// <p>The ID of the internet gateway.</p>
        pub fn set_internet_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_internet_gateway_id(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DetachNetworkInterface`.
    ///
    /// <p>Detaches a network interface from an instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DetachNetworkInterface {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::detach_network_interface_input::Builder,
    }
    impl DetachNetworkInterface {
        /// Creates a new `DetachNetworkInterface`.
        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::DetachNetworkInterface,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DetachNetworkInterfaceError>,
        > {
            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::DetachNetworkInterfaceOutput,
            aws_smithy_http::result::SdkError<crate::error::DetachNetworkInterfaceError>,
        > {
            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 attachment.</p>
        pub fn attachment_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Specifies whether to force a detachment.</p> <note>
        /// <ul>
        /// <li> <p>Use the <code>Force</code> parameter only as a last resort to detach a network interface from a failed instance. </p> </li>
        /// <li> <p>If you use the <code>Force</code> parameter to detach a network interface, you might not be able to attach a different network interface to the same index on the instance without first stopping and starting the instance.</p> </li>
        /// <li> <p>If you force the detachment of a network interface, the <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">instance metadata</a> might not get updated. This means that the attributes associated with the detached network interface might still be visible. The instance metadata will get updated when you stop and start the instance.</p> </li>
        /// </ul>
        /// </note>
        pub fn force(mut self, input: bool) -> Self {
            self.inner = self.inner.force(input);
            self
        }
        /// <p>Specifies whether to force a detachment.</p> <note>
        /// <ul>
        /// <li> <p>Use the <code>Force</code> parameter only as a last resort to detach a network interface from a failed instance. </p> </li>
        /// <li> <p>If you use the <code>Force</code> parameter to detach a network interface, you might not be able to attach a different network interface to the same index on the instance without first stopping and starting the instance.</p> </li>
        /// <li> <p>If you force the detachment of a network interface, the <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">instance metadata</a> might not get updated. This means that the attributes associated with the detached network interface might still be visible. The instance metadata will get updated when you stop and start the instance.</p> </li>
        /// </ul>
        /// </note>
        pub fn set_force(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_force(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DetachVerifiedAccessTrustProvider`.
    ///
    /// <p>Detach a trust provider from an Amazon Web Services Verified Access instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DetachVerifiedAccessTrustProvider {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::detach_verified_access_trust_provider_input::Builder,
    }
    impl DetachVerifiedAccessTrustProvider {
        /// Creates a new `DetachVerifiedAccessTrustProvider`.
        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::DetachVerifiedAccessTrustProvider,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DetachVerifiedAccessTrustProviderError>,
        > {
            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::DetachVerifiedAccessTrustProviderOutput,
            aws_smithy_http::result::SdkError<crate::error::DetachVerifiedAccessTrustProviderError>,
        > {
            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 Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
        pub fn verified_access_trust_provider_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_trust_provider_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
        pub fn set_verified_access_trust_provider_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_trust_provider_id(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DetachVolume`.
    ///
    /// <p>Detaches an EBS volume from an instance. Make sure to unmount any file systems on the device within your operating system before detaching the volume. Failure to do so can result in the volume becoming stuck in the <code>busy</code> state while detaching. If this happens, detachment can be delayed indefinitely until you unmount the volume, force detachment, reboot the instance, or all three. If an EBS volume is the root device of an instance, it can't be detached while the instance is running. To detach the root volume, stop the instance first.</p>
    /// <p>When a volume with an Amazon Web Services Marketplace product code is detached from an instance, the product code is no longer associated with the instance.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html">Detach an Amazon EBS volume</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DetachVolume {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::detach_volume_input::Builder,
    }
    impl DetachVolume {
        /// Creates a new `DetachVolume`.
        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::DetachVolume,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DetachVolumeError>,
        > {
            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::DetachVolumeOutput,
            aws_smithy_http::result::SdkError<crate::error::DetachVolumeError>,
        > {
            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 device name.</p>
        pub fn device(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.device(input.into());
            self
        }
        /// <p>The device name.</p>
        pub fn set_device(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_device(input);
            self
        }
        /// <p>Forces detachment if the previous detachment attempt did not occur cleanly (for example, logging into an instance, unmounting the volume, and detaching normally). This option can lead to data loss or a corrupted file system. Use this option only as a last resort to detach a volume from a failed instance. The instance won't have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures.</p>
        pub fn force(mut self, input: bool) -> Self {
            self.inner = self.inner.force(input);
            self
        }
        /// <p>Forces detachment if the previous detachment attempt did not occur cleanly (for example, logging into an instance, unmounting the volume, and detaching normally). This option can lead to data loss or a corrupted file system. Use this option only as a last resort to detach a volume from a failed instance. The instance won't have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures.</p>
        pub fn set_force(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_force(input);
            self
        }
        /// <p>The ID of the instance. If you are detaching a Multi-Attach enabled volume, you must specify an instance ID.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance. If you are detaching a Multi-Attach enabled volume, you must specify an instance ID.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn volume_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_id(input.into());
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn set_volume_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_volume_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DetachVpnGateway`.
    ///
    /// <p>Detaches a virtual private gateway from a VPC. You do this if you're planning to turn off the VPC and not use it anymore. You can confirm a virtual private gateway has been completely detached from a VPC by describing the virtual private gateway (any attachments to the virtual private gateway are also described).</p>
    /// <p>You must wait for the attachment's state to switch to <code>detached</code> before you can delete the VPC or attach a different VPC to the virtual private gateway.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DetachVpnGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::detach_vpn_gateway_input::Builder,
    }
    impl DetachVpnGateway {
        /// Creates a new `DetachVpnGateway`.
        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::DetachVpnGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DetachVpnGatewayError>,
        > {
            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::DetachVpnGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::DetachVpnGatewayError>,
        > {
            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 VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>The ID of the virtual private gateway.</p>
        pub fn vpn_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_gateway_id(input.into());
            self
        }
        /// <p>The ID of the virtual private gateway.</p>
        pub fn set_vpn_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_gateway_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableAddressTransfer`.
    ///
    /// <p>Disables Elastic IP address transfer. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro">Transfer Elastic IP addresses</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableAddressTransfer {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_address_transfer_input::Builder,
    }
    impl DisableAddressTransfer {
        /// Creates a new `DisableAddressTransfer`.
        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::DisableAddressTransfer,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableAddressTransferError>,
        > {
            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::DisableAddressTransferOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableAddressTransferError>,
        > {
            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 allocation ID of an Elastic IP address.</p>
        pub fn allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_id(input.into());
            self
        }
        /// <p>The allocation ID of an Elastic IP address.</p>
        pub fn set_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_allocation_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableAwsNetworkPerformanceMetricSubscription`.
    ///
    /// <p>Disables Infrastructure Performance metric subscriptions.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableAwsNetworkPerformanceMetricSubscription {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_aws_network_performance_metric_subscription_input::Builder,
    }
    impl DisableAwsNetworkPerformanceMetricSubscription {
        /// Creates a new `DisableAwsNetworkPerformanceMetricSubscription`.
        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::DisableAwsNetworkPerformanceMetricSubscription,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DisableAwsNetworkPerformanceMetricSubscriptionError,
            >,
        > {
            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::DisableAwsNetworkPerformanceMetricSubscriptionOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DisableAwsNetworkPerformanceMetricSubscriptionError,
            >,
        > {
            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 source Region or Availability Zone that the metric subscription is disabled for. For example, <code>us-east-1</code>.</p>
        pub fn source(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source(input.into());
            self
        }
        /// <p>The source Region or Availability Zone that the metric subscription is disabled for. For example, <code>us-east-1</code>.</p>
        pub fn set_source(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_source(input);
            self
        }
        /// <p>The target Region or Availability Zone that the metric subscription is disabled for. For example, <code>eu-north-1</code>.</p>
        pub fn destination(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination(input.into());
            self
        }
        /// <p>The target Region or Availability Zone that the metric subscription is disabled for. For example, <code>eu-north-1</code>.</p>
        pub fn set_destination(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_destination(input);
            self
        }
        /// <p>The metric used for the disabled subscription.</p>
        pub fn metric(mut self, input: crate::model::MetricType) -> Self {
            self.inner = self.inner.metric(input);
            self
        }
        /// <p>The metric used for the disabled subscription.</p>
        pub fn set_metric(mut self, input: std::option::Option<crate::model::MetricType>) -> Self {
            self.inner = self.inner.set_metric(input);
            self
        }
        /// <p>The statistic used for the disabled subscription. </p>
        pub fn statistic(mut self, input: crate::model::StatisticType) -> Self {
            self.inner = self.inner.statistic(input);
            self
        }
        /// <p>The statistic used for the disabled subscription. </p>
        pub fn set_statistic(
            mut self,
            input: std::option::Option<crate::model::StatisticType>,
        ) -> Self {
            self.inner = self.inner.set_statistic(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableEbsEncryptionByDefault`.
    ///
    /// <p>Disables EBS encryption by default for your account in the current Region.</p>
    /// <p>After you disable encryption by default, you can still create encrypted volumes by enabling encryption when you create each volume.</p>
    /// <p>Disabling encryption by default does not change the encryption status of your existing volumes.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableEbsEncryptionByDefault {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_ebs_encryption_by_default_input::Builder,
    }
    impl DisableEbsEncryptionByDefault {
        /// Creates a new `DisableEbsEncryptionByDefault`.
        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::DisableEbsEncryptionByDefault,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableEbsEncryptionByDefaultError>,
        > {
            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::DisableEbsEncryptionByDefaultOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableEbsEncryptionByDefaultError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableFastLaunch`.
    ///
    /// <p>Discontinue faster launching for a Windows AMI, and clean up existing pre-provisioned snapshots. When you disable faster launching, the AMI uses the standard launch process for each instance. All pre-provisioned snapshots must be removed before you can enable faster launching again.</p> <note>
    /// <p>To change these settings, you must own the AMI.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableFastLaunch {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_fast_launch_input::Builder,
    }
    impl DisableFastLaunch {
        /// Creates a new `DisableFastLaunch`.
        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::DisableFastLaunch,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableFastLaunchError>,
        > {
            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::DisableFastLaunchOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableFastLaunchError>,
        > {
            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 image for which you’re turning off faster launching, and removing pre-provisioned snapshots.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the image for which you’re turning off faster launching, and removing pre-provisioned snapshots.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>Forces the image settings to turn off faster launching for your Windows AMI. This parameter overrides any errors that are encountered while cleaning up resources in your account.</p>
        pub fn force(mut self, input: bool) -> Self {
            self.inner = self.inner.force(input);
            self
        }
        /// <p>Forces the image settings to turn off faster launching for your Windows AMI. This parameter overrides any errors that are encountered while cleaning up resources in your account.</p>
        pub fn set_force(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_force(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableFastSnapshotRestores`.
    ///
    /// <p>Disables fast snapshot restores for the specified snapshots in the specified Availability Zones.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableFastSnapshotRestores {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_fast_snapshot_restores_input::Builder,
    }
    impl DisableFastSnapshotRestores {
        /// Creates a new `DisableFastSnapshotRestores`.
        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::DisableFastSnapshotRestores,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableFastSnapshotRestoresError>,
        > {
            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::DisableFastSnapshotRestoresOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableFastSnapshotRestoresError>,
        > {
            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 `AvailabilityZones`.
        ///
        /// To override the contents of this collection use [`set_availability_zones`](Self::set_availability_zones).
        ///
        /// <p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p>
        pub fn availability_zones(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zones(input.into());
            self
        }
        /// <p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p>
        pub fn set_availability_zones(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_availability_zones(input);
            self
        }
        /// Appends an item to `SourceSnapshotIds`.
        ///
        /// To override the contents of this collection use [`set_source_snapshot_ids`](Self::set_source_snapshot_ids).
        ///
        /// <p>The IDs of one or more snapshots. For example, <code>snap-1234567890abcdef0</code>.</p>
        pub fn source_snapshot_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_snapshot_ids(input.into());
            self
        }
        /// <p>The IDs of one or more snapshots. For example, <code>snap-1234567890abcdef0</code>.</p>
        pub fn set_source_snapshot_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_source_snapshot_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableImageDeprecation`.
    ///
    /// <p>Cancels the deprecation of the specified AMI.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html">Deprecate an AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableImageDeprecation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_image_deprecation_input::Builder,
    }
    impl DisableImageDeprecation {
        /// Creates a new `DisableImageDeprecation`.
        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::DisableImageDeprecation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableImageDeprecationError>,
        > {
            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::DisableImageDeprecationOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableImageDeprecationError>,
        > {
            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 AMI.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableIpamOrganizationAdminAccount`.
    ///
    /// <p>Disable the IPAM account. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html">Enable integration with Organizations</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableIpamOrganizationAdminAccount {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_ipam_organization_admin_account_input::Builder,
    }
    impl DisableIpamOrganizationAdminAccount {
        /// Creates a new `DisableIpamOrganizationAdminAccount`.
        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::DisableIpamOrganizationAdminAccount,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DisableIpamOrganizationAdminAccountError,
            >,
        > {
            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::DisableIpamOrganizationAdminAccountOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DisableIpamOrganizationAdminAccountError,
            >,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The Organizations member account ID that you want to disable as IPAM account.</p>
        pub fn delegated_admin_account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.delegated_admin_account_id(input.into());
            self
        }
        /// <p>The Organizations member account ID that you want to disable as IPAM account.</p>
        pub fn set_delegated_admin_account_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_delegated_admin_account_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableSerialConsoleAccess`.
    ///
    /// <p>Disables access to the EC2 serial console of all instances for your account. By default, access to the EC2 serial console is disabled for your account. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access">Manage account access to the EC2 serial console</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableSerialConsoleAccess {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_serial_console_access_input::Builder,
    }
    impl DisableSerialConsoleAccess {
        /// Creates a new `DisableSerialConsoleAccess`.
        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::DisableSerialConsoleAccess,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableSerialConsoleAccessError>,
        > {
            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::DisableSerialConsoleAccessOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableSerialConsoleAccessError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableTransitGatewayRouteTablePropagation`.
    ///
    /// <p>Disables the specified resource attachment from propagating routes to the specified propagation route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableTransitGatewayRouteTablePropagation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_transit_gateway_route_table_propagation_input::Builder,
    }
    impl DisableTransitGatewayRouteTablePropagation {
        /// Creates a new `DisableTransitGatewayRouteTablePropagation`.
        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::DisableTransitGatewayRouteTablePropagation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DisableTransitGatewayRouteTablePropagationError,
            >,
        > {
            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::DisableTransitGatewayRouteTablePropagationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DisableTransitGatewayRouteTablePropagationError,
            >,
        > {
            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 propagation route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the propagation route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the route table announcement.</p>
        pub fn transit_gateway_route_table_announcement_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .transit_gateway_route_table_announcement_id(input.into());
            self
        }
        /// <p>The ID of the route table announcement.</p>
        pub fn set_transit_gateway_route_table_announcement_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_transit_gateway_route_table_announcement_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableVgwRoutePropagation`.
    ///
    /// <p>Disables a virtual private gateway (VGW) from propagating routes to a specified route table of a VPC.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableVgwRoutePropagation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_vgw_route_propagation_input::Builder,
    }
    impl DisableVgwRoutePropagation {
        /// Creates a new `DisableVgwRoutePropagation`.
        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::DisableVgwRoutePropagation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableVgwRoutePropagationError>,
        > {
            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::DisableVgwRoutePropagationOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableVgwRoutePropagationError>,
        > {
            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 virtual private gateway.</p>
        pub fn gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.gateway_id(input.into());
            self
        }
        /// <p>The ID of the virtual private gateway.</p>
        pub fn set_gateway_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_gateway_id(input);
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn route_table_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn set_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_route_table_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableVpcClassicLink`.
    ///
    /// <p>Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC that has EC2-Classic instances linked to it.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableVpcClassicLink {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_vpc_classic_link_input::Builder,
    }
    impl DisableVpcClassicLink {
        /// Creates a new `DisableVpcClassicLink`.
        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::DisableVpcClassicLink,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableVpcClassicLinkError>,
        > {
            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::DisableVpcClassicLinkOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableVpcClassicLinkError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisableVpcClassicLinkDnsSupport`.
    ///
    /// <p>Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve to public IP addresses when addressed between a linked EC2-Classic instance and instances in the VPC to which it's linked. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html">ClassicLink</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>You must specify a VPC ID in the request.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisableVpcClassicLinkDnsSupport {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disable_vpc_classic_link_dns_support_input::Builder,
    }
    impl DisableVpcClassicLinkDnsSupport {
        /// Creates a new `DisableVpcClassicLinkDnsSupport`.
        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::DisableVpcClassicLinkDnsSupport,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisableVpcClassicLinkDnsSupportError>,
        > {
            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::DisableVpcClassicLinkDnsSupportOutput,
            aws_smithy_http::result::SdkError<crate::error::DisableVpcClassicLinkDnsSupportError>,
        > {
            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 VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateAddress`.
    ///
    /// <p>Disassociates an Elastic IP address from the instance or network interface it's associated with.</p>
    /// <p>An Elastic IP address is for use in either the EC2-Classic platform or in a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    /// <p>This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateAddress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_address_input::Builder,
    }
    impl DisassociateAddress {
        /// Creates a new `DisassociateAddress`.
        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::DisassociateAddress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisassociateAddressError>,
        > {
            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::DisassociateAddressOutput,
            aws_smithy_http::result::SdkError<crate::error::DisassociateAddressError>,
        > {
            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>[EC2-VPC] The association ID. Required for EC2-VPC.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>[EC2-VPC] The association ID. Required for EC2-VPC.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
        /// <p>[EC2-Classic] The Elastic IP address. Required for EC2-Classic.</p>
        pub fn public_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ip(input.into());
            self
        }
        /// <p>[EC2-Classic] The Elastic IP address. Required for EC2-Classic.</p>
        pub fn set_public_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_public_ip(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateClientVpnTargetNetwork`.
    ///
    /// <p>Disassociates a target network from the specified Client VPN endpoint. When you disassociate the last target network from a Client VPN, the following happens:</p>
    /// <ul>
    /// <li> <p>The route that was automatically added for the VPC is deleted</p> </li>
    /// <li> <p>All active client connections are terminated</p> </li>
    /// <li> <p>New client connections are disallowed</p> </li>
    /// <li> <p>The Client VPN endpoint's status changes to <code>pending-associate</code> </p> </li>
    /// </ul>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateClientVpnTargetNetwork {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_client_vpn_target_network_input::Builder,
    }
    impl DisassociateClientVpnTargetNetwork {
        /// Creates a new `DisassociateClientVpnTargetNetwork`.
        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::DisassociateClientVpnTargetNetwork,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateClientVpnTargetNetworkError,
            >,
        > {
            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::DisassociateClientVpnTargetNetworkOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateClientVpnTargetNetworkError,
            >,
        > {
            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 Client VPN endpoint from which to disassociate the target network.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint from which to disassociate the target network.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The ID of the target network association.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The ID of the target network association.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateEnclaveCertificateIamRole`.
    ///
    /// <p>Disassociates an IAM role from an Certificate Manager (ACM) certificate. Disassociating an IAM role from an ACM certificate removes the Amazon S3 object that contains the certificate, certificate chain, and encrypted private key from the Amazon S3 bucket. It also revokes the IAM role's permission to use the KMS key used to encrypt the private key. This effectively revokes the role's permission to use the certificate.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateEnclaveCertificateIamRole {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_enclave_certificate_iam_role_input::Builder,
    }
    impl DisassociateEnclaveCertificateIamRole {
        /// Creates a new `DisassociateEnclaveCertificateIamRole`.
        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::DisassociateEnclaveCertificateIamRole,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateEnclaveCertificateIamRoleError,
            >,
        > {
            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::DisassociateEnclaveCertificateIamRoleOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateEnclaveCertificateIamRoleError,
            >,
        > {
            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 ARN of the ACM certificate from which to disassociate the IAM role.</p>
        pub fn certificate_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.certificate_arn(input.into());
            self
        }
        /// <p>The ARN of the ACM certificate from which to disassociate the IAM role.</p>
        pub fn set_certificate_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_certificate_arn(input);
            self
        }
        /// <p>The ARN of the IAM role to disassociate.</p>
        pub fn role_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.role_arn(input.into());
            self
        }
        /// <p>The ARN of the IAM role to disassociate.</p>
        pub fn set_role_arn(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_role_arn(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateIamInstanceProfile`.
    ///
    /// <p>Disassociates an IAM instance profile from a running or stopped instance.</p>
    /// <p>Use <code>DescribeIamInstanceProfileAssociations</code> to get the association ID.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateIamInstanceProfile {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_iam_instance_profile_input::Builder,
    }
    impl DisassociateIamInstanceProfile {
        /// Creates a new `DisassociateIamInstanceProfile`.
        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::DisassociateIamInstanceProfile,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisassociateIamInstanceProfileError>,
        > {
            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::DisassociateIamInstanceProfileOutput,
            aws_smithy_http::result::SdkError<crate::error::DisassociateIamInstanceProfileError>,
        > {
            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 IAM instance profile association.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The ID of the IAM instance profile association.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateInstanceEventWindow`.
    ///
    /// <p>Disassociates one or more targets from an event window.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html">Define event windows for scheduled events</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateInstanceEventWindow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_instance_event_window_input::Builder,
    }
    impl DisassociateInstanceEventWindow {
        /// Creates a new `DisassociateInstanceEventWindow`.
        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::DisassociateInstanceEventWindow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisassociateInstanceEventWindowError>,
        > {
            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::DisassociateInstanceEventWindowOutput,
            aws_smithy_http::result::SdkError<crate::error::DisassociateInstanceEventWindowError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the event window.</p>
        pub fn instance_event_window_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_event_window_id(input.into());
            self
        }
        /// <p>The ID of the event window.</p>
        pub fn set_instance_event_window_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_event_window_id(input);
            self
        }
        /// <p>One or more targets to disassociate from the specified event window.</p>
        pub fn association_target(
            mut self,
            input: crate::model::InstanceEventWindowDisassociationRequest,
        ) -> Self {
            self.inner = self.inner.association_target(input);
            self
        }
        /// <p>One or more targets to disassociate from the specified event window.</p>
        pub fn set_association_target(
            mut self,
            input: std::option::Option<crate::model::InstanceEventWindowDisassociationRequest>,
        ) -> Self {
            self.inner = self.inner.set_association_target(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateRouteTable`.
    ///
    /// <p>Disassociates a subnet or gateway from a route table.</p>
    /// <p>After you perform this action, the subnet no longer uses the routes in the route table. Instead, it uses the routes in the VPC's main route table. For more information about route tables, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html">Route tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_route_table_input::Builder,
    }
    impl DisassociateRouteTable {
        /// Creates a new `DisassociateRouteTable`.
        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::DisassociateRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisassociateRouteTableError>,
        > {
            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::DisassociateRouteTableOutput,
            aws_smithy_http::result::SdkError<crate::error::DisassociateRouteTableError>,
        > {
            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 association ID representing the current association between the route table and subnet or gateway.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The association ID representing the current association between the route table and subnet or gateway.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateSubnetCidrBlock`.
    ///
    /// <p>Disassociates a CIDR block from a subnet. Currently, you can disassociate an IPv6 CIDR block only. You must detach or delete all gateways and resources that are associated with the CIDR block before you can disassociate it. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateSubnetCidrBlock {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_subnet_cidr_block_input::Builder,
    }
    impl DisassociateSubnetCidrBlock {
        /// Creates a new `DisassociateSubnetCidrBlock`.
        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::DisassociateSubnetCidrBlock,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisassociateSubnetCidrBlockError>,
        > {
            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::DisassociateSubnetCidrBlockOutput,
            aws_smithy_http::result::SdkError<crate::error::DisassociateSubnetCidrBlockError>,
        > {
            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 association ID for the CIDR block.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The association ID for the CIDR block.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateTransitGatewayMulticastDomain`.
    ///
    /// <p>Disassociates the specified subnets from the transit gateway multicast domain. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateTransitGatewayMulticastDomain {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_transit_gateway_multicast_domain_input::Builder,
    }
    impl DisassociateTransitGatewayMulticastDomain {
        /// Creates a new `DisassociateTransitGatewayMulticastDomain`.
        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::DisassociateTransitGatewayMulticastDomain,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateTransitGatewayMulticastDomainError,
            >,
        > {
            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::DisassociateTransitGatewayMulticastDomainOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateTransitGatewayMulticastDomainError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// Appends an item to `SubnetIds`.
        ///
        /// To override the contents of this collection use [`set_subnet_ids`](Self::set_subnet_ids).
        ///
        /// <p>The IDs of the subnets;</p>
        pub fn subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_ids(input.into());
            self
        }
        /// <p>The IDs of the subnets;</p>
        pub fn set_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_subnet_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateTransitGatewayPolicyTable`.
    ///
    /// <p>Removes the association between an an attachment and a policy table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateTransitGatewayPolicyTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_transit_gateway_policy_table_input::Builder,
    }
    impl DisassociateTransitGatewayPolicyTable {
        /// Creates a new `DisassociateTransitGatewayPolicyTable`.
        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::DisassociateTransitGatewayPolicyTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateTransitGatewayPolicyTableError,
            >,
        > {
            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::DisassociateTransitGatewayPolicyTableOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateTransitGatewayPolicyTableError,
            >,
        > {
            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 disassociated policy table.</p>
        pub fn transit_gateway_policy_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_policy_table_id(input.into());
            self
        }
        /// <p>The ID of the disassociated policy table.</p>
        pub fn set_transit_gateway_policy_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_policy_table_id(input);
            self
        }
        /// <p>The ID of the transit gateway attachment to disassociate from the policy table.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway attachment to disassociate from the policy table.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateTransitGatewayRouteTable`.
    ///
    /// <p>Disassociates a resource attachment from a transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateTransitGatewayRouteTable {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_transit_gateway_route_table_input::Builder,
    }
    impl DisassociateTransitGatewayRouteTable {
        /// Creates a new `DisassociateTransitGatewayRouteTable`.
        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::DisassociateTransitGatewayRouteTable,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateTransitGatewayRouteTableError,
            >,
        > {
            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::DisassociateTransitGatewayRouteTableOutput,
            aws_smithy_http::result::SdkError<
                crate::error::DisassociateTransitGatewayRouteTableError,
            >,
        > {
            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 transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateTrunkInterface`.
    ///
    /// <note>
    /// <p>This API action is currently in <b>limited preview only</b>. If you are interested in using this feature, contact your account manager.</p>
    /// </note>
    /// <p>Removes an association between a branch network interface with a trunk network interface.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateTrunkInterface {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_trunk_interface_input::Builder,
    }
    impl DisassociateTrunkInterface {
        /// Creates a new `DisassociateTrunkInterface`.
        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::DisassociateTrunkInterface,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisassociateTrunkInterfaceError>,
        > {
            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::DisassociateTrunkInterfaceOutput,
            aws_smithy_http::result::SdkError<crate::error::DisassociateTrunkInterfaceError>,
        > {
            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 association</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The ID of the association</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `DisassociateVpcCidrBlock`.
    ///
    /// <p>Disassociates a CIDR block from a VPC. To disassociate the CIDR block, you must specify its association ID. You can get the association ID by using <code>DescribeVpcs</code>. You must detach or delete all gateways and resources that are associated with the CIDR block before you can disassociate it. </p>
    /// <p>You cannot disassociate the CIDR block with which you originally created the VPC (the primary CIDR block).</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct DisassociateVpcCidrBlock {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::disassociate_vpc_cidr_block_input::Builder,
    }
    impl DisassociateVpcCidrBlock {
        /// Creates a new `DisassociateVpcCidrBlock`.
        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::DisassociateVpcCidrBlock,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::DisassociateVpcCidrBlockError>,
        > {
            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::DisassociateVpcCidrBlockOutput,
            aws_smithy_http::result::SdkError<crate::error::DisassociateVpcCidrBlockError>,
        > {
            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 association ID for the CIDR block.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The association ID for the CIDR block.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableAddressTransfer`.
    ///
    /// <p>Enables Elastic IP address transfer. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro">Transfer Elastic IP addresses</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableAddressTransfer {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_address_transfer_input::Builder,
    }
    impl EnableAddressTransfer {
        /// Creates a new `EnableAddressTransfer`.
        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::EnableAddressTransfer,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableAddressTransferError>,
        > {
            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::EnableAddressTransferOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableAddressTransferError>,
        > {
            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 allocation ID of an Elastic IP address.</p>
        pub fn allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_id(input.into());
            self
        }
        /// <p>The allocation ID of an Elastic IP address.</p>
        pub fn set_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_allocation_id(input);
            self
        }
        /// <p>The ID of the account that you want to transfer the Elastic IP address to.</p>
        pub fn transfer_account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transfer_account_id(input.into());
            self
        }
        /// <p>The ID of the account that you want to transfer the Elastic IP address to.</p>
        pub fn set_transfer_account_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transfer_account_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableAwsNetworkPerformanceMetricSubscription`.
    ///
    /// <p>Enables Infrastructure Performance subscriptions.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableAwsNetworkPerformanceMetricSubscription {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_aws_network_performance_metric_subscription_input::Builder,
    }
    impl EnableAwsNetworkPerformanceMetricSubscription {
        /// Creates a new `EnableAwsNetworkPerformanceMetricSubscription`.
        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::EnableAwsNetworkPerformanceMetricSubscription,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::EnableAwsNetworkPerformanceMetricSubscriptionError,
            >,
        > {
            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::EnableAwsNetworkPerformanceMetricSubscriptionOutput,
            aws_smithy_http::result::SdkError<
                crate::error::EnableAwsNetworkPerformanceMetricSubscriptionError,
            >,
        > {
            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 source Region or Availability Zone that the metric subscription is enabled for. For example, <code>us-east-1</code>.</p>
        pub fn source(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source(input.into());
            self
        }
        /// <p>The source Region or Availability Zone that the metric subscription is enabled for. For example, <code>us-east-1</code>.</p>
        pub fn set_source(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_source(input);
            self
        }
        /// <p>The target Region or Availability Zone that the metric subscription is enabled for. For example, <code>eu-west-1</code>.</p>
        pub fn destination(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination(input.into());
            self
        }
        /// <p>The target Region or Availability Zone that the metric subscription is enabled for. For example, <code>eu-west-1</code>.</p>
        pub fn set_destination(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_destination(input);
            self
        }
        /// <p>The metric used for the enabled subscription.</p>
        pub fn metric(mut self, input: crate::model::MetricType) -> Self {
            self.inner = self.inner.metric(input);
            self
        }
        /// <p>The metric used for the enabled subscription.</p>
        pub fn set_metric(mut self, input: std::option::Option<crate::model::MetricType>) -> Self {
            self.inner = self.inner.set_metric(input);
            self
        }
        /// <p>The statistic used for the enabled subscription.</p>
        pub fn statistic(mut self, input: crate::model::StatisticType) -> Self {
            self.inner = self.inner.statistic(input);
            self
        }
        /// <p>The statistic used for the enabled subscription.</p>
        pub fn set_statistic(
            mut self,
            input: std::option::Option<crate::model::StatisticType>,
        ) -> Self {
            self.inner = self.inner.set_statistic(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableEbsEncryptionByDefault`.
    ///
    /// <p>Enables EBS encryption by default for your account in the current Region.</p>
    /// <p>After you enable encryption by default, the EBS volumes that you create are always encrypted, either using the default KMS key or the KMS key that you specified when you created each volume. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>You can specify the default KMS key for encryption by default using <code>ModifyEbsDefaultKmsKeyId</code> or <code>ResetEbsDefaultKmsKeyId</code>.</p>
    /// <p>Enabling encryption by default has no effect on the encryption status of your existing volumes.</p>
    /// <p>After you enable encryption by default, you can no longer launch instances using instance types that do not support encryption. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances">Supported instance types</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableEbsEncryptionByDefault {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_ebs_encryption_by_default_input::Builder,
    }
    impl EnableEbsEncryptionByDefault {
        /// Creates a new `EnableEbsEncryptionByDefault`.
        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::EnableEbsEncryptionByDefault,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableEbsEncryptionByDefaultError>,
        > {
            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::EnableEbsEncryptionByDefaultOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableEbsEncryptionByDefaultError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableFastLaunch`.
    ///
    /// <p>When you enable faster launching for a Windows AMI, images are pre-provisioned, using snapshots to launch instances up to 65% faster. To create the optimized Windows image, Amazon EC2 launches an instance and runs through Sysprep steps, rebooting as required. Then it creates a set of reserved snapshots that are used for subsequent launches. The reserved snapshots are automatically replenished as they are used, depending on your settings for launch frequency.</p> <note>
    /// <p>To change these settings, you must own the AMI.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableFastLaunch {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_fast_launch_input::Builder,
    }
    impl EnableFastLaunch {
        /// Creates a new `EnableFastLaunch`.
        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::EnableFastLaunch,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableFastLaunchError>,
        > {
            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::EnableFastLaunchOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableFastLaunchError>,
        > {
            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 image for which you’re enabling faster launching.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the image for which you’re enabling faster launching.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>The type of resource to use for pre-provisioning the Windows AMI for faster launching. Supported values include: <code>snapshot</code>, which is the default value.</p>
        pub fn resource_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_type(input.into());
            self
        }
        /// <p>The type of resource to use for pre-provisioning the Windows AMI for faster launching. Supported values include: <code>snapshot</code>, which is the default value.</p>
        pub fn set_resource_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_resource_type(input);
            self
        }
        /// <p>Configuration settings for creating and managing the snapshots that are used for pre-provisioning the Windows AMI for faster launching. The associated <code>ResourceType</code> must be <code>snapshot</code>.</p>
        pub fn snapshot_configuration(
            mut self,
            input: crate::model::FastLaunchSnapshotConfigurationRequest,
        ) -> Self {
            self.inner = self.inner.snapshot_configuration(input);
            self
        }
        /// <p>Configuration settings for creating and managing the snapshots that are used for pre-provisioning the Windows AMI for faster launching. The associated <code>ResourceType</code> must be <code>snapshot</code>.</p>
        pub fn set_snapshot_configuration(
            mut self,
            input: std::option::Option<crate::model::FastLaunchSnapshotConfigurationRequest>,
        ) -> Self {
            self.inner = self.inner.set_snapshot_configuration(input);
            self
        }
        /// <p>The launch template to use when launching Windows instances from pre-provisioned snapshots. Launch template parameters can include either the name or ID of the launch template, but not both.</p>
        pub fn launch_template(
            mut self,
            input: crate::model::FastLaunchLaunchTemplateSpecificationRequest,
        ) -> Self {
            self.inner = self.inner.launch_template(input);
            self
        }
        /// <p>The launch template to use when launching Windows instances from pre-provisioned snapshots. Launch template parameters can include either the name or ID of the launch template, but not both.</p>
        pub fn set_launch_template(
            mut self,
            input: std::option::Option<crate::model::FastLaunchLaunchTemplateSpecificationRequest>,
        ) -> Self {
            self.inner = self.inner.set_launch_template(input);
            self
        }
        /// <p>The maximum number of parallel instances to launch for creating resources. Value must be <code>6</code> or greater. </p>
        pub fn max_parallel_launches(mut self, input: i32) -> Self {
            self.inner = self.inner.max_parallel_launches(input);
            self
        }
        /// <p>The maximum number of parallel instances to launch for creating resources. Value must be <code>6</code> or greater. </p>
        pub fn set_max_parallel_launches(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_parallel_launches(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableFastSnapshotRestores`.
    ///
    /// <p>Enables fast snapshot restores for the specified snapshots in the specified Availability Zones.</p>
    /// <p>You get the full benefit of fast snapshot restores after they enter the <code>enabled</code> state. To get the current state of fast snapshot restores, use <code>DescribeFastSnapshotRestores</code>. To disable fast snapshot restores, use <code>DisableFastSnapshotRestores</code>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-fast-snapshot-restore.html">Amazon EBS fast snapshot restore</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableFastSnapshotRestores {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_fast_snapshot_restores_input::Builder,
    }
    impl EnableFastSnapshotRestores {
        /// Creates a new `EnableFastSnapshotRestores`.
        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::EnableFastSnapshotRestores,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableFastSnapshotRestoresError>,
        > {
            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::EnableFastSnapshotRestoresOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableFastSnapshotRestoresError>,
        > {
            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 `AvailabilityZones`.
        ///
        /// To override the contents of this collection use [`set_availability_zones`](Self::set_availability_zones).
        ///
        /// <p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p>
        pub fn availability_zones(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zones(input.into());
            self
        }
        /// <p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p>
        pub fn set_availability_zones(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_availability_zones(input);
            self
        }
        /// Appends an item to `SourceSnapshotIds`.
        ///
        /// To override the contents of this collection use [`set_source_snapshot_ids`](Self::set_source_snapshot_ids).
        ///
        /// <p>The IDs of one or more snapshots. For example, <code>snap-1234567890abcdef0</code>. You can specify a snapshot that was shared with you from another Amazon Web Services account.</p>
        pub fn source_snapshot_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_snapshot_ids(input.into());
            self
        }
        /// <p>The IDs of one or more snapshots. For example, <code>snap-1234567890abcdef0</code>. You can specify a snapshot that was shared with you from another Amazon Web Services account.</p>
        pub fn set_source_snapshot_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_source_snapshot_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableImageDeprecation`.
    ///
    /// <p>Enables deprecation of the specified AMI at the specified date and time.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html">Deprecate an AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableImageDeprecation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_image_deprecation_input::Builder,
    }
    impl EnableImageDeprecation {
        /// Creates a new `EnableImageDeprecation`.
        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::EnableImageDeprecation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableImageDeprecationError>,
        > {
            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::EnableImageDeprecationOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableImageDeprecationError>,
        > {
            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 AMI.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>The date and time to deprecate the AMI, in UTC, in the following format: <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z. If you specify a value for seconds, Amazon EC2 rounds the seconds to the nearest minute.</p>
        /// <p>You can’t specify a date in the past. The upper limit for <code>DeprecateAt</code> is 10 years from now, except for public AMIs, where the upper limit is 2 years from the creation date.</p>
        pub fn deprecate_at(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.deprecate_at(input);
            self
        }
        /// <p>The date and time to deprecate the AMI, in UTC, in the following format: <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z. If you specify a value for seconds, Amazon EC2 rounds the seconds to the nearest minute.</p>
        /// <p>You can’t specify a date in the past. The upper limit for <code>DeprecateAt</code> is 10 years from now, except for public AMIs, where the upper limit is 2 years from the creation date.</p>
        pub fn set_deprecate_at(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_deprecate_at(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableIpamOrganizationAdminAccount`.
    ///
    /// <p>Enable an Organizations member account as the IPAM admin account. You cannot select the Organizations management account as the IPAM admin account. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html">Enable integration with Organizations</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableIpamOrganizationAdminAccount {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_ipam_organization_admin_account_input::Builder,
    }
    impl EnableIpamOrganizationAdminAccount {
        /// Creates a new `EnableIpamOrganizationAdminAccount`.
        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::EnableIpamOrganizationAdminAccount,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::EnableIpamOrganizationAdminAccountError,
            >,
        > {
            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::EnableIpamOrganizationAdminAccountOutput,
            aws_smithy_http::result::SdkError<
                crate::error::EnableIpamOrganizationAdminAccountError,
            >,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The Organizations member account ID that you want to enable as the IPAM account.</p>
        pub fn delegated_admin_account_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.delegated_admin_account_id(input.into());
            self
        }
        /// <p>The Organizations member account ID that you want to enable as the IPAM account.</p>
        pub fn set_delegated_admin_account_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_delegated_admin_account_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableReachabilityAnalyzerOrganizationSharing`.
    ///
    /// <p>Establishes a trust relationship between Reachability Analyzer and Organizations. This operation must be performed by the management account for the organization.</p>
    /// <p>After you establish a trust relationship, a user in the management account or a delegated administrator account can run a cross-account analysis using resources from the member accounts.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableReachabilityAnalyzerOrganizationSharing {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_reachability_analyzer_organization_sharing_input::Builder,
    }
    impl EnableReachabilityAnalyzerOrganizationSharing {
        /// Creates a new `EnableReachabilityAnalyzerOrganizationSharing`.
        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::EnableReachabilityAnalyzerOrganizationSharing,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::EnableReachabilityAnalyzerOrganizationSharingError,
            >,
        > {
            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::EnableReachabilityAnalyzerOrganizationSharingOutput,
            aws_smithy_http::result::SdkError<
                crate::error::EnableReachabilityAnalyzerOrganizationSharingError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableSerialConsoleAccess`.
    ///
    /// <p>Enables access to the EC2 serial console of all instances for your account. By default, access to the EC2 serial console is disabled for your account. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access">Manage account access to the EC2 serial console</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableSerialConsoleAccess {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_serial_console_access_input::Builder,
    }
    impl EnableSerialConsoleAccess {
        /// Creates a new `EnableSerialConsoleAccess`.
        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::EnableSerialConsoleAccess,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableSerialConsoleAccessError>,
        > {
            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::EnableSerialConsoleAccessOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableSerialConsoleAccessError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableTransitGatewayRouteTablePropagation`.
    ///
    /// <p>Enables the specified attachment to propagate routes to the specified propagation route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableTransitGatewayRouteTablePropagation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_transit_gateway_route_table_propagation_input::Builder,
    }
    impl EnableTransitGatewayRouteTablePropagation {
        /// Creates a new `EnableTransitGatewayRouteTablePropagation`.
        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::EnableTransitGatewayRouteTablePropagation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::EnableTransitGatewayRouteTablePropagationError,
            >,
        > {
            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::EnableTransitGatewayRouteTablePropagationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::EnableTransitGatewayRouteTablePropagationError,
            >,
        > {
            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 propagation route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the propagation route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the transit gateway route table announcement.</p>
        pub fn transit_gateway_route_table_announcement_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .transit_gateway_route_table_announcement_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table announcement.</p>
        pub fn set_transit_gateway_route_table_announcement_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_transit_gateway_route_table_announcement_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableVgwRoutePropagation`.
    ///
    /// <p>Enables a virtual private gateway (VGW) to propagate routes to the specified route table of a VPC.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableVgwRoutePropagation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_vgw_route_propagation_input::Builder,
    }
    impl EnableVgwRoutePropagation {
        /// Creates a new `EnableVgwRoutePropagation`.
        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::EnableVgwRoutePropagation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableVgwRoutePropagationError>,
        > {
            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::EnableVgwRoutePropagationOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableVgwRoutePropagationError>,
        > {
            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 virtual private gateway that is attached to a VPC. The virtual private gateway must be attached to the same VPC that the routing tables are associated with. </p>
        pub fn gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.gateway_id(input.into());
            self
        }
        /// <p>The ID of the virtual private gateway that is attached to a VPC. The virtual private gateway must be attached to the same VPC that the routing tables are associated with. </p>
        pub fn set_gateway_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_gateway_id(input);
            self
        }
        /// <p>The ID of the route table. The routing table must be associated with the same VPC that the virtual private gateway is attached to. </p>
        pub fn route_table_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table. The routing table must be associated with the same VPC that the virtual private gateway is attached to. </p>
        pub fn set_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_route_table_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableVolumeIO`.
    ///
    /// <p>Enables I/O operations for a volume that had I/O operations disabled because the data on the volume was potentially inconsistent.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableVolumeIO {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_volume_io_input::Builder,
    }
    impl EnableVolumeIO {
        /// Creates a new `EnableVolumeIO`.
        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::EnableVolumeIO,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableVolumeIOError>,
        > {
            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::EnableVolumeIoOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableVolumeIOError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn volume_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_id(input.into());
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn set_volume_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_volume_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableVpcClassicLink`.
    ///
    /// <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    /// <p>Enables a VPC for ClassicLink. You can then link EC2-Classic instances to your ClassicLink-enabled VPC to allow communication over private IP addresses. You cannot enable your VPC for ClassicLink if any of your VPC route tables have existing routes for address ranges within the <code>10.0.0.0/8</code> IP address range, excluding local routes for VPCs in the <code>10.0.0.0/16</code> and <code>10.1.0.0/16</code> IP address ranges. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html">ClassicLink</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableVpcClassicLink {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_vpc_classic_link_input::Builder,
    }
    impl EnableVpcClassicLink {
        /// Creates a new `EnableVpcClassicLink`.
        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::EnableVpcClassicLink,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableVpcClassicLinkError>,
        > {
            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::EnableVpcClassicLinkOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableVpcClassicLinkError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `EnableVpcClassicLinkDnsSupport`.
    ///
    /// <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    /// <p>Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html">ClassicLink</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>You must specify a VPC ID in the request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct EnableVpcClassicLinkDnsSupport {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::enable_vpc_classic_link_dns_support_input::Builder,
    }
    impl EnableVpcClassicLinkDnsSupport {
        /// Creates a new `EnableVpcClassicLinkDnsSupport`.
        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::EnableVpcClassicLinkDnsSupport,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::EnableVpcClassicLinkDnsSupportError>,
        > {
            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::EnableVpcClassicLinkDnsSupportOutput,
            aws_smithy_http::result::SdkError<crate::error::EnableVpcClassicLinkDnsSupportError>,
        > {
            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 VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ExportClientVpnClientCertificateRevocationList`.
    ///
    /// <p>Downloads the client certificate revocation list for the specified Client VPN endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ExportClientVpnClientCertificateRevocationList {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::export_client_vpn_client_certificate_revocation_list_input::Builder,
    }
    impl ExportClientVpnClientCertificateRevocationList {
        /// Creates a new `ExportClientVpnClientCertificateRevocationList`.
        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::ExportClientVpnClientCertificateRevocationList,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ExportClientVpnClientCertificateRevocationListError,
            >,
        > {
            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::ExportClientVpnClientCertificateRevocationListOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ExportClientVpnClientCertificateRevocationListError,
            >,
        > {
            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 Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ExportClientVpnClientConfiguration`.
    ///
    /// <p>Downloads the contents of the Client VPN endpoint configuration file for the specified Client VPN endpoint. The Client VPN endpoint configuration file includes the Client VPN endpoint and certificate information clients need to establish a connection with the Client VPN endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ExportClientVpnClientConfiguration {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::export_client_vpn_client_configuration_input::Builder,
    }
    impl ExportClientVpnClientConfiguration {
        /// Creates a new `ExportClientVpnClientConfiguration`.
        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::ExportClientVpnClientConfiguration,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ExportClientVpnClientConfigurationError,
            >,
        > {
            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::ExportClientVpnClientConfigurationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ExportClientVpnClientConfigurationError,
            >,
        > {
            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 Client VPN endpoint.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ExportImage`.
    ///
    /// <p>Exports an Amazon Machine Image (AMI) to a VM file. For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html">Exporting a VM directly from an Amazon Machine Image (AMI)</a> in the <i>VM Import/Export User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ExportImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::export_image_input::Builder,
    }
    impl ExportImage {
        /// Creates a new `ExportImage`.
        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::ExportImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ExportImageError>,
        > {
            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::ExportImageOutput,
            aws_smithy_http::result::SdkError<crate::error::ExportImageError>,
        > {
            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>Token to enable idempotency for export image requests.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Token to enable idempotency for export image requests.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>A description of the image being exported. The maximum length is 255 characters.</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 image being exported. The maximum length is 255 characters.</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 disk image format.</p>
        pub fn disk_image_format(mut self, input: crate::model::DiskImageFormat) -> Self {
            self.inner = self.inner.disk_image_format(input);
            self
        }
        /// <p>The disk image format.</p>
        pub fn set_disk_image_format(
            mut self,
            input: std::option::Option<crate::model::DiskImageFormat>,
        ) -> Self {
            self.inner = self.inner.set_disk_image_format(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the image.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the image.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>The Amazon S3 bucket for the destination image. The destination bucket must exist.</p>
        pub fn s3_export_location(
            mut self,
            input: crate::model::ExportTaskS3LocationRequest,
        ) -> Self {
            self.inner = self.inner.s3_export_location(input);
            self
        }
        /// <p>The Amazon S3 bucket for the destination image. The destination bucket must exist.</p>
        pub fn set_s3_export_location(
            mut self,
            input: std::option::Option<crate::model::ExportTaskS3LocationRequest>,
        ) -> Self {
            self.inner = self.inner.set_s3_export_location(input);
            self
        }
        /// <p>The name of the role that grants VM Import/Export permission to export images to your Amazon S3 bucket. If this parameter is not specified, the default role is named 'vmimport'.</p>
        pub fn role_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.role_name(input.into());
            self
        }
        /// <p>The name of the role that grants VM Import/Export permission to export images to your Amazon S3 bucket. If this parameter is not specified, the default role is named 'vmimport'.</p>
        pub fn set_role_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_role_name(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the export image task during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the export image task during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ExportTransitGatewayRoutes`.
    ///
    /// <p>Exports routes from the specified transit gateway route table to the specified S3 bucket. By default, all routes are exported. Alternatively, you can filter by CIDR range.</p>
    /// <p>The routes are saved to the specified bucket in a JSON file. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-export-route-tables">Export Route Tables to Amazon S3</a> in <i>Transit Gateways</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ExportTransitGatewayRoutes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::export_transit_gateway_routes_input::Builder,
    }
    impl ExportTransitGatewayRoutes {
        /// Creates a new `ExportTransitGatewayRoutes`.
        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::ExportTransitGatewayRoutes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ExportTransitGatewayRoutesError>,
        > {
            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::ExportTransitGatewayRoutesOutput,
            aws_smithy_http::result::SdkError<crate::error::ExportTransitGatewayRoutesError>,
        > {
            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 route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>attachment.transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>attachment.resource-id</code> - The resource id of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>
        /// <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>
        /// <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>
        /// <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify supernet-of-match as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>
        /// <li> <p> <code>state</code> - The state of the route (<code>active</code> | <code>blackhole</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-route-destination-cidr-block</code> - The CIDR range.</p> </li>
        /// <li> <p> <code>type</code> - The type of route (<code>propagated</code> | <code>static</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>attachment.transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>attachment.resource-id</code> - The resource id of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>
        /// <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>
        /// <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>
        /// <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify supernet-of-match as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>
        /// <li> <p> <code>state</code> - The state of the route (<code>active</code> | <code>blackhole</code>).</p> </li>
        /// <li> <p> <code>transit-gateway-route-destination-cidr-block</code> - The CIDR range.</p> </li>
        /// <li> <p> <code>type</code> - The type of route (<code>propagated</code> | <code>static</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The name of the S3 bucket.</p>
        pub fn s3_bucket(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.s3_bucket(input.into());
            self
        }
        /// <p>The name of the S3 bucket.</p>
        pub fn set_s3_bucket(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_s3_bucket(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetAssociatedEnclaveCertificateIamRoles`.
    ///
    /// <p>Returns the IAM roles that are associated with the specified ACM (ACM) certificate. It also returns the name of the Amazon S3 bucket and the Amazon S3 object key where the certificate, certificate chain, and encrypted private key bundle are stored, and the ARN of the KMS key that's used to encrypt the private key.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetAssociatedEnclaveCertificateIamRoles {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_associated_enclave_certificate_iam_roles_input::Builder,
    }
    impl GetAssociatedEnclaveCertificateIamRoles {
        /// Creates a new `GetAssociatedEnclaveCertificateIamRoles`.
        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::GetAssociatedEnclaveCertificateIamRoles,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetAssociatedEnclaveCertificateIamRolesError,
            >,
        > {
            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::GetAssociatedEnclaveCertificateIamRolesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetAssociatedEnclaveCertificateIamRolesError,
            >,
        > {
            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 ARN of the ACM certificate for which to view the associated IAM roles, encryption keys, and Amazon S3 object information.</p>
        pub fn certificate_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.certificate_arn(input.into());
            self
        }
        /// <p>The ARN of the ACM certificate for which to view the associated IAM roles, encryption keys, and Amazon S3 object information.</p>
        pub fn set_certificate_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_certificate_arn(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetAssociatedIpv6PoolCidrs`.
    ///
    /// <p>Gets information about the IPv6 CIDR block associations for a specified IPv6 address pool.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetAssociatedIpv6PoolCidrs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_associated_ipv6_pool_cidrs_input::Builder,
    }
    impl GetAssociatedIpv6PoolCidrs {
        /// Creates a new `GetAssociatedIpv6PoolCidrs`.
        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::GetAssociatedIpv6PoolCidrs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetAssociatedIpv6PoolCidrsError>,
        > {
            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::GetAssociatedIpv6PoolCidrsOutput,
            aws_smithy_http::result::SdkError<crate::error::GetAssociatedIpv6PoolCidrsError>,
        > {
            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::GetAssociatedIpv6PoolCidrsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetAssociatedIpv6PoolCidrsPaginator {
            crate::paginator::GetAssociatedIpv6PoolCidrsPaginator::new(self.handle, self.inner)
        }
        /// <p>The ID of the IPv6 address pool.</p>
        pub fn pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.pool_id(input.into());
            self
        }
        /// <p>The ID of the IPv6 address pool.</p>
        pub fn set_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_pool_id(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetAwsNetworkPerformanceData`.
    ///
    /// <p>Gets network performance data.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetAwsNetworkPerformanceData {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_aws_network_performance_data_input::Builder,
    }
    impl GetAwsNetworkPerformanceData {
        /// Creates a new `GetAwsNetworkPerformanceData`.
        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::GetAwsNetworkPerformanceData,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetAwsNetworkPerformanceDataError>,
        > {
            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::GetAwsNetworkPerformanceDataOutput,
            aws_smithy_http::result::SdkError<crate::error::GetAwsNetworkPerformanceDataError>,
        > {
            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::GetAwsNetworkPerformanceDataPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetAwsNetworkPerformanceDataPaginator {
            crate::paginator::GetAwsNetworkPerformanceDataPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `DataQueries`.
        ///
        /// To override the contents of this collection use [`set_data_queries`](Self::set_data_queries).
        ///
        /// <p>A list of network performance data queries.</p>
        pub fn data_queries(mut self, input: crate::model::DataQuery) -> Self {
            self.inner = self.inner.data_queries(input);
            self
        }
        /// <p>A list of network performance data queries.</p>
        pub fn set_data_queries(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::DataQuery>>,
        ) -> Self {
            self.inner = self.inner.set_data_queries(input);
            self
        }
        /// <p>The starting time for the performance data request. The starting time must be formatted as <code>yyyy-mm-ddThh:mm:ss</code>. For example, <code>2022-06-10T12:00:00.000Z</code>.</p>
        pub fn start_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.start_time(input);
            self
        }
        /// <p>The starting time for the performance data request. The starting time must be formatted as <code>yyyy-mm-ddThh:mm:ss</code>. For example, <code>2022-06-10T12:00:00.000Z</code>.</p>
        pub fn set_start_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_start_time(input);
            self
        }
        /// <p>The ending time for the performance data request. The end time must be formatted as <code>yyyy-mm-ddThh:mm:ss</code>. For example, <code>2022-06-12T12:00:00.000Z</code>.</p>
        pub fn end_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.end_time(input);
            self
        }
        /// <p>The ending time for the performance data request. The end time must be formatted as <code>yyyy-mm-ddThh:mm:ss</code>. For example, <code>2022-06-12T12:00:00.000Z</code>.</p>
        pub fn set_end_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_end_time(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetCapacityReservationUsage`.
    ///
    /// <p>Gets usage information about a Capacity Reservation. If the Capacity Reservation is shared, it shows usage information for the Capacity Reservation owner and each Amazon Web Services account that is currently using the shared capacity. If the Capacity Reservation is not shared, it shows only the Capacity Reservation owner's usage.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetCapacityReservationUsage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_capacity_reservation_usage_input::Builder,
    }
    impl GetCapacityReservationUsage {
        /// Creates a new `GetCapacityReservationUsage`.
        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::GetCapacityReservationUsage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetCapacityReservationUsageError>,
        > {
            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::GetCapacityReservationUsageOutput,
            aws_smithy_http::result::SdkError<crate::error::GetCapacityReservationUsageError>,
        > {
            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 Capacity Reservation.</p>
        pub fn capacity_reservation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.capacity_reservation_id(input.into());
            self
        }
        /// <p>The ID of the Capacity Reservation.</p>
        pub fn set_capacity_reservation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_id(input);
            self
        }
        /// <p>The token to use to retrieve the next page of results.</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 to use to retrieve the next page of results.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
        /// <p>Valid range: Minimum value of 1. Maximum value of 1000.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
        /// <p>Valid range: Minimum value of 1. Maximum value of 1000.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetCoipPoolUsage`.
    ///
    /// <p>Describes the allocations from the specified customer-owned address pool.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetCoipPoolUsage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_coip_pool_usage_input::Builder,
    }
    impl GetCoipPoolUsage {
        /// Creates a new `GetCoipPoolUsage`.
        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::GetCoipPoolUsage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetCoipPoolUsageError>,
        > {
            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::GetCoipPoolUsageOutput,
            aws_smithy_http::result::SdkError<crate::error::GetCoipPoolUsageError>,
        > {
            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 address pool.</p>
        pub fn pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.pool_id(input.into());
            self
        }
        /// <p>The ID of the address pool.</p>
        pub fn set_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_pool_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>coip-address-usage.allocation-id</code> - The allocation ID of the address.</p> </li>
        /// <li> <p> <code>coip-address-usage.aws-account-id</code> - The ID of the Amazon Web Services account that is using the customer-owned IP address.</p> </li>
        /// <li> <p> <code>coip-address-usage.aws-service</code> - The Amazon Web Services service that is using the customer-owned IP address.</p> </li>
        /// <li> <p> <code>coip-address-usage.co-ip</code> - The customer-owned IP address.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>coip-address-usage.allocation-id</code> - The allocation ID of the address.</p> </li>
        /// <li> <p> <code>coip-address-usage.aws-account-id</code> - The ID of the Amazon Web Services account that is using the customer-owned IP address.</p> </li>
        /// <li> <p> <code>coip-address-usage.aws-service</code> - The Amazon Web Services service that is using the customer-owned IP address.</p> </li>
        /// <li> <p> <code>coip-address-usage.co-ip</code> - The customer-owned IP address.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetConsoleOutput`.
    ///
    /// <p>Gets the console output for the specified instance. For Linux instances, the instance console output displays the exact console output that would normally be displayed on a physical monitor attached to a computer. For Windows instances, the instance console output includes the last three system event log errors.</p>
    /// <p>By default, the console output returns buffered information that was posted shortly after an instance transition state (start, stop, reboot, or terminate). This information is available for at least one hour after the most recent post. Only the most recent 64 KB of console output is available.</p>
    /// <p>You can optionally retrieve the latest serial console output at any time during the instance lifecycle. This option is supported on instance types that use the Nitro hypervisor.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html#instance-console-console-output">Instance console output</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetConsoleOutput {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_console_output_input::Builder,
    }
    impl GetConsoleOutput {
        /// Creates a new `GetConsoleOutput`.
        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::GetConsoleOutput,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetConsoleOutputError>,
        > {
            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::GetConsoleOutputOutput,
            aws_smithy_http::result::SdkError<crate::error::GetConsoleOutputError>,
        > {
            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 instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>When enabled, retrieves the latest console output for the instance.</p>
        /// <p>Default: disabled (<code>false</code>)</p>
        pub fn latest(mut self, input: bool) -> Self {
            self.inner = self.inner.latest(input);
            self
        }
        /// <p>When enabled, retrieves the latest console output for the instance.</p>
        /// <p>Default: disabled (<code>false</code>)</p>
        pub fn set_latest(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_latest(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetConsoleScreenshot`.
    ///
    /// <p>Retrieve a JPG-format screenshot of a running instance to help with troubleshooting.</p>
    /// <p>The returned content is Base64-encoded.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetConsoleScreenshot {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_console_screenshot_input::Builder,
    }
    impl GetConsoleScreenshot {
        /// Creates a new `GetConsoleScreenshot`.
        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::GetConsoleScreenshot,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetConsoleScreenshotError>,
        > {
            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::GetConsoleScreenshotOutput,
            aws_smithy_http::result::SdkError<crate::error::GetConsoleScreenshotError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>When set to <code>true</code>, acts as keystroke input and wakes up an instance that's in standby or "sleep" mode.</p>
        pub fn wake_up(mut self, input: bool) -> Self {
            self.inner = self.inner.wake_up(input);
            self
        }
        /// <p>When set to <code>true</code>, acts as keystroke input and wakes up an instance that's in standby or "sleep" mode.</p>
        pub fn set_wake_up(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_wake_up(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetDefaultCreditSpecification`.
    ///
    /// <p>Describes the default credit option for CPU usage of a burstable performance instance family.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html">Burstable performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetDefaultCreditSpecification {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_default_credit_specification_input::Builder,
    }
    impl GetDefaultCreditSpecification {
        /// Creates a new `GetDefaultCreditSpecification`.
        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::GetDefaultCreditSpecification,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetDefaultCreditSpecificationError>,
        > {
            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::GetDefaultCreditSpecificationOutput,
            aws_smithy_http::result::SdkError<crate::error::GetDefaultCreditSpecificationError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The instance family.</p>
        pub fn instance_family(
            mut self,
            input: crate::model::UnlimitedSupportedInstanceFamily,
        ) -> Self {
            self.inner = self.inner.instance_family(input);
            self
        }
        /// <p>The instance family.</p>
        pub fn set_instance_family(
            mut self,
            input: std::option::Option<crate::model::UnlimitedSupportedInstanceFamily>,
        ) -> Self {
            self.inner = self.inner.set_instance_family(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetEbsDefaultKmsKeyId`.
    ///
    /// <p>Describes the default KMS key for EBS encryption by default for your account in this Region. You can change the default KMS key for encryption by default using <code>ModifyEbsDefaultKmsKeyId</code> or <code>ResetEbsDefaultKmsKeyId</code>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetEbsDefaultKmsKeyId {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_ebs_default_kms_key_id_input::Builder,
    }
    impl GetEbsDefaultKmsKeyId {
        /// Creates a new `GetEbsDefaultKmsKeyId`.
        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::GetEbsDefaultKmsKeyId,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetEbsDefaultKmsKeyIdError>,
        > {
            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::GetEbsDefaultKmsKeyIdOutput,
            aws_smithy_http::result::SdkError<crate::error::GetEbsDefaultKmsKeyIdError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetEbsEncryptionByDefault`.
    ///
    /// <p>Describes whether EBS encryption by default is enabled for your account in the current Region.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetEbsEncryptionByDefault {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_ebs_encryption_by_default_input::Builder,
    }
    impl GetEbsEncryptionByDefault {
        /// Creates a new `GetEbsEncryptionByDefault`.
        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::GetEbsEncryptionByDefault,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetEbsEncryptionByDefaultError>,
        > {
            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::GetEbsEncryptionByDefaultOutput,
            aws_smithy_http::result::SdkError<crate::error::GetEbsEncryptionByDefaultError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetFlowLogsIntegrationTemplate`.
    ///
    /// <p>Generates a CloudFormation template that streamlines and automates the integration of VPC flow logs with Amazon Athena. This make it easier for you to query and gain insights from VPC flow logs data. Based on the information that you provide, we configure resources in the template to do the following:</p>
    /// <ul>
    /// <li> <p>Create a table in Athena that maps fields to a custom log format</p> </li>
    /// <li> <p>Create a Lambda function that updates the table with new partitions on a daily, weekly, or monthly basis</p> </li>
    /// <li> <p>Create a table partitioned between two timestamps in the past</p> </li>
    /// <li> <p>Create a set of named queries in Athena that you can use to get started quickly</p> </li>
    /// </ul>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetFlowLogsIntegrationTemplate {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_flow_logs_integration_template_input::Builder,
    }
    impl GetFlowLogsIntegrationTemplate {
        /// Creates a new `GetFlowLogsIntegrationTemplate`.
        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::GetFlowLogsIntegrationTemplate,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetFlowLogsIntegrationTemplateError>,
        > {
            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::GetFlowLogsIntegrationTemplateOutput,
            aws_smithy_http::result::SdkError<crate::error::GetFlowLogsIntegrationTemplateError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the flow log.</p>
        pub fn flow_log_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.flow_log_id(input.into());
            self
        }
        /// <p>The ID of the flow log.</p>
        pub fn set_flow_log_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_flow_log_id(input);
            self
        }
        /// <p>To store the CloudFormation template in Amazon S3, specify the location in Amazon S3.</p>
        pub fn config_delivery_s3_destination_arn(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.config_delivery_s3_destination_arn(input.into());
            self
        }
        /// <p>To store the CloudFormation template in Amazon S3, specify the location in Amazon S3.</p>
        pub fn set_config_delivery_s3_destination_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_config_delivery_s3_destination_arn(input);
            self
        }
        /// <p>Information about the service integration.</p>
        pub fn integrate_services(mut self, input: crate::model::IntegrateServices) -> Self {
            self.inner = self.inner.integrate_services(input);
            self
        }
        /// <p>Information about the service integration.</p>
        pub fn set_integrate_services(
            mut self,
            input: std::option::Option<crate::model::IntegrateServices>,
        ) -> Self {
            self.inner = self.inner.set_integrate_services(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetGroupsForCapacityReservation`.
    ///
    /// <p>Lists the resource groups to which a Capacity Reservation has been added.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetGroupsForCapacityReservation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_groups_for_capacity_reservation_input::Builder,
    }
    impl GetGroupsForCapacityReservation {
        /// Creates a new `GetGroupsForCapacityReservation`.
        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::GetGroupsForCapacityReservation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetGroupsForCapacityReservationError>,
        > {
            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::GetGroupsForCapacityReservationOutput,
            aws_smithy_http::result::SdkError<crate::error::GetGroupsForCapacityReservationError>,
        > {
            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::GetGroupsForCapacityReservationPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetGroupsForCapacityReservationPaginator {
            crate::paginator::GetGroupsForCapacityReservationPaginator::new(self.handle, self.inner)
        }
        /// <p>The ID of the Capacity Reservation.</p>
        pub fn capacity_reservation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.capacity_reservation_id(input.into());
            self
        }
        /// <p>The ID of the Capacity Reservation.</p>
        pub fn set_capacity_reservation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_id(input);
            self
        }
        /// <p>The token to use to retrieve the next page of results.</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 to use to retrieve the next page of results.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</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 for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetHostReservationPurchasePreview`.
    ///
    /// <p>Preview a reservation purchase with configurations that match those of your Dedicated Host. You must have active Dedicated Hosts in your account before you purchase a reservation.</p>
    /// <p>This is a preview of the <code>PurchaseHostReservation</code> action and does not result in the offering being purchased.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetHostReservationPurchasePreview {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_host_reservation_purchase_preview_input::Builder,
    }
    impl GetHostReservationPurchasePreview {
        /// Creates a new `GetHostReservationPurchasePreview`.
        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::GetHostReservationPurchasePreview,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetHostReservationPurchasePreviewError>,
        > {
            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::GetHostReservationPurchasePreviewOutput,
            aws_smithy_http::result::SdkError<crate::error::GetHostReservationPurchasePreviewError>,
        > {
            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 `HostIdSet`.
        ///
        /// To override the contents of this collection use [`set_host_id_set`](Self::set_host_id_set).
        ///
        /// <p>The IDs of the Dedicated Hosts with which the reservation is associated.</p>
        pub fn host_id_set(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.host_id_set(input.into());
            self
        }
        /// <p>The IDs of the Dedicated Hosts with which the reservation is associated.</p>
        pub fn set_host_id_set(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_host_id_set(input);
            self
        }
        /// <p>The offering ID of the reservation.</p>
        pub fn offering_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.offering_id(input.into());
            self
        }
        /// <p>The offering ID of the reservation.</p>
        pub fn set_offering_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_offering_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetInstanceTypesFromInstanceRequirements`.
    ///
    /// <p>Returns a list of instance types with the specified instance attributes. You can use the response to preview the instance types without launching instances. Note that the response does not consider capacity.</p>
    /// <p>When you specify multiple parameters, you get instance types that satisfy all of the specified parameters. If you specify multiple values for a parameter, you get instance types that satisfy any of the specified values.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html#spotfleet-get-instance-types-from-instance-requirements">Preview instance types with specified attributes</a>, <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html">Attribute-based instance type selection for EC2 Fleet</a>, <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html">Attribute-based instance type selection for Spot Fleet</a>, and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html">Spot placement score</a> in the <i>Amazon EC2 User Guide</i>, and <a href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html">Creating an Auto Scaling group using attribute-based instance type selection</a> in the <i>Amazon EC2 Auto Scaling User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetInstanceTypesFromInstanceRequirements {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_instance_types_from_instance_requirements_input::Builder,
    }
    impl GetInstanceTypesFromInstanceRequirements {
        /// Creates a new `GetInstanceTypesFromInstanceRequirements`.
        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::GetInstanceTypesFromInstanceRequirements,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetInstanceTypesFromInstanceRequirementsError,
            >,
        > {
            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::GetInstanceTypesFromInstanceRequirementsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetInstanceTypesFromInstanceRequirementsError,
            >,
        > {
            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::GetInstanceTypesFromInstanceRequirementsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::GetInstanceTypesFromInstanceRequirementsPaginator {
            crate::paginator::GetInstanceTypesFromInstanceRequirementsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `ArchitectureTypes`.
        ///
        /// To override the contents of this collection use [`set_architecture_types`](Self::set_architecture_types).
        ///
        /// <p>The processor architecture type.</p>
        pub fn architecture_types(mut self, input: crate::model::ArchitectureType) -> Self {
            self.inner = self.inner.architecture_types(input);
            self
        }
        /// <p>The processor architecture type.</p>
        pub fn set_architecture_types(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ArchitectureType>>,
        ) -> Self {
            self.inner = self.inner.set_architecture_types(input);
            self
        }
        /// Appends an item to `VirtualizationTypes`.
        ///
        /// To override the contents of this collection use [`set_virtualization_types`](Self::set_virtualization_types).
        ///
        /// <p>The virtualization type.</p>
        pub fn virtualization_types(mut self, input: crate::model::VirtualizationType) -> Self {
            self.inner = self.inner.virtualization_types(input);
            self
        }
        /// <p>The virtualization type.</p>
        pub fn set_virtualization_types(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::VirtualizationType>>,
        ) -> Self {
            self.inner = self.inner.set_virtualization_types(input);
            self
        }
        /// <p>The attributes required for the instance types.</p>
        pub fn instance_requirements(
            mut self,
            input: crate::model::InstanceRequirementsRequest,
        ) -> Self {
            self.inner = self.inner.instance_requirements(input);
            self
        }
        /// <p>The attributes required for the instance types.</p>
        pub fn set_instance_requirements(
            mut self,
            input: std::option::Option<crate::model::InstanceRequirementsRequest>,
        ) -> Self {
            self.inner = self.inner.set_instance_requirements(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and
 1000. The default value is 1000. To retrieve the remaining results, make another call with
 the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and
 1000. The default value is 1000. To retrieve the remaining results, make another call with
 the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</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 `GetInstanceUefiData`.
    ///
    /// <p>A binary representation of the UEFI variable store. Only non-volatile variables are stored. This is a base64 encoded and zlib compressed binary value that must be properly encoded.</p>
    /// <p>When you use <a href="https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html">register-image</a> to create an AMI, you can create an exact copy of your variable store by passing the UEFI data in the <code>UefiData</code> parameter. You can modify the UEFI data by using the <a href="https://github.com/awslabs/python-uefivars">python-uefivars tool</a> on GitHub. You can use the tool to convert the UEFI data into a human-readable format (JSON), which you can inspect and modify, and then convert back into the binary format to use with register-image.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html">UEFI Secure Boot</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetInstanceUefiData {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_instance_uefi_data_input::Builder,
    }
    impl GetInstanceUefiData {
        /// Creates a new `GetInstanceUefiData`.
        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::GetInstanceUefiData,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetInstanceUefiDataError>,
        > {
            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::GetInstanceUefiDataOutput,
            aws_smithy_http::result::SdkError<crate::error::GetInstanceUefiDataError>,
        > {
            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 instance from which to retrieve the UEFI data.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance from which to retrieve the UEFI data.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetIpamAddressHistory`.
    ///
    /// <p>Retrieve historical information about a CIDR within an IPAM scope. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/view-history-cidr-ipam.html">View the history of IP addresses</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetIpamAddressHistory {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_ipam_address_history_input::Builder,
    }
    impl GetIpamAddressHistory {
        /// Creates a new `GetIpamAddressHistory`.
        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::GetIpamAddressHistory,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetIpamAddressHistoryError>,
        > {
            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::GetIpamAddressHistoryOutput,
            aws_smithy_http::result::SdkError<crate::error::GetIpamAddressHistoryError>,
        > {
            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::GetIpamAddressHistoryPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetIpamAddressHistoryPaginator {
            crate::paginator::GetIpamAddressHistoryPaginator::new(self.handle, self.inner)
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The CIDR you want the history of. The CIDR can be an IPv4 or IPv6 IP address range. If you enter a /16 IPv4 CIDR, you will get records that match it exactly. You will not get records for any subnets within the /16 CIDR.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The CIDR you want the history of. The CIDR can be an IPv4 or IPv6 IP address range. If you enter a /16 IPv4 CIDR, you will get records that match it exactly. You will not get records for any subnets within the /16 CIDR.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>The ID of the IPAM scope that the CIDR is in.</p>
        pub fn ipam_scope_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_scope_id(input.into());
            self
        }
        /// <p>The ID of the IPAM scope that the CIDR is in.</p>
        pub fn set_ipam_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipam_scope_id(input);
            self
        }
        /// <p>The ID of the VPC you want your history records filtered by.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC you want your history records filtered by.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>The start of the time period for which you are looking for history. If you omit this option, it will default to the value of EndTime.</p>
        pub fn start_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.start_time(input);
            self
        }
        /// <p>The start of the time period for which you are looking for history. If you omit this option, it will default to the value of EndTime.</p>
        pub fn set_start_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_start_time(input);
            self
        }
        /// <p>The end of the time period for which you are looking for history. If you omit this option, it will default to the current time.</p>
        pub fn end_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.end_time(input);
            self
        }
        /// <p>The end of the time period for which you are looking for history. If you omit this option, it will default to the current time.</p>
        pub fn set_end_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_end_time(input);
            self
        }
        /// <p>The maximum number of historical results you would like returned per page. Defaults to 100.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of historical results you would like returned per page. Defaults to 100.</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 token for the next page of results.</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 page of results.</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 `GetIpamPoolAllocations`.
    ///
    /// <p>Get a list of all the CIDR allocations in an IPAM pool.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetIpamPoolAllocations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_ipam_pool_allocations_input::Builder,
    }
    impl GetIpamPoolAllocations {
        /// Creates a new `GetIpamPoolAllocations`.
        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::GetIpamPoolAllocations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetIpamPoolAllocationsError>,
        > {
            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::GetIpamPoolAllocationsOutput,
            aws_smithy_http::result::SdkError<crate::error::GetIpamPoolAllocationsError>,
        > {
            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::GetIpamPoolAllocationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetIpamPoolAllocationsPaginator {
            crate::paginator::GetIpamPoolAllocationsPaginator::new(self.handle, self.inner)
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM pool you want to see the allocations for.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the IPAM pool you want to see the allocations for.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The ID of the allocation.</p>
        pub fn ipam_pool_allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_allocation_id(input.into());
            self
        }
        /// <p>The ID of the allocation.</p>
        pub fn set_ipam_pool_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipam_pool_allocation_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results you would like returned per page.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results you would like returned per page.</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 token for the next page of results.</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 page of results.</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 `GetIpamPoolCidrs`.
    ///
    /// <p>Get the CIDRs provisioned to an IPAM pool.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetIpamPoolCidrs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_ipam_pool_cidrs_input::Builder,
    }
    impl GetIpamPoolCidrs {
        /// Creates a new `GetIpamPoolCidrs`.
        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::GetIpamPoolCidrs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetIpamPoolCidrsError>,
        > {
            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::GetIpamPoolCidrsOutput,
            aws_smithy_http::result::SdkError<crate::error::GetIpamPoolCidrsError>,
        > {
            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::GetIpamPoolCidrsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetIpamPoolCidrsPaginator {
            crate::paginator::GetIpamPoolCidrsPaginator::new(self.handle, self.inner)
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM pool you want the CIDR for.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the IPAM pool you want the CIDR for.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in the 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 the 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 token for the next page of results.</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 page of results.</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 `GetIpamResourceCidrs`.
    ///
    /// <p>Get information about the resources in a scope.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetIpamResourceCidrs {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_ipam_resource_cidrs_input::Builder,
    }
    impl GetIpamResourceCidrs {
        /// Creates a new `GetIpamResourceCidrs`.
        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::GetIpamResourceCidrs,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetIpamResourceCidrsError>,
        > {
            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::GetIpamResourceCidrsOutput,
            aws_smithy_http::result::SdkError<crate::error::GetIpamResourceCidrsError>,
        > {
            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::GetIpamResourceCidrsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetIpamResourceCidrsPaginator {
            crate::paginator::GetIpamResourceCidrsPaginator::new(self.handle, self.inner)
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters for the request. For more information about filtering, see <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html">Filtering CLI output</a>.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return in the 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 the 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 token for the next page of results.</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 page of results.</p>
        pub fn set_next_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_next_token(input);
            self
        }
        /// <p>The ID of the scope that the resource is in.</p>
        pub fn ipam_scope_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_scope_id(input.into());
            self
        }
        /// <p>The ID of the scope that the resource is in.</p>
        pub fn set_ipam_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipam_scope_id(input);
            self
        }
        /// <p>The ID of the IPAM pool that the resource is in.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the IPAM pool that the resource is in.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The ID of the resource.</p>
        pub fn resource_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_id(input.into());
            self
        }
        /// <p>The ID of the resource.</p>
        pub fn set_resource_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource_id(input);
            self
        }
        /// <p>The resource type.</p>
        pub fn resource_type(mut self, input: crate::model::IpamResourceType) -> Self {
            self.inner = self.inner.resource_type(input);
            self
        }
        /// <p>The resource type.</p>
        pub fn set_resource_type(
            mut self,
            input: std::option::Option<crate::model::IpamResourceType>,
        ) -> Self {
            self.inner = self.inner.set_resource_type(input);
            self
        }
        /// <p>The resource tag.</p>
        pub fn resource_tag(mut self, input: crate::model::RequestIpamResourceTag) -> Self {
            self.inner = self.inner.resource_tag(input);
            self
        }
        /// <p>The resource tag.</p>
        pub fn set_resource_tag(
            mut self,
            input: std::option::Option<crate::model::RequestIpamResourceTag>,
        ) -> Self {
            self.inner = self.inner.set_resource_tag(input);
            self
        }
        /// <p>The ID of the Amazon Web Services account that owns the resource.</p>
        pub fn resource_owner(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_owner(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services account that owns the resource.</p>
        pub fn set_resource_owner(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_resource_owner(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetLaunchTemplateData`.
    ///
    /// <p>Retrieves the configuration data of the specified instance. You can use this data to create a launch template. </p>
    /// <p>This action calls on other describe actions to get instance information. Depending on your instance configuration, you may need to allow the following actions in your IAM policy: <code>DescribeSpotInstanceRequests</code>, <code>DescribeInstanceCreditSpecifications</code>, <code>DescribeVolumes</code>, <code>DescribeInstanceAttribute</code>, and <code>DescribeElasticGpus</code>. Or, you can allow <code>describe*</code> depending on your instance requirements.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetLaunchTemplateData {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_launch_template_data_input::Builder,
    }
    impl GetLaunchTemplateData {
        /// Creates a new `GetLaunchTemplateData`.
        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::GetLaunchTemplateData,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetLaunchTemplateDataError>,
        > {
            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::GetLaunchTemplateDataOutput,
            aws_smithy_http::result::SdkError<crate::error::GetLaunchTemplateDataError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetManagedPrefixListAssociations`.
    ///
    /// <p>Gets information about the resources that are associated with the specified managed prefix list.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetManagedPrefixListAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_managed_prefix_list_associations_input::Builder,
    }
    impl GetManagedPrefixListAssociations {
        /// Creates a new `GetManagedPrefixListAssociations`.
        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::GetManagedPrefixListAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetManagedPrefixListAssociationsError>,
        > {
            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::GetManagedPrefixListAssociationsOutput,
            aws_smithy_http::result::SdkError<crate::error::GetManagedPrefixListAssociationsError>,
        > {
            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::GetManagedPrefixListAssociationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetManagedPrefixListAssociationsPaginator {
            crate::paginator::GetManagedPrefixListAssociationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn set_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_id(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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 `GetManagedPrefixListEntries`.
    ///
    /// <p>Gets information about the entries for a specified managed prefix list.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetManagedPrefixListEntries {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_managed_prefix_list_entries_input::Builder,
    }
    impl GetManagedPrefixListEntries {
        /// Creates a new `GetManagedPrefixListEntries`.
        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::GetManagedPrefixListEntries,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetManagedPrefixListEntriesError>,
        > {
            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::GetManagedPrefixListEntriesOutput,
            aws_smithy_http::result::SdkError<crate::error::GetManagedPrefixListEntriesError>,
        > {
            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::GetManagedPrefixListEntriesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetManagedPrefixListEntriesPaginator {
            crate::paginator::GetManagedPrefixListEntriesPaginator::new(self.handle, self.inner)
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn set_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_id(input);
            self
        }
        /// <p>The version of the prefix list for which to return the entries. The default is the current version.</p>
        pub fn target_version(mut self, input: i64) -> Self {
            self.inner = self.inner.target_version(input);
            self
        }
        /// <p>The version of the prefix list for which to return the entries. The default is the current version.</p>
        pub fn set_target_version(mut self, input: std::option::Option<i64>) -> Self {
            self.inner = self.inner.set_target_version(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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 `GetNetworkInsightsAccessScopeAnalysisFindings`.
    ///
    /// <p>Gets the findings for the specified Network Access Scope analysis.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetNetworkInsightsAccessScopeAnalysisFindings {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_network_insights_access_scope_analysis_findings_input::Builder,
    }
    impl GetNetworkInsightsAccessScopeAnalysisFindings {
        /// Creates a new `GetNetworkInsightsAccessScopeAnalysisFindings`.
        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::GetNetworkInsightsAccessScopeAnalysisFindings,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetNetworkInsightsAccessScopeAnalysisFindingsError,
            >,
        > {
            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::GetNetworkInsightsAccessScopeAnalysisFindingsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetNetworkInsightsAccessScopeAnalysisFindingsError,
            >,
        > {
            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 Network Access Scope analysis.</p>
        pub fn network_insights_access_scope_analysis_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .network_insights_access_scope_analysis_id(input.into());
            self
        }
        /// <p>The ID of the Network Access Scope analysis.</p>
        pub fn set_network_insights_access_scope_analysis_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_network_insights_access_scope_analysis_id(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetNetworkInsightsAccessScopeContent`.
    ///
    /// <p>Gets the content for the specified Network Access Scope.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetNetworkInsightsAccessScopeContent {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_network_insights_access_scope_content_input::Builder,
    }
    impl GetNetworkInsightsAccessScopeContent {
        /// Creates a new `GetNetworkInsightsAccessScopeContent`.
        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::GetNetworkInsightsAccessScopeContent,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetNetworkInsightsAccessScopeContentError,
            >,
        > {
            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::GetNetworkInsightsAccessScopeContentOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetNetworkInsightsAccessScopeContentError,
            >,
        > {
            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 Network Access Scope.</p>
        pub fn network_insights_access_scope_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_insights_access_scope_id(input.into());
            self
        }
        /// <p>The ID of the Network Access Scope.</p>
        pub fn set_network_insights_access_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_access_scope_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetPasswordData`.
    ///
    /// <p>Retrieves the encrypted administrator password for a running Windows instance.</p>
    /// <p>The Windows password is generated at boot by the <code>EC2Config</code> service or <code>EC2Launch</code> scripts (Windows Server 2016 and later). This usually only happens the first time an instance is launched. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html">EC2Config</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html">EC2Launch</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>For the <code>EC2Config</code> service, the password is not generated for rebundled AMIs unless <code>Ec2SetPassword</code> is enabled before bundling.</p>
    /// <p>The password is encrypted using the key pair that you specified when you launched the instance. You must provide the corresponding key pair file.</p>
    /// <p>When you launch an instance, password generation and encryption may take a few minutes. If you try to retrieve the password before it's available, the output returns an empty string. We recommend that you wait up to 15 minutes after launching an instance before trying to retrieve the generated password.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetPasswordData {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_password_data_input::Builder,
    }
    impl GetPasswordData {
        /// Creates a new `GetPasswordData`.
        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::GetPasswordData,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetPasswordDataError>,
        > {
            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::GetPasswordDataOutput,
            aws_smithy_http::result::SdkError<crate::error::GetPasswordDataError>,
        > {
            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 Windows instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the Windows instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetReservedInstancesExchangeQuote`.
    ///
    /// <p>Returns a quote and exchange information for exchanging one or more specified Convertible Reserved Instances for a new Convertible Reserved Instance. If the exchange cannot be performed, the reason is returned in the response. Use <code>AcceptReservedInstancesExchangeQuote</code> to perform the exchange.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetReservedInstancesExchangeQuote {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_reserved_instances_exchange_quote_input::Builder,
    }
    impl GetReservedInstancesExchangeQuote {
        /// Creates a new `GetReservedInstancesExchangeQuote`.
        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::GetReservedInstancesExchangeQuote,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetReservedInstancesExchangeQuoteError>,
        > {
            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::GetReservedInstancesExchangeQuoteOutput,
            aws_smithy_http::result::SdkError<crate::error::GetReservedInstancesExchangeQuoteError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `ReservedInstanceIds`.
        ///
        /// To override the contents of this collection use [`set_reserved_instance_ids`](Self::set_reserved_instance_ids).
        ///
        /// <p>The IDs of the Convertible Reserved Instances to exchange.</p>
        pub fn reserved_instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.reserved_instance_ids(input.into());
            self
        }
        /// <p>The IDs of the Convertible Reserved Instances to exchange.</p>
        pub fn set_reserved_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instance_ids(input);
            self
        }
        /// Appends an item to `TargetConfigurations`.
        ///
        /// To override the contents of this collection use [`set_target_configurations`](Self::set_target_configurations).
        ///
        /// <p>The configuration of the target Convertible Reserved Instance to exchange for your current Convertible Reserved Instances.</p>
        pub fn target_configurations(
            mut self,
            input: crate::model::TargetConfigurationRequest,
        ) -> Self {
            self.inner = self.inner.target_configurations(input);
            self
        }
        /// <p>The configuration of the target Convertible Reserved Instance to exchange for your current Convertible Reserved Instances.</p>
        pub fn set_target_configurations(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TargetConfigurationRequest>>,
        ) -> Self {
            self.inner = self.inner.set_target_configurations(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetSerialConsoleAccessStatus`.
    ///
    /// <p>Retrieves the access status of your account to the EC2 serial console of all instances. By default, access to the EC2 serial console is disabled for your account. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access">Manage account access to the EC2 serial console</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetSerialConsoleAccessStatus {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_serial_console_access_status_input::Builder,
    }
    impl GetSerialConsoleAccessStatus {
        /// Creates a new `GetSerialConsoleAccessStatus`.
        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::GetSerialConsoleAccessStatus,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetSerialConsoleAccessStatusError>,
        > {
            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::GetSerialConsoleAccessStatusOutput,
            aws_smithy_http::result::SdkError<crate::error::GetSerialConsoleAccessStatusError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetSpotPlacementScores`.
    ///
    /// <p>Calculates the Spot placement score for a Region or Availability Zone based on the specified target capacity and compute requirements.</p>
    /// <p>You can specify your compute requirements either by using <code>InstanceRequirementsWithMetadata</code> and letting Amazon EC2 choose the optimal instance types to fulfill your Spot request, or you can specify the instance types by using <code>InstanceTypes</code>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html">Spot placement score</a> in the Amazon EC2 User Guide.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetSpotPlacementScores {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_spot_placement_scores_input::Builder,
    }
    impl GetSpotPlacementScores {
        /// Creates a new `GetSpotPlacementScores`.
        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::GetSpotPlacementScores,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetSpotPlacementScoresError>,
        > {
            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::GetSpotPlacementScoresOutput,
            aws_smithy_http::result::SdkError<crate::error::GetSpotPlacementScoresError>,
        > {
            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::GetSpotPlacementScoresPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetSpotPlacementScoresPaginator {
            crate::paginator::GetSpotPlacementScoresPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `InstanceTypes`.
        ///
        /// To override the contents of this collection use [`set_instance_types`](Self::set_instance_types).
        ///
        /// <p>The instance types. We recommend that you specify at least three instance types. If you specify one or two instance types, or specify variations of a single instance type (for example, an <code>m3.xlarge</code> with and without instance storage), the returned placement score will always be low. </p>
        /// <p>If you specify <code>InstanceTypes</code>, you can't specify <code>InstanceRequirementsWithMetadata</code>.</p>
        pub fn instance_types(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_types(input.into());
            self
        }
        /// <p>The instance types. We recommend that you specify at least three instance types. If you specify one or two instance types, or specify variations of a single instance type (for example, an <code>m3.xlarge</code> with and without instance storage), the returned placement score will always be low. </p>
        /// <p>If you specify <code>InstanceTypes</code>, you can't specify <code>InstanceRequirementsWithMetadata</code>.</p>
        pub fn set_instance_types(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_types(input);
            self
        }
        /// <p>The target capacity.</p>
        pub fn target_capacity(mut self, input: i32) -> Self {
            self.inner = self.inner.target_capacity(input);
            self
        }
        /// <p>The target capacity.</p>
        pub fn set_target_capacity(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_target_capacity(input);
            self
        }
        /// <p>The unit for the target capacity.</p>
        /// <p>Default: <code>units</code> (translates to number of instances)</p>
        pub fn target_capacity_unit_type(
            mut self,
            input: crate::model::TargetCapacityUnitType,
        ) -> Self {
            self.inner = self.inner.target_capacity_unit_type(input);
            self
        }
        /// <p>The unit for the target capacity.</p>
        /// <p>Default: <code>units</code> (translates to number of instances)</p>
        pub fn set_target_capacity_unit_type(
            mut self,
            input: std::option::Option<crate::model::TargetCapacityUnitType>,
        ) -> Self {
            self.inner = self.inner.set_target_capacity_unit_type(input);
            self
        }
        /// <p>Specify <code>true</code> so that the response returns a list of scored Availability Zones. Otherwise, the response returns a list of scored Regions.</p>
        /// <p>A list of scored Availability Zones is useful if you want to launch all of your Spot capacity into a single Availability Zone.</p>
        pub fn single_availability_zone(mut self, input: bool) -> Self {
            self.inner = self.inner.single_availability_zone(input);
            self
        }
        /// <p>Specify <code>true</code> so that the response returns a list of scored Availability Zones. Otherwise, the response returns a list of scored Regions.</p>
        /// <p>A list of scored Availability Zones is useful if you want to launch all of your Spot capacity into a single Availability Zone.</p>
        pub fn set_single_availability_zone(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_single_availability_zone(input);
            self
        }
        /// Appends an item to `RegionNames`.
        ///
        /// To override the contents of this collection use [`set_region_names`](Self::set_region_names).
        ///
        /// <p>The Regions used to narrow down the list of Regions to be scored. Enter the Region code, for example, <code>us-east-1</code>.</p>
        pub fn region_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.region_names(input.into());
            self
        }
        /// <p>The Regions used to narrow down the list of Regions to be scored. Enter the Region code, for example, <code>us-east-1</code>.</p>
        pub fn set_region_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_region_names(input);
            self
        }
        /// <p>The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with those attributes.</p>
        /// <p>If you specify <code>InstanceRequirementsWithMetadata</code>, you can't specify <code>InstanceTypes</code>.</p>
        pub fn instance_requirements_with_metadata(
            mut self,
            input: crate::model::InstanceRequirementsWithMetadataRequest,
        ) -> Self {
            self.inner = self.inner.instance_requirements_with_metadata(input);
            self
        }
        /// <p>The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with those attributes.</p>
        /// <p>If you specify <code>InstanceRequirementsWithMetadata</code>, you can't specify <code>InstanceTypes</code>.</p>
        pub fn set_instance_requirements_with_metadata(
            mut self,
            input: std::option::Option<crate::model::InstanceRequirementsWithMetadataRequest>,
        ) -> Self {
            self.inner = self.inner.set_instance_requirements_with_metadata(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of results to return in a single call. Specify a value between 1 and
 1000. The default value is 1000. To retrieve the remaining results, make another call with
 the returned <code>NextToken</code> value.</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 a single call. Specify a value between 1 and
 1000. The default value is 1000. To retrieve the remaining results, make another call with
 the returned <code>NextToken</code> value.</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 token for the next set of results.</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.</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 `GetSubnetCidrReservations`.
    ///
    /// <p>Gets information about the subnet CIDR reservations.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetSubnetCidrReservations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_subnet_cidr_reservations_input::Builder,
    }
    impl GetSubnetCidrReservations {
        /// Creates a new `GetSubnetCidrReservations`.
        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::GetSubnetCidrReservations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetSubnetCidrReservationsError>,
        > {
            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::GetSubnetCidrReservationsOutput,
            aws_smithy_http::result::SdkError<crate::error::GetSubnetCidrReservationsError>,
        > {
            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 `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>reservationType</code> - The type of reservation (<code>prefix</code> | <code>explicit</code>).</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>reservationType</code> - The type of reservation (<code>prefix</code> | <code>explicit</code>).</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>
        /// <li> <p> <code>tag</code>:<key>
        /// - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key
        /// <code>Owner</code> and the value
        /// <code>TeamA</code>, specify
        /// <code>tag:Owner</code> for the filter name and
        /// <code>TeamA</code> for the filter value.
        /// </key></p> </li>
        /// <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The ID of the subnet.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The ID of the subnet.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 `GetTransitGatewayAttachmentPropagations`.
    ///
    /// <p>Lists the route tables to which the specified resource attachment propagates routes.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTransitGatewayAttachmentPropagations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_transit_gateway_attachment_propagations_input::Builder,
    }
    impl GetTransitGatewayAttachmentPropagations {
        /// Creates a new `GetTransitGatewayAttachmentPropagations`.
        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::GetTransitGatewayAttachmentPropagations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayAttachmentPropagationsError,
            >,
        > {
            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::GetTransitGatewayAttachmentPropagationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayAttachmentPropagationsError,
            >,
        > {
            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::GetTransitGatewayAttachmentPropagationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::GetTransitGatewayAttachmentPropagationsPaginator {
            crate::paginator::GetTransitGatewayAttachmentPropagationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The ID of the attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>transit-gateway-route-table-id</code> - The ID of the transit gateway route table.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>transit-gateway-route-table-id</code> - The ID of the transit gateway route table.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTransitGatewayMulticastDomainAssociations`.
    ///
    /// <p>Gets information about the associations for the transit gateway multicast domain.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTransitGatewayMulticastDomainAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_transit_gateway_multicast_domain_associations_input::Builder,
    }
    impl GetTransitGatewayMulticastDomainAssociations {
        /// Creates a new `GetTransitGatewayMulticastDomainAssociations`.
        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::GetTransitGatewayMulticastDomainAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayMulticastDomainAssociationsError,
            >,
        > {
            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::GetTransitGatewayMulticastDomainAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayMulticastDomainAssociationsError,
            >,
        > {
            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::GetTransitGatewayMulticastDomainAssociationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::GetTransitGatewayMulticastDomainAssociationsPaginator {
            crate::paginator::GetTransitGatewayMulticastDomainAssociationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The type of resource. The valid value is: <code>vpc</code>.</p> </li>
        /// <li> <p> <code>state</code> - The state of the subnet association. Valid values are <code>associated</code> | <code>associating</code> | <code>disassociated</code> | <code>disassociating</code>.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The type of resource. The valid value is: <code>vpc</code>.</p> </li>
        /// <li> <p> <code>state</code> - The state of the subnet association. Valid values are <code>associated</code> | <code>associating</code> | <code>disassociated</code> | <code>disassociating</code>.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTransitGatewayPolicyTableAssociations`.
    ///
    /// <p>Gets a list of the transit gateway policy table associations.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTransitGatewayPolicyTableAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_transit_gateway_policy_table_associations_input::Builder,
    }
    impl GetTransitGatewayPolicyTableAssociations {
        /// Creates a new `GetTransitGatewayPolicyTableAssociations`.
        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::GetTransitGatewayPolicyTableAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayPolicyTableAssociationsError,
            >,
        > {
            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::GetTransitGatewayPolicyTableAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayPolicyTableAssociationsError,
            >,
        > {
            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::GetTransitGatewayPolicyTableAssociationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::GetTransitGatewayPolicyTableAssociationsPaginator {
            crate::paginator::GetTransitGatewayPolicyTableAssociationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The ID of the transit gateway policy table.</p>
        pub fn transit_gateway_policy_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_policy_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway policy table.</p>
        pub fn set_transit_gateway_policy_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_policy_table_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters associated with the transit gateway policy table.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters associated with the transit gateway policy table.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTransitGatewayPolicyTableEntries`.
    ///
    /// <p>Returns a list of transit gateway policy table entries.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTransitGatewayPolicyTableEntries {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_transit_gateway_policy_table_entries_input::Builder,
    }
    impl GetTransitGatewayPolicyTableEntries {
        /// Creates a new `GetTransitGatewayPolicyTableEntries`.
        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::GetTransitGatewayPolicyTableEntries,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayPolicyTableEntriesError,
            >,
        > {
            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::GetTransitGatewayPolicyTableEntriesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayPolicyTableEntriesError,
            >,
        > {
            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 transit gateway policy table.</p>
        pub fn transit_gateway_policy_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_policy_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway policy table.</p>
        pub fn set_transit_gateway_policy_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_policy_table_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>The filters associated with the transit gateway policy table.</p>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>The filters associated with the transit gateway policy table.</p>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTransitGatewayPrefixListReferences`.
    ///
    /// <p>Gets information about the prefix list references in a specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTransitGatewayPrefixListReferences {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_transit_gateway_prefix_list_references_input::Builder,
    }
    impl GetTransitGatewayPrefixListReferences {
        /// Creates a new `GetTransitGatewayPrefixListReferences`.
        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::GetTransitGatewayPrefixListReferences,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayPrefixListReferencesError,
            >,
        > {
            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::GetTransitGatewayPrefixListReferencesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayPrefixListReferencesError,
            >,
        > {
            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::GetTransitGatewayPrefixListReferencesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::GetTransitGatewayPrefixListReferencesPaginator {
            crate::paginator::GetTransitGatewayPrefixListReferencesPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>attachment.resource-id</code> - The ID of the resource for the attachment.</p> </li>
        /// <li> <p> <code>attachment.resource-type</code> - The type of resource for the attachment. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code>.</p> </li>
        /// <li> <p> <code>attachment.transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// <li> <p> <code>is-blackhole</code> - Whether traffic matching the route is blocked (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>
        /// <li> <p> <code>prefix-list-owner-id</code> - The ID of the owner of the prefix list.</p> </li>
        /// <li> <p> <code>state</code> - The state of the prefix list reference (<code>pending</code> | <code>available</code> | <code>modifying</code> | <code>deleting</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>attachment.resource-id</code> - The ID of the resource for the attachment.</p> </li>
        /// <li> <p> <code>attachment.resource-type</code> - The type of resource for the attachment. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code>.</p> </li>
        /// <li> <p> <code>attachment.transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// <li> <p> <code>is-blackhole</code> - Whether traffic matching the route is blocked (<code>true</code> | <code>false</code>).</p> </li>
        /// <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>
        /// <li> <p> <code>prefix-list-owner-id</code> - The ID of the owner of the prefix list.</p> </li>
        /// <li> <p> <code>state</code> - The state of the prefix list reference (<code>pending</code> | <code>available</code> | <code>modifying</code> | <code>deleting</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTransitGatewayRouteTableAssociations`.
    ///
    /// <p>Gets information about the associations for the specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTransitGatewayRouteTableAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_transit_gateway_route_table_associations_input::Builder,
    }
    impl GetTransitGatewayRouteTableAssociations {
        /// Creates a new `GetTransitGatewayRouteTableAssociations`.
        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::GetTransitGatewayRouteTableAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayRouteTableAssociationsError,
            >,
        > {
            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::GetTransitGatewayRouteTableAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayRouteTableAssociationsError,
            >,
        > {
            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::GetTransitGatewayRouteTableAssociationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::GetTransitGatewayRouteTableAssociationsPaginator {
            crate::paginator::GetTransitGatewayRouteTableAssociationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetTransitGatewayRouteTablePropagations`.
    ///
    /// <p>Gets information about the route table propagations for the specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetTransitGatewayRouteTablePropagations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_transit_gateway_route_table_propagations_input::Builder,
    }
    impl GetTransitGatewayRouteTablePropagations {
        /// Creates a new `GetTransitGatewayRouteTablePropagations`.
        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::GetTransitGatewayRouteTablePropagations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayRouteTablePropagationsError,
            >,
        > {
            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::GetTransitGatewayRouteTablePropagationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetTransitGatewayRouteTablePropagationsError,
            >,
        > {
            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::GetTransitGatewayRouteTablePropagationsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::GetTransitGatewayRouteTablePropagationsPaginator {
            crate::paginator::GetTransitGatewayRouteTablePropagationsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The ID of the attachment.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetVerifiedAccessEndpointPolicy`.
    ///
    /// <p>Get the Verified Access policy associated with the endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetVerifiedAccessEndpointPolicy {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_verified_access_endpoint_policy_input::Builder,
    }
    impl GetVerifiedAccessEndpointPolicy {
        /// Creates a new `GetVerifiedAccessEndpointPolicy`.
        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::GetVerifiedAccessEndpointPolicy,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetVerifiedAccessEndpointPolicyError>,
        > {
            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::GetVerifiedAccessEndpointPolicyOutput,
            aws_smithy_http::result::SdkError<crate::error::GetVerifiedAccessEndpointPolicyError>,
        > {
            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 Amazon Web Services Verified Access endpoint.</p>
        pub fn verified_access_endpoint_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
        pub fn set_verified_access_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_endpoint_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetVerifiedAccessGroupPolicy`.
    ///
    /// <p>Shows the contents of the Verified Access policy associated with the group.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetVerifiedAccessGroupPolicy {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_verified_access_group_policy_input::Builder,
    }
    impl GetVerifiedAccessGroupPolicy {
        /// Creates a new `GetVerifiedAccessGroupPolicy`.
        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::GetVerifiedAccessGroupPolicy,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetVerifiedAccessGroupPolicyError>,
        > {
            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::GetVerifiedAccessGroupPolicyOutput,
            aws_smithy_http::result::SdkError<crate::error::GetVerifiedAccessGroupPolicyError>,
        > {
            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 Amazon Web Services Verified Access group.</p>
        pub fn verified_access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.verified_access_group_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access group.</p>
        pub fn set_verified_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_group_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetVpnConnectionDeviceSampleConfiguration`.
    ///
    /// <p>Download an Amazon Web Services-provided sample configuration file to be used with the customer gateway device specified for your Site-to-Site VPN connection.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetVpnConnectionDeviceSampleConfiguration {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_vpn_connection_device_sample_configuration_input::Builder,
    }
    impl GetVpnConnectionDeviceSampleConfiguration {
        /// Creates a new `GetVpnConnectionDeviceSampleConfiguration`.
        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::GetVpnConnectionDeviceSampleConfiguration,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::GetVpnConnectionDeviceSampleConfigurationError,
            >,
        > {
            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::GetVpnConnectionDeviceSampleConfigurationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::GetVpnConnectionDeviceSampleConfigurationError,
            >,
        > {
            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 <code>VpnConnectionId</code> specifies the Site-to-Site VPN connection used for the sample configuration.</p>
        pub fn vpn_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_id(input.into());
            self
        }
        /// <p>The <code>VpnConnectionId</code> specifies the Site-to-Site VPN connection used for the sample configuration.</p>
        pub fn set_vpn_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_id(input);
            self
        }
        /// <p>Device identifier provided by the <code>GetVpnConnectionDeviceTypes</code> API.</p>
        pub fn vpn_connection_device_type_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.vpn_connection_device_type_id(input.into());
            self
        }
        /// <p>Device identifier provided by the <code>GetVpnConnectionDeviceTypes</code> API.</p>
        pub fn set_vpn_connection_device_type_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_device_type_id(input);
            self
        }
        /// <p>The IKE version to be used in the sample configuration file for your customer gateway device. You can specify one of the following versions: <code>ikev1</code> or <code>ikev2</code>.</p>
        pub fn internet_key_exchange_version(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.internet_key_exchange_version(input.into());
            self
        }
        /// <p>The IKE version to be used in the sample configuration file for your customer gateway device. You can specify one of the following versions: <code>ikev1</code> or <code>ikev2</code>.</p>
        pub fn set_internet_key_exchange_version(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_internet_key_exchange_version(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetVpnConnectionDeviceTypes`.
    ///
    /// <p>Obtain a list of customer gateway devices for which sample configuration files can be provided. The request has no additional parameters. You can also see the list of device types with sample configuration files available under <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html">Your customer gateway device</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetVpnConnectionDeviceTypes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_vpn_connection_device_types_input::Builder,
    }
    impl GetVpnConnectionDeviceTypes {
        /// Creates a new `GetVpnConnectionDeviceTypes`.
        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::GetVpnConnectionDeviceTypes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::GetVpnConnectionDeviceTypesError>,
        > {
            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::GetVpnConnectionDeviceTypesOutput,
            aws_smithy_http::result::SdkError<crate::error::GetVpnConnectionDeviceTypesError>,
        > {
            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::GetVpnConnectionDeviceTypesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::GetVpnConnectionDeviceTypesPaginator {
            crate::paginator::GetVpnConnectionDeviceTypesPaginator::new(self.handle, self.inner)
        }
        /// <p>The maximum number of results returned by <code>GetVpnConnectionDeviceTypes</code> in paginated output. When this parameter is used, <code>GetVpnConnectionDeviceTypes</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>GetVpnConnectionDeviceTypes</code> request with the returned <code>NextToken</code> value. This value can be between 200 and 1000. If this parameter is not used, then <code>GetVpnConnectionDeviceTypes</code> returns all results.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The maximum number of results returned by <code>GetVpnConnectionDeviceTypes</code> in paginated output. When this parameter is used, <code>GetVpnConnectionDeviceTypes</code> only returns <code>MaxResults</code> results in a single page along with a <code>NextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>GetVpnConnectionDeviceTypes</code> request with the returned <code>NextToken</code> value. This value can be between 200 and 1000. If this parameter is not used, then <code>GetVpnConnectionDeviceTypes</code> returns all results.</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 <code>NextToken</code> value returned from a previous paginated <code>GetVpnConnectionDeviceTypes</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is null when there are no more results to return. </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 <code>NextToken</code> value returned from a previous paginated <code>GetVpnConnectionDeviceTypes</code> request where <code>MaxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>NextToken</code> value. This value is null when there are no more results to return. </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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ImportClientVpnClientCertificateRevocationList`.
    ///
    /// <p>Uploads a client certificate revocation list to the specified Client VPN endpoint. Uploading a client certificate revocation list overwrites the existing client certificate revocation list.</p>
    /// <p>Uploading a client certificate revocation list resets existing client connections.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ImportClientVpnClientCertificateRevocationList {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::import_client_vpn_client_certificate_revocation_list_input::Builder,
    }
    impl ImportClientVpnClientCertificateRevocationList {
        /// Creates a new `ImportClientVpnClientCertificateRevocationList`.
        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::ImportClientVpnClientCertificateRevocationList,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ImportClientVpnClientCertificateRevocationListError,
            >,
        > {
            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::ImportClientVpnClientCertificateRevocationListOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ImportClientVpnClientCertificateRevocationListError,
            >,
        > {
            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 Client VPN endpoint to which the client certificate revocation list applies.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint to which the client certificate revocation list applies.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The client certificate revocation list file. For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate">Generate a Client Certificate Revocation List</a> in the <i>Client VPN Administrator Guide</i>.</p>
        pub fn certificate_revocation_list(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.certificate_revocation_list(input.into());
            self
        }
        /// <p>The client certificate revocation list file. For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate">Generate a Client Certificate Revocation List</a> in the <i>Client VPN Administrator Guide</i>.</p>
        pub fn set_certificate_revocation_list(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_certificate_revocation_list(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ImportImage`.
    ///
    /// <p>Import single or multi-volume disk images or EBS snapshots into an Amazon Machine Image (AMI).</p> <important>
    /// <p>Amazon Web Services VM Import/Export strongly recommends specifying a value for either the <code>--license-type</code> or <code>--usage-operation</code> parameter when you create a new VM Import task. This ensures your operating system is licensed appropriately and your billing is optimized.</p>
    /// </important>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html">Importing a VM as an image using VM Import/Export</a> in the <i>VM Import/Export User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ImportImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::import_image_input::Builder,
    }
    impl ImportImage {
        /// Creates a new `ImportImage`.
        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::ImportImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ImportImageError>,
        > {
            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::ImportImageOutput,
            aws_smithy_http::result::SdkError<crate::error::ImportImageError>,
        > {
            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 architecture of the virtual machine.</p>
        /// <p>Valid values: <code>i386</code> | <code>x86_64</code> </p>
        pub fn architecture(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.architecture(input.into());
            self
        }
        /// <p>The architecture of the virtual machine.</p>
        /// <p>Valid values: <code>i386</code> | <code>x86_64</code> </p>
        pub fn set_architecture(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_architecture(input);
            self
        }
        /// <p>The client-specific data.</p>
        pub fn client_data(mut self, input: crate::model::ClientData) -> Self {
            self.inner = self.inner.client_data(input);
            self
        }
        /// <p>The client-specific data.</p>
        pub fn set_client_data(
            mut self,
            input: std::option::Option<crate::model::ClientData>,
        ) -> Self {
            self.inner = self.inner.set_client_data(input);
            self
        }
        /// <p>The token to enable idempotency for VM import requests.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>The token to enable idempotency for VM import requests.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>A description string for the import image task.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description string for the import image task.</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 `DiskContainers`.
        ///
        /// To override the contents of this collection use [`set_disk_containers`](Self::set_disk_containers).
        ///
        /// <p>Information about the disk containers.</p>
        pub fn disk_containers(mut self, input: crate::model::ImageDiskContainer) -> Self {
            self.inner = self.inner.disk_containers(input);
            self
        }
        /// <p>Information about the disk containers.</p>
        pub fn set_disk_containers(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ImageDiskContainer>>,
        ) -> Self {
            self.inner = self.inner.set_disk_containers(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Specifies whether the destination AMI of the imported image should be encrypted. The default KMS key for EBS is used unless you specify a non-default KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS Encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn encrypted(mut self, input: bool) -> Self {
            self.inner = self.inner.encrypted(input);
            self
        }
        /// <p>Specifies whether the destination AMI of the imported image should be encrypted. The default KMS key for EBS is used unless you specify a non-default KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS Encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn set_encrypted(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_encrypted(input);
            self
        }
        /// <p>The target hypervisor platform.</p>
        /// <p>Valid values: <code>xen</code> </p>
        pub fn hypervisor(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.hypervisor(input.into());
            self
        }
        /// <p>The target hypervisor platform.</p>
        /// <p>Valid values: <code>xen</code> </p>
        pub fn set_hypervisor(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_hypervisor(input);
            self
        }
        /// <p>An identifier for the symmetric KMS key to use when creating the encrypted AMI. This parameter is only required if you want to use a non-default KMS key; if this parameter is not specified, the default KMS key for EBS is used. If a <code>KmsKeyId</code> is specified, the <code>Encrypted</code> flag must also be set. </p>
        /// <p>The KMS key identifier may be provided in any of the following formats: </p>
        /// <ul>
        /// <li> <p>Key ID</p> </li>
        /// <li> <p>Key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li>
        /// <li> <p>ARN using key ID. The ID ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>key</code> namespace, and then the key ID. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li>
        /// <li> <p>ARN using key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>. </p> </li>
        /// </ul>
        /// <p>Amazon Web Services parses <code>KmsKeyId</code> asynchronously, meaning that the action you call may appear to complete even though you provided an invalid identifier. This action will eventually report failure. </p>
        /// <p>The specified KMS key must exist in the Region that the AMI is being copied to.</p>
        /// <p>Amazon EBS does not support asymmetric KMS keys.</p>
        pub fn kms_key_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.kms_key_id(input.into());
            self
        }
        /// <p>An identifier for the symmetric KMS key to use when creating the encrypted AMI. This parameter is only required if you want to use a non-default KMS key; if this parameter is not specified, the default KMS key for EBS is used. If a <code>KmsKeyId</code> is specified, the <code>Encrypted</code> flag must also be set. </p>
        /// <p>The KMS key identifier may be provided in any of the following formats: </p>
        /// <ul>
        /// <li> <p>Key ID</p> </li>
        /// <li> <p>Key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li>
        /// <li> <p>ARN using key ID. The ID ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>key</code> namespace, and then the key ID. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li>
        /// <li> <p>ARN using key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>. </p> </li>
        /// </ul>
        /// <p>Amazon Web Services parses <code>KmsKeyId</code> asynchronously, meaning that the action you call may appear to complete even though you provided an invalid identifier. This action will eventually report failure. </p>
        /// <p>The specified KMS key must exist in the Region that the AMI is being copied to.</p>
        /// <p>Amazon EBS does not support asymmetric KMS keys.</p>
        pub fn set_kms_key_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_kms_key_id(input);
            self
        }
        /// <p>The license type to be used for the Amazon Machine Image (AMI) after importing.</p>
        /// <p>Specify <code>AWS</code> to replace the source-system license with an Amazon Web Services license or <code>BYOL</code> to retain the source-system license. Leaving this parameter undefined is the same as choosing <code>AWS</code> when importing a Windows Server operating system, and the same as choosing <code>BYOL</code> when importing a Windows client operating system (such as Windows 10) or a Linux operating system.</p>
        /// <p>To use <code>BYOL</code>, you must have existing licenses with rights to use these licenses in a third party cloud, such as Amazon Web Services. For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image">Prerequisites</a> in the VM Import/Export User Guide.</p>
        pub fn license_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.license_type(input.into());
            self
        }
        /// <p>The license type to be used for the Amazon Machine Image (AMI) after importing.</p>
        /// <p>Specify <code>AWS</code> to replace the source-system license with an Amazon Web Services license or <code>BYOL</code> to retain the source-system license. Leaving this parameter undefined is the same as choosing <code>AWS</code> when importing a Windows Server operating system, and the same as choosing <code>BYOL</code> when importing a Windows client operating system (such as Windows 10) or a Linux operating system.</p>
        /// <p>To use <code>BYOL</code>, you must have existing licenses with rights to use these licenses in a third party cloud, such as Amazon Web Services. For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image">Prerequisites</a> in the VM Import/Export User Guide.</p>
        pub fn set_license_type(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_license_type(input);
            self
        }
        /// <p>The operating system of the virtual machine.</p>
        /// <p>Valid values: <code>Windows</code> | <code>Linux</code> </p>
        pub fn platform(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.platform(input.into());
            self
        }
        /// <p>The operating system of the virtual machine.</p>
        /// <p>Valid values: <code>Windows</code> | <code>Linux</code> </p>
        pub fn set_platform(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_platform(input);
            self
        }
        /// <p>The name of the role to use when not using the default role, 'vmimport'.</p>
        pub fn role_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.role_name(input.into());
            self
        }
        /// <p>The name of the role to use when not using the default role, 'vmimport'.</p>
        pub fn set_role_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_role_name(input);
            self
        }
        /// Appends an item to `LicenseSpecifications`.
        ///
        /// To override the contents of this collection use [`set_license_specifications`](Self::set_license_specifications).
        ///
        /// <p>The ARNs of the license configurations.</p>
        pub fn license_specifications(
            mut self,
            input: crate::model::ImportImageLicenseConfigurationRequest,
        ) -> Self {
            self.inner = self.inner.license_specifications(input);
            self
        }
        /// <p>The ARNs of the license configurations.</p>
        pub fn set_license_specifications(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::ImportImageLicenseConfigurationRequest>,
            >,
        ) -> Self {
            self.inner = self.inner.set_license_specifications(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the import image task during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the import image task during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>The usage operation value. For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#prerequisites">Licensing options</a> in the <i>VM Import/Export User Guide</i>.</p>
        pub fn usage_operation(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.usage_operation(input.into());
            self
        }
        /// <p>The usage operation value. For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#prerequisites">Licensing options</a> in the <i>VM Import/Export User Guide</i>.</p>
        pub fn set_usage_operation(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_usage_operation(input);
            self
        }
        /// <p>The boot mode of the virtual machine.</p>
        pub fn boot_mode(mut self, input: crate::model::BootModeValues) -> Self {
            self.inner = self.inner.boot_mode(input);
            self
        }
        /// <p>The boot mode of the virtual machine.</p>
        pub fn set_boot_mode(
            mut self,
            input: std::option::Option<crate::model::BootModeValues>,
        ) -> Self {
            self.inner = self.inner.set_boot_mode(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ImportInstance`.
    ///
    /// <p>Creates an import instance task using metadata from the specified disk image.</p>
    /// <p>This API action supports only single-volume VMs. To import multi-volume VMs, use <code>ImportImage</code> instead.</p>
    /// <p>This API action is not supported by the Command Line Interface (CLI). For information about using the Amazon EC2 CLI, which is deprecated, see <a href="https://awsdocs.s3.amazonaws.com/EC2/ec2-clt.pdf#UsingVirtualMachinesinAmazonEC2">Importing a VM to Amazon EC2</a> in the <i>Amazon EC2 CLI Reference</i> PDF file.</p>
    /// <p>For information about the import manifest referenced by this API action, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html">VM Import Manifest</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ImportInstance {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::import_instance_input::Builder,
    }
    impl ImportInstance {
        /// Creates a new `ImportInstance`.
        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::ImportInstance,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ImportInstanceError>,
        > {
            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::ImportInstanceOutput,
            aws_smithy_http::result::SdkError<crate::error::ImportInstanceError>,
        > {
            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>A description for the instance being imported.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the instance being imported.</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 `DiskImages`.
        ///
        /// To override the contents of this collection use [`set_disk_images`](Self::set_disk_images).
        ///
        /// <p>The disk image.</p>
        pub fn disk_images(mut self, input: crate::model::DiskImage) -> Self {
            self.inner = self.inner.disk_images(input);
            self
        }
        /// <p>The disk image.</p>
        pub fn set_disk_images(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::DiskImage>>,
        ) -> Self {
            self.inner = self.inner.set_disk_images(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The launch specification.</p>
        pub fn launch_specification(
            mut self,
            input: crate::model::ImportInstanceLaunchSpecification,
        ) -> Self {
            self.inner = self.inner.launch_specification(input);
            self
        }
        /// <p>The launch specification.</p>
        pub fn set_launch_specification(
            mut self,
            input: std::option::Option<crate::model::ImportInstanceLaunchSpecification>,
        ) -> Self {
            self.inner = self.inner.set_launch_specification(input);
            self
        }
        /// <p>The instance operating system.</p>
        pub fn platform(mut self, input: crate::model::PlatformValues) -> Self {
            self.inner = self.inner.platform(input);
            self
        }
        /// <p>The instance operating system.</p>
        pub fn set_platform(
            mut self,
            input: std::option::Option<crate::model::PlatformValues>,
        ) -> Self {
            self.inner = self.inner.set_platform(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ImportKeyPair`.
    ///
    /// <p>Imports the public key from an RSA or ED25519 key pair that you created with a third-party tool. Compare this with <code>CreateKeyPair</code>, in which Amazon Web Services creates the key pair and gives the keys to you (Amazon Web Services keeps a copy of the public key). With ImportKeyPair, you create the key pair and give Amazon Web Services just the public key. The private key is never transferred between you and Amazon Web Services.</p>
    /// <p>For more information about key pairs, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html">Amazon EC2 key pairs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ImportKeyPair {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::import_key_pair_input::Builder,
    }
    impl ImportKeyPair {
        /// Creates a new `ImportKeyPair`.
        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::ImportKeyPair,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ImportKeyPairError>,
        > {
            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::ImportKeyPairOutput,
            aws_smithy_http::result::SdkError<crate::error::ImportKeyPairError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A unique name for the key pair.</p>
        pub fn key_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.key_name(input.into());
            self
        }
        /// <p>A unique name for the key pair.</p>
        pub fn set_key_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_key_name(input);
            self
        }
        /// <p>The public key. For API calls, the text must be base64-encoded. For command line tools, base64 encoding is performed for you.</p>
        pub fn public_key_material(mut self, input: aws_smithy_types::Blob) -> Self {
            self.inner = self.inner.public_key_material(input);
            self
        }
        /// <p>The public key. For API calls, the text must be base64-encoded. For command line tools, base64 encoding is performed for you.</p>
        pub fn set_public_key_material(
            mut self,
            input: std::option::Option<aws_smithy_types::Blob>,
        ) -> Self {
            self.inner = self.inner.set_public_key_material(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the imported key pair.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the imported key pair.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ImportSnapshot`.
    ///
    /// <p>Imports a disk into an EBS snapshot.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-import-snapshot.html">Importing a disk as a snapshot using VM Import/Export</a> in the <i>VM Import/Export User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ImportSnapshot {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::import_snapshot_input::Builder,
    }
    impl ImportSnapshot {
        /// Creates a new `ImportSnapshot`.
        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::ImportSnapshot,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ImportSnapshotError>,
        > {
            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::ImportSnapshotOutput,
            aws_smithy_http::result::SdkError<crate::error::ImportSnapshotError>,
        > {
            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 client-specific data.</p>
        pub fn client_data(mut self, input: crate::model::ClientData) -> Self {
            self.inner = self.inner.client_data(input);
            self
        }
        /// <p>The client-specific data.</p>
        pub fn set_client_data(
            mut self,
            input: std::option::Option<crate::model::ClientData>,
        ) -> Self {
            self.inner = self.inner.set_client_data(input);
            self
        }
        /// <p>Token to enable idempotency for VM import requests.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Token to enable idempotency for VM import requests.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>The description string for the import snapshot task.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description string for the import snapshot task.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Information about the disk container.</p>
        pub fn disk_container(mut self, input: crate::model::SnapshotDiskContainer) -> Self {
            self.inner = self.inner.disk_container(input);
            self
        }
        /// <p>Information about the disk container.</p>
        pub fn set_disk_container(
            mut self,
            input: std::option::Option<crate::model::SnapshotDiskContainer>,
        ) -> Self {
            self.inner = self.inner.set_disk_container(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Specifies whether the destination snapshot of the imported image should be encrypted. The default KMS key for EBS is used unless you specify a non-default KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS Encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn encrypted(mut self, input: bool) -> Self {
            self.inner = self.inner.encrypted(input);
            self
        }
        /// <p>Specifies whether the destination snapshot of the imported image should be encrypted. The default KMS key for EBS is used unless you specify a non-default KMS key using <code>KmsKeyId</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS Encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn set_encrypted(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_encrypted(input);
            self
        }
        /// <p>An identifier for the symmetric KMS key to use when creating the encrypted snapshot. This parameter is only required if you want to use a non-default KMS key; if this parameter is not specified, the default KMS key for EBS is used. If a <code>KmsKeyId</code> is specified, the <code>Encrypted</code> flag must also be set. </p>
        /// <p>The KMS key identifier may be provided in any of the following formats: </p>
        /// <ul>
        /// <li> <p>Key ID</p> </li>
        /// <li> <p>Key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li>
        /// <li> <p>ARN using key ID. The ID ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>key</code> namespace, and then the key ID. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li>
        /// <li> <p>ARN using key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>. </p> </li>
        /// </ul>
        /// <p>Amazon Web Services parses <code>KmsKeyId</code> asynchronously, meaning that the action you call may appear to complete even though you provided an invalid identifier. This action will eventually report failure. </p>
        /// <p>The specified KMS key must exist in the Region that the snapshot is being copied to.</p>
        /// <p>Amazon EBS does not support asymmetric KMS keys.</p>
        pub fn kms_key_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.kms_key_id(input.into());
            self
        }
        /// <p>An identifier for the symmetric KMS key to use when creating the encrypted snapshot. This parameter is only required if you want to use a non-default KMS key; if this parameter is not specified, the default KMS key for EBS is used. If a <code>KmsKeyId</code> is specified, the <code>Encrypted</code> flag must also be set. </p>
        /// <p>The KMS key identifier may be provided in any of the following formats: </p>
        /// <ul>
        /// <li> <p>Key ID</p> </li>
        /// <li> <p>Key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>.</p> </li>
        /// <li> <p>ARN using key ID. The ID ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>key</code> namespace, and then the key ID. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:key/<i>abcd1234-a123-456a-a12b-a123b4cd56ef</i>.</p> </li>
        /// <li> <p>ARN using key alias. The alias ARN contains the <code>arn:aws:kms</code> namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the <code>alias</code> namespace, and then the key alias. For example, arn:aws:kms:<i>us-east-1</i>:<i>012345678910</i>:alias/<i>ExampleAlias</i>. </p> </li>
        /// </ul>
        /// <p>Amazon Web Services parses <code>KmsKeyId</code> asynchronously, meaning that the action you call may appear to complete even though you provided an invalid identifier. This action will eventually report failure. </p>
        /// <p>The specified KMS key must exist in the Region that the snapshot is being copied to.</p>
        /// <p>Amazon EBS does not support asymmetric KMS keys.</p>
        pub fn set_kms_key_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_kms_key_id(input);
            self
        }
        /// <p>The name of the role to use when not using the default role, 'vmimport'.</p>
        pub fn role_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.role_name(input.into());
            self
        }
        /// <p>The name of the role to use when not using the default role, 'vmimport'.</p>
        pub fn set_role_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_role_name(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the import snapshot task during creation.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the import snapshot task during creation.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ImportVolume`.
    ///
    /// <p>Creates an import volume task using metadata from the specified disk image.</p>
    /// <p>This API action supports only single-volume VMs. To import multi-volume VMs, use <code>ImportImage</code> instead. To import a disk to a snapshot, use <code>ImportSnapshot</code> instead.</p>
    /// <p>This API action is not supported by the Command Line Interface (CLI). For information about using the Amazon EC2 CLI, which is deprecated, see <a href="https://awsdocs.s3.amazonaws.com/EC2/ec2-clt.pdf#importing-your-volumes-into-amazon-ebs">Importing Disks to Amazon EBS</a> in the <i>Amazon EC2 CLI Reference</i> PDF file.</p>
    /// <p>For information about the import manifest referenced by this API action, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html">VM Import Manifest</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ImportVolume {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::import_volume_input::Builder,
    }
    impl ImportVolume {
        /// Creates a new `ImportVolume`.
        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::ImportVolume,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ImportVolumeError>,
        > {
            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::ImportVolumeOutput,
            aws_smithy_http::result::SdkError<crate::error::ImportVolumeError>,
        > {
            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 Availability Zone for the resulting EBS volume.</p>
        pub fn availability_zone(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone(input.into());
            self
        }
        /// <p>The Availability Zone for the resulting EBS volume.</p>
        pub fn set_availability_zone(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone(input);
            self
        }
        /// <p>A description of the volume.</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 volume.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The disk image.</p>
        pub fn image(mut self, input: crate::model::DiskImageDetail) -> Self {
            self.inner = self.inner.image(input);
            self
        }
        /// <p>The disk image.</p>
        pub fn set_image(
            mut self,
            input: std::option::Option<crate::model::DiskImageDetail>,
        ) -> Self {
            self.inner = self.inner.set_image(input);
            self
        }
        /// <p>The volume size.</p>
        pub fn volume(mut self, input: crate::model::VolumeDetail) -> Self {
            self.inner = self.inner.volume(input);
            self
        }
        /// <p>The volume size.</p>
        pub fn set_volume(
            mut self,
            input: std::option::Option<crate::model::VolumeDetail>,
        ) -> Self {
            self.inner = self.inner.set_volume(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListImagesInRecycleBin`.
    ///
    /// <p>Lists one or more AMIs that are currently in the Recycle Bin. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html">Recycle Bin</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListImagesInRecycleBin {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_images_in_recycle_bin_input::Builder,
    }
    impl ListImagesInRecycleBin {
        /// Creates a new `ListImagesInRecycleBin`.
        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::ListImagesInRecycleBin,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListImagesInRecycleBinError>,
        > {
            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::ListImagesInRecycleBinOutput,
            aws_smithy_http::result::SdkError<crate::error::ListImagesInRecycleBinError>,
        > {
            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::ListImagesInRecycleBinPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListImagesInRecycleBinPaginator {
            crate::paginator::ListImagesInRecycleBinPaginator::new(self.handle, self.inner)
        }
        /// Appends an item to `ImageIds`.
        ///
        /// To override the contents of this collection use [`set_image_ids`](Self::set_image_ids).
        ///
        /// <p>The IDs of the AMIs to list. Omit this parameter to list all of the AMIs that are in the Recycle Bin. You can specify up to 20 IDs in a single request.</p>
        pub fn image_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_ids(input.into());
            self
        }
        /// <p>The IDs of the AMIs to list. Omit this parameter to list all of the AMIs that are in the Recycle Bin. You can specify up to 20 IDs in a single request.</p>
        pub fn set_image_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_image_ids(input);
            self
        }
        /// <p>The token for the next page of results.</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 page of results.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        /// <p>If you do not specify a value for <i>MaxResults</i>, the request returns 1,000 items per page by default. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination"> Pagination</a>.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
        /// <p>If you do not specify a value for <i>MaxResults</i>, the request returns 1,000 items per page by default. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination"> Pagination</a>.</p>
        pub fn set_max_results(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_results(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListSnapshotsInRecycleBin`.
    ///
    /// <p>Lists one or more snapshots that are currently in the Recycle Bin.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListSnapshotsInRecycleBin {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_snapshots_in_recycle_bin_input::Builder,
    }
    impl ListSnapshotsInRecycleBin {
        /// Creates a new `ListSnapshotsInRecycleBin`.
        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::ListSnapshotsInRecycleBin,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ListSnapshotsInRecycleBinError>,
        > {
            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::ListSnapshotsInRecycleBinOutput,
            aws_smithy_http::result::SdkError<crate::error::ListSnapshotsInRecycleBinError>,
        > {
            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::ListSnapshotsInRecycleBinPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListSnapshotsInRecycleBinPaginator {
            crate::paginator::ListSnapshotsInRecycleBinPaginator::new(self.handle, self.inner)
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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
        }
        /// Appends an item to `SnapshotIds`.
        ///
        /// To override the contents of this collection use [`set_snapshot_ids`](Self::set_snapshot_ids).
        ///
        /// <p>The IDs of the snapshots to list. Omit this parameter to list all of the snapshots that are in the Recycle Bin.</p>
        pub fn snapshot_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_ids(input.into());
            self
        }
        /// <p>The IDs of the snapshots to list. Omit this parameter to list all of the snapshots that are in the Recycle Bin.</p>
        pub fn set_snapshot_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_snapshot_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyAddressAttribute`.
    ///
    /// <p>Modifies an attribute of the specified Elastic IP address. For requirements, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS">Using reverse DNS for email applications</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyAddressAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_address_attribute_input::Builder,
    }
    impl ModifyAddressAttribute {
        /// Creates a new `ModifyAddressAttribute`.
        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::ModifyAddressAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyAddressAttributeError>,
        > {
            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::ModifyAddressAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyAddressAttributeError>,
        > {
            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>[EC2-VPC] The allocation ID.</p>
        pub fn allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_id(input.into());
            self
        }
        /// <p>[EC2-VPC] The allocation ID.</p>
        pub fn set_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_allocation_id(input);
            self
        }
        /// <p>The domain name to modify for the IP address.</p>
        pub fn domain_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.domain_name(input.into());
            self
        }
        /// <p>The domain name to modify for the IP address.</p>
        pub fn set_domain_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_domain_name(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyAvailabilityZoneGroup`.
    ///
    /// <p>Changes the opt-in status of the Local Zone and Wavelength Zone group for your account.</p>
    /// <p>Use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html"> DescribeAvailabilityZones</a> to view the value for <code>GroupName</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyAvailabilityZoneGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_availability_zone_group_input::Builder,
    }
    impl ModifyAvailabilityZoneGroup {
        /// Creates a new `ModifyAvailabilityZoneGroup`.
        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::ModifyAvailabilityZoneGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyAvailabilityZoneGroupError>,
        > {
            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::ModifyAvailabilityZoneGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyAvailabilityZoneGroupError>,
        > {
            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 Availability Zone group, Local Zone group, or Wavelength Zone group.</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>The name of the Availability Zone group, Local Zone group, or Wavelength Zone group.</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// <p>Indicates whether you are opted in to the Local Zone group or Wavelength Zone group. The only valid value is <code>opted-in</code>. You must contact <a href="https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services">Amazon Web Services Support</a> to opt out of a Local Zone or Wavelength Zone group.</p>
        pub fn opt_in_status(
            mut self,
            input: crate::model::ModifyAvailabilityZoneOptInStatus,
        ) -> Self {
            self.inner = self.inner.opt_in_status(input);
            self
        }
        /// <p>Indicates whether you are opted in to the Local Zone group or Wavelength Zone group. The only valid value is <code>opted-in</code>. You must contact <a href="https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services">Amazon Web Services Support</a> to opt out of a Local Zone or Wavelength Zone group.</p>
        pub fn set_opt_in_status(
            mut self,
            input: std::option::Option<crate::model::ModifyAvailabilityZoneOptInStatus>,
        ) -> Self {
            self.inner = self.inner.set_opt_in_status(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyCapacityReservation`.
    ///
    /// <p>Modifies a Capacity Reservation's capacity and the conditions under which it is to be released. You cannot change a Capacity Reservation's instance type, EBS optimization, instance store settings, platform, Availability Zone, or instance eligibility. If you need to modify any of these attributes, we recommend that you cancel the Capacity Reservation, and then create a new one with the required attributes.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyCapacityReservation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_capacity_reservation_input::Builder,
    }
    impl ModifyCapacityReservation {
        /// Creates a new `ModifyCapacityReservation`.
        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::ModifyCapacityReservation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyCapacityReservationError>,
        > {
            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::ModifyCapacityReservationOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyCapacityReservationError>,
        > {
            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 Capacity Reservation.</p>
        pub fn capacity_reservation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.capacity_reservation_id(input.into());
            self
        }
        /// <p>The ID of the Capacity Reservation.</p>
        pub fn set_capacity_reservation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_id(input);
            self
        }
        /// <p>The number of instances for which to reserve capacity. The number of instances can't be increased or decreased by more than <code>1000</code> in a single request.</p>
        pub fn instance_count(mut self, input: i32) -> Self {
            self.inner = self.inner.instance_count(input);
            self
        }
        /// <p>The number of instances for which to reserve capacity. The number of instances can't be increased or decreased by more than <code>1000</code> in a single request.</p>
        pub fn set_instance_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_instance_count(input);
            self
        }
        /// <p>The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to <code>expired</code> when it reaches its end date and time.</p>
        /// <p>The Capacity Reservation is cancelled within an hour from the specified time. For example, if you specify 5/31/2019, 13:30:55, the Capacity Reservation is guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019.</p>
        /// <p>You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>. Omit <code>EndDate</code> if <code>EndDateType</code> is <code>unlimited</code>.</p>
        pub fn end_date(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.end_date(input);
            self
        }
        /// <p>The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to <code>expired</code> when it reaches its end date and time.</p>
        /// <p>The Capacity Reservation is cancelled within an hour from the specified time. For example, if you specify 5/31/2019, 13:30:55, the Capacity Reservation is guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019.</p>
        /// <p>You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>. Omit <code>EndDate</code> if <code>EndDateType</code> is <code>unlimited</code>.</p>
        pub fn set_end_date(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_end_date(input);
            self
        }
        /// <p>Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>
        /// <ul>
        /// <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it. Do not provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>unlimited</code>.</p> </li>
        /// <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time. You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>.</p> </li>
        /// </ul>
        pub fn end_date_type(mut self, input: crate::model::EndDateType) -> Self {
            self.inner = self.inner.end_date_type(input);
            self
        }
        /// <p>Indicates the way in which the Capacity Reservation ends. A Capacity Reservation can have one of the following end types:</p>
        /// <ul>
        /// <li> <p> <code>unlimited</code> - The Capacity Reservation remains active until you explicitly cancel it. Do not provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>unlimited</code>.</p> </li>
        /// <li> <p> <code>limited</code> - The Capacity Reservation expires automatically at a specified date and time. You must provide an <code>EndDate</code> value if <code>EndDateType</code> is <code>limited</code>.</p> </li>
        /// </ul>
        pub fn set_end_date_type(
            mut self,
            input: std::option::Option<crate::model::EndDateType>,
        ) -> Self {
            self.inner = self.inner.set_end_date_type(input);
            self
        }
        /// <p>Reserved. Capacity Reservations you have created are accepted by default.</p>
        pub fn accept(mut self, input: bool) -> Self {
            self.inner = self.inner.accept(input);
            self
        }
        /// <p>Reserved. Capacity Reservations you have created are accepted by default.</p>
        pub fn set_accept(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_accept(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Reserved for future use.</p>
        pub fn additional_info(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.additional_info(input.into());
            self
        }
        /// <p>Reserved for future use.</p>
        pub fn set_additional_info(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_additional_info(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyCapacityReservationFleet`.
    ///
    /// <p>Modifies a Capacity Reservation Fleet.</p>
    /// <p>When you modify the total target capacity of a Capacity Reservation Fleet, the Fleet automatically creates new Capacity Reservations, or modifies or cancels existing Capacity Reservations in the Fleet to meet the new total target capacity. When you modify the end date for the Fleet, the end dates for all of the individual Capacity Reservations in the Fleet are updated accordingly.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyCapacityReservationFleet {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_capacity_reservation_fleet_input::Builder,
    }
    impl ModifyCapacityReservationFleet {
        /// Creates a new `ModifyCapacityReservationFleet`.
        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::ModifyCapacityReservationFleet,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyCapacityReservationFleetError>,
        > {
            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::ModifyCapacityReservationFleetOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyCapacityReservationFleetError>,
        > {
            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 Capacity Reservation Fleet to modify.</p>
        pub fn capacity_reservation_fleet_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.capacity_reservation_fleet_id(input.into());
            self
        }
        /// <p>The ID of the Capacity Reservation Fleet to modify.</p>
        pub fn set_capacity_reservation_fleet_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_fleet_id(input);
            self
        }
        /// <p>The total number of capacity units to be reserved by the Capacity Reservation Fleet. This value, together with the instance type weights that you assign to each instance type used by the Fleet determine the number of instances for which the Fleet reserves capacity. Both values are based on units that make sense for your workload. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity">Total target capacity</a> in the Amazon EC2 User Guide.</p>
        pub fn total_target_capacity(mut self, input: i32) -> Self {
            self.inner = self.inner.total_target_capacity(input);
            self
        }
        /// <p>The total number of capacity units to be reserved by the Capacity Reservation Fleet. This value, together with the instance type weights that you assign to each instance type used by the Fleet determine the number of instances for which the Fleet reserves capacity. Both values are based on units that make sense for your workload. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity">Total target capacity</a> in the Amazon EC2 User Guide.</p>
        pub fn set_total_target_capacity(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_total_target_capacity(input);
            self
        }
        /// <p>The date and time at which the Capacity Reservation Fleet expires. When the Capacity Reservation Fleet expires, its state changes to <code>expired</code> and all of the Capacity Reservations in the Fleet expire.</p>
        /// <p>The Capacity Reservation Fleet expires within an hour after the specified time. For example, if you specify <code>5/31/2019</code>, <code>13:30:55</code>, the Capacity Reservation Fleet is guaranteed to expire between <code>13:30:55</code> and <code>14:30:55</code> on <code>5/31/2019</code>.</p>
        /// <p>You can't specify <b>EndDate</b> and <b> RemoveEndDate</b> in the same request.</p>
        pub fn end_date(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.end_date(input);
            self
        }
        /// <p>The date and time at which the Capacity Reservation Fleet expires. When the Capacity Reservation Fleet expires, its state changes to <code>expired</code> and all of the Capacity Reservations in the Fleet expire.</p>
        /// <p>The Capacity Reservation Fleet expires within an hour after the specified time. For example, if you specify <code>5/31/2019</code>, <code>13:30:55</code>, the Capacity Reservation Fleet is guaranteed to expire between <code>13:30:55</code> and <code>14:30:55</code> on <code>5/31/2019</code>.</p>
        /// <p>You can't specify <b>EndDate</b> and <b> RemoveEndDate</b> in the same request.</p>
        pub fn set_end_date(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_end_date(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether to remove the end date from the Capacity Reservation Fleet. If you remove the end date, the Capacity Reservation Fleet does not expire and it remains active until you explicitly cancel it using the <b>CancelCapacityReservationFleet</b> action.</p>
        /// <p>You can't specify <b>RemoveEndDate</b> and <b> EndDate</b> in the same request.</p>
        pub fn remove_end_date(mut self, input: bool) -> Self {
            self.inner = self.inner.remove_end_date(input);
            self
        }
        /// <p>Indicates whether to remove the end date from the Capacity Reservation Fleet. If you remove the end date, the Capacity Reservation Fleet does not expire and it remains active until you explicitly cancel it using the <b>CancelCapacityReservationFleet</b> action.</p>
        /// <p>You can't specify <b>RemoveEndDate</b> and <b> EndDate</b> in the same request.</p>
        pub fn set_remove_end_date(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_remove_end_date(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyClientVpnEndpoint`.
    ///
    /// <p>Modifies the specified Client VPN endpoint. Modifying the DNS server resets existing client connections.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyClientVpnEndpoint {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_client_vpn_endpoint_input::Builder,
    }
    impl ModifyClientVpnEndpoint {
        /// Creates a new `ModifyClientVpnEndpoint`.
        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::ModifyClientVpnEndpoint,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyClientVpnEndpointError>,
        > {
            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::ModifyClientVpnEndpointOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyClientVpnEndpointError>,
        > {
            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 Client VPN endpoint to modify.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint to modify.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The ARN of the server certificate to be used. The server certificate must be provisioned in Certificate Manager (ACM).</p>
        pub fn server_certificate_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.server_certificate_arn(input.into());
            self
        }
        /// <p>The ARN of the server certificate to be used. The server certificate must be provisioned in Certificate Manager (ACM).</p>
        pub fn set_server_certificate_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_server_certificate_arn(input);
            self
        }
        /// <p>Information about the client connection logging options.</p>
        /// <p>If you enable client connection logging, data about client connections is sent to a Cloudwatch Logs log stream. The following information is logged:</p>
        /// <ul>
        /// <li> <p>Client connection requests</p> </li>
        /// <li> <p>Client connection results (successful and unsuccessful)</p> </li>
        /// <li> <p>Reasons for unsuccessful client connection requests</p> </li>
        /// <li> <p>Client connection termination time</p> </li>
        /// </ul>
        pub fn connection_log_options(mut self, input: crate::model::ConnectionLogOptions) -> Self {
            self.inner = self.inner.connection_log_options(input);
            self
        }
        /// <p>Information about the client connection logging options.</p>
        /// <p>If you enable client connection logging, data about client connections is sent to a Cloudwatch Logs log stream. The following information is logged:</p>
        /// <ul>
        /// <li> <p>Client connection requests</p> </li>
        /// <li> <p>Client connection results (successful and unsuccessful)</p> </li>
        /// <li> <p>Reasons for unsuccessful client connection requests</p> </li>
        /// <li> <p>Client connection termination time</p> </li>
        /// </ul>
        pub fn set_connection_log_options(
            mut self,
            input: std::option::Option<crate::model::ConnectionLogOptions>,
        ) -> Self {
            self.inner = self.inner.set_connection_log_options(input);
            self
        }
        /// <p>Information about the DNS servers to be used by Client VPN connections. A Client VPN endpoint can have up to two DNS servers.</p>
        pub fn dns_servers(
            mut self,
            input: crate::model::DnsServersOptionsModifyStructure,
        ) -> Self {
            self.inner = self.inner.dns_servers(input);
            self
        }
        /// <p>Information about the DNS servers to be used by Client VPN connections. A Client VPN endpoint can have up to two DNS servers.</p>
        pub fn set_dns_servers(
            mut self,
            input: std::option::Option<crate::model::DnsServersOptionsModifyStructure>,
        ) -> Self {
            self.inner = self.inner.set_dns_servers(input);
            self
        }
        /// <p>The port number to assign to the Client VPN endpoint for TCP and UDP traffic.</p>
        /// <p>Valid Values: <code>443</code> | <code>1194</code> </p>
        /// <p>Default Value: <code>443</code> </p>
        pub fn vpn_port(mut self, input: i32) -> Self {
            self.inner = self.inner.vpn_port(input);
            self
        }
        /// <p>The port number to assign to the Client VPN endpoint for TCP and UDP traffic.</p>
        /// <p>Valid Values: <code>443</code> | <code>1194</code> </p>
        /// <p>Default Value: <code>443</code> </p>
        pub fn set_vpn_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_vpn_port(input);
            self
        }
        /// <p>A brief description of the Client VPN endpoint.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A brief description of the Client VPN endpoint.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Indicates whether the VPN is split-tunnel.</p>
        /// <p>For information about split-tunnel VPN endpoints, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html">Split-tunnel Client VPN endpoint</a> in the <i>Client VPN Administrator Guide</i>.</p>
        pub fn split_tunnel(mut self, input: bool) -> Self {
            self.inner = self.inner.split_tunnel(input);
            self
        }
        /// <p>Indicates whether the VPN is split-tunnel.</p>
        /// <p>For information about split-tunnel VPN endpoints, see <a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html">Split-tunnel Client VPN endpoint</a> in the <i>Client VPN Administrator Guide</i>.</p>
        pub fn set_split_tunnel(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_split_tunnel(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `SecurityGroupIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_ids`](Self::set_security_group_ids).
        ///
        /// <p>The IDs of one or more security groups to apply to the target network.</p>
        pub fn security_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_ids(input.into());
            self
        }
        /// <p>The IDs of one or more security groups to apply to the target network.</p>
        pub fn set_security_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_ids(input);
            self
        }
        /// <p>The ID of the VPC to associate with the Client VPN endpoint.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC to associate with the Client VPN endpoint.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>Specify whether to enable the self-service portal for the Client VPN endpoint.</p>
        pub fn self_service_portal(mut self, input: crate::model::SelfServicePortal) -> Self {
            self.inner = self.inner.self_service_portal(input);
            self
        }
        /// <p>Specify whether to enable the self-service portal for the Client VPN endpoint.</p>
        pub fn set_self_service_portal(
            mut self,
            input: std::option::Option<crate::model::SelfServicePortal>,
        ) -> Self {
            self.inner = self.inner.set_self_service_portal(input);
            self
        }
        /// <p>The options for managing connection authorization for new client connections.</p>
        pub fn client_connect_options(mut self, input: crate::model::ClientConnectOptions) -> Self {
            self.inner = self.inner.client_connect_options(input);
            self
        }
        /// <p>The options for managing connection authorization for new client connections.</p>
        pub fn set_client_connect_options(
            mut self,
            input: std::option::Option<crate::model::ClientConnectOptions>,
        ) -> Self {
            self.inner = self.inner.set_client_connect_options(input);
            self
        }
        /// <p>The maximum VPN session duration time in hours.</p>
        /// <p>Valid values: <code>8 | 10 | 12 | 24</code> </p>
        /// <p>Default value: <code>24</code> </p>
        pub fn session_timeout_hours(mut self, input: i32) -> Self {
            self.inner = self.inner.session_timeout_hours(input);
            self
        }
        /// <p>The maximum VPN session duration time in hours.</p>
        /// <p>Valid values: <code>8 | 10 | 12 | 24</code> </p>
        /// <p>Default value: <code>24</code> </p>
        pub fn set_session_timeout_hours(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_session_timeout_hours(input);
            self
        }
        /// <p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>
        pub fn client_login_banner_options(
            mut self,
            input: crate::model::ClientLoginBannerOptions,
        ) -> Self {
            self.inner = self.inner.client_login_banner_options(input);
            self
        }
        /// <p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>
        pub fn set_client_login_banner_options(
            mut self,
            input: std::option::Option<crate::model::ClientLoginBannerOptions>,
        ) -> Self {
            self.inner = self.inner.set_client_login_banner_options(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyDefaultCreditSpecification`.
    ///
    /// <p>Modifies the default credit option for CPU usage of burstable performance instances. The default credit option is set at the account level per Amazon Web Services Region, and is specified per instance family. All new burstable performance instances in the account launch using the default credit option.</p>
    /// <p> <code>ModifyDefaultCreditSpecification</code> is an asynchronous operation, which works at an Amazon Web Services Region level and modifies the credit option for each Availability Zone. All zones in a Region are updated within five minutes. But if instances are launched during this operation, they might not get the new credit option until the zone is updated. To verify whether the update has occurred, you can call <code>GetDefaultCreditSpecification</code> and check <code>DefaultCreditSpecification</code> for updates.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html">Burstable performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyDefaultCreditSpecification {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_default_credit_specification_input::Builder,
    }
    impl ModifyDefaultCreditSpecification {
        /// Creates a new `ModifyDefaultCreditSpecification`.
        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::ModifyDefaultCreditSpecification,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyDefaultCreditSpecificationError>,
        > {
            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::ModifyDefaultCreditSpecificationOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyDefaultCreditSpecificationError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The instance family.</p>
        pub fn instance_family(
            mut self,
            input: crate::model::UnlimitedSupportedInstanceFamily,
        ) -> Self {
            self.inner = self.inner.instance_family(input);
            self
        }
        /// <p>The instance family.</p>
        pub fn set_instance_family(
            mut self,
            input: std::option::Option<crate::model::UnlimitedSupportedInstanceFamily>,
        ) -> Self {
            self.inner = self.inner.set_instance_family(input);
            self
        }
        /// <p>The credit option for CPU usage of the instance family.</p>
        /// <p>Valid Values: <code>standard</code> | <code>unlimited</code> </p>
        pub fn cpu_credits(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cpu_credits(input.into());
            self
        }
        /// <p>The credit option for CPU usage of the instance family.</p>
        /// <p>Valid Values: <code>standard</code> | <code>unlimited</code> </p>
        pub fn set_cpu_credits(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cpu_credits(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyEbsDefaultKmsKeyId`.
    ///
    /// <p>Changes the default KMS key for EBS encryption by default for your account in this Region.</p>
    /// <p>Amazon Web Services creates a unique Amazon Web Services managed KMS key in each Region for use with encryption by default. If you change the default KMS key to a symmetric customer managed KMS key, it is used instead of the Amazon Web Services managed KMS key. To reset the default KMS key to the Amazon Web Services managed KMS key for EBS, use <code>ResetEbsDefaultKmsKeyId</code>. Amazon EBS does not support asymmetric KMS keys.</p>
    /// <p>If you delete or disable the customer managed KMS key that you specified for use with encryption by default, your instances will fail to launch.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyEbsDefaultKmsKeyId {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_ebs_default_kms_key_id_input::Builder,
    }
    impl ModifyEbsDefaultKmsKeyId {
        /// Creates a new `ModifyEbsDefaultKmsKeyId`.
        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::ModifyEbsDefaultKmsKeyId,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyEbsDefaultKmsKeyIdError>,
        > {
            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::ModifyEbsDefaultKmsKeyIdOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyEbsDefaultKmsKeyIdError>,
        > {
            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 identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>
        /// <p>You can specify the KMS key using any of the following:</p>
        /// <ul>
        /// <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>
        /// <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>
        /// </ul>
        /// <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>
        /// <p>Amazon EBS does not support asymmetric KMS keys.</p>
        pub fn kms_key_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.kms_key_id(input.into());
            self
        }
        /// <p>The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If <code>KmsKeyId</code> is specified, the encrypted state must be <code>true</code>.</p>
        /// <p>You can specify the KMS key using any of the following:</p>
        /// <ul>
        /// <li> <p>Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Key alias. For example, alias/ExampleAlias.</p> </li>
        /// <li> <p>Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.</p> </li>
        /// <li> <p>Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.</p> </li>
        /// </ul>
        /// <p>Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.</p>
        /// <p>Amazon EBS does not support asymmetric KMS keys.</p>
        pub fn set_kms_key_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_kms_key_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyFleet`.
    ///
    /// <p>Modifies the specified EC2 Fleet.</p>
    /// <p>You can only modify an EC2 Fleet request of type <code>maintain</code>.</p>
    /// <p>While the EC2 Fleet is being modified, it is in the <code>modifying</code> state.</p>
    /// <p>To scale up your EC2 Fleet, increase its target capacity. The EC2 Fleet launches the additional Spot Instances according to the allocation strategy for the EC2 Fleet request. If the allocation strategy is <code>lowest-price</code>, the EC2 Fleet launches instances using the Spot Instance pool with the lowest price. If the allocation strategy is <code>diversified</code>, the EC2 Fleet distributes the instances across the Spot Instance pools. If the allocation strategy is <code>capacity-optimized</code>, EC2 Fleet launches instances from Spot Instance pools with optimal capacity for the number of instances that are launching.</p>
    /// <p>To scale down your EC2 Fleet, decrease its target capacity. First, the EC2 Fleet cancels any open requests that exceed the new target capacity. You can request that the EC2 Fleet terminate Spot Instances until the size of the fleet no longer exceeds the new target capacity. If the allocation strategy is <code>lowest-price</code>, the EC2 Fleet terminates the instances with the highest price per unit. If the allocation strategy is <code>capacity-optimized</code>, the EC2 Fleet terminates the instances in the Spot Instance pools that have the least available Spot Instance capacity. If the allocation strategy is <code>diversified</code>, the EC2 Fleet terminates instances across the Spot Instance pools. Alternatively, you can request that the EC2 Fleet keep the fleet at its current size, but not replace any Spot Instances that are interrupted or that you terminate manually.</p>
    /// <p>If you are finished with your EC2 Fleet for now, but will use it again later, you can set the target capacity to 0.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyFleet {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_fleet_input::Builder,
    }
    impl ModifyFleet {
        /// Creates a new `ModifyFleet`.
        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::ModifyFleet,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyFleetError>,
        > {
            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::ModifyFleetOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyFleetError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether running instances should be terminated if the total target capacity of the EC2 Fleet is decreased below the current size of the EC2 Fleet.</p>
        pub fn excess_capacity_termination_policy(
            mut self,
            input: crate::model::FleetExcessCapacityTerminationPolicy,
        ) -> Self {
            self.inner = self.inner.excess_capacity_termination_policy(input);
            self
        }
        /// <p>Indicates whether running instances should be terminated if the total target capacity of the EC2 Fleet is decreased below the current size of the EC2 Fleet.</p>
        pub fn set_excess_capacity_termination_policy(
            mut self,
            input: std::option::Option<crate::model::FleetExcessCapacityTerminationPolicy>,
        ) -> Self {
            self.inner = self.inner.set_excess_capacity_termination_policy(input);
            self
        }
        /// Appends an item to `LaunchTemplateConfigs`.
        ///
        /// To override the contents of this collection use [`set_launch_template_configs`](Self::set_launch_template_configs).
        ///
        /// <p>The launch template and overrides.</p>
        pub fn launch_template_configs(
            mut self,
            input: crate::model::FleetLaunchTemplateConfigRequest,
        ) -> Self {
            self.inner = self.inner.launch_template_configs(input);
            self
        }
        /// <p>The launch template and overrides.</p>
        pub fn set_launch_template_configs(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::FleetLaunchTemplateConfigRequest>,
            >,
        ) -> Self {
            self.inner = self.inner.set_launch_template_configs(input);
            self
        }
        /// <p>The ID of the EC2 Fleet.</p>
        pub fn fleet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fleet_id(input.into());
            self
        }
        /// <p>The ID of the EC2 Fleet.</p>
        pub fn set_fleet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_fleet_id(input);
            self
        }
        /// <p>The size of the EC2 Fleet.</p>
        pub fn target_capacity_specification(
            mut self,
            input: crate::model::TargetCapacitySpecificationRequest,
        ) -> Self {
            self.inner = self.inner.target_capacity_specification(input);
            self
        }
        /// <p>The size of the EC2 Fleet.</p>
        pub fn set_target_capacity_specification(
            mut self,
            input: std::option::Option<crate::model::TargetCapacitySpecificationRequest>,
        ) -> Self {
            self.inner = self.inner.set_target_capacity_specification(input);
            self
        }
        /// <p>Reserved.</p>
        pub fn context(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.context(input.into());
            self
        }
        /// <p>Reserved.</p>
        pub fn set_context(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_context(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyFpgaImageAttribute`.
    ///
    /// <p>Modifies the specified attribute of the specified Amazon FPGA Image (AFI).</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyFpgaImageAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_fpga_image_attribute_input::Builder,
    }
    impl ModifyFpgaImageAttribute {
        /// Creates a new `ModifyFpgaImageAttribute`.
        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::ModifyFpgaImageAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyFpgaImageAttributeError>,
        > {
            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::ModifyFpgaImageAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyFpgaImageAttributeError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the AFI.</p>
        pub fn fpga_image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fpga_image_id(input.into());
            self
        }
        /// <p>The ID of the AFI.</p>
        pub fn set_fpga_image_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_fpga_image_id(input);
            self
        }
        /// <p>The name of the attribute.</p>
        pub fn attribute(mut self, input: crate::model::FpgaImageAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The name of the attribute.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::FpgaImageAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>The operation type.</p>
        pub fn operation_type(mut self, input: crate::model::OperationType) -> Self {
            self.inner = self.inner.operation_type(input);
            self
        }
        /// <p>The operation type.</p>
        pub fn set_operation_type(
            mut self,
            input: std::option::Option<crate::model::OperationType>,
        ) -> Self {
            self.inner = self.inner.set_operation_type(input);
            self
        }
        /// Appends an item to `UserIds`.
        ///
        /// To override the contents of this collection use [`set_user_ids`](Self::set_user_ids).
        ///
        /// <p>The Amazon Web Services account IDs. This parameter is valid only when modifying the <code>loadPermission</code> attribute.</p>
        pub fn user_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.user_ids(input.into());
            self
        }
        /// <p>The Amazon Web Services account IDs. This parameter is valid only when modifying the <code>loadPermission</code> attribute.</p>
        pub fn set_user_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_user_ids(input);
            self
        }
        /// Appends an item to `UserGroups`.
        ///
        /// To override the contents of this collection use [`set_user_groups`](Self::set_user_groups).
        ///
        /// <p>The user groups. This parameter is valid only when modifying the <code>loadPermission</code> attribute.</p>
        pub fn user_groups(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.user_groups(input.into());
            self
        }
        /// <p>The user groups. This parameter is valid only when modifying the <code>loadPermission</code> attribute.</p>
        pub fn set_user_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_user_groups(input);
            self
        }
        /// Appends an item to `ProductCodes`.
        ///
        /// To override the contents of this collection use [`set_product_codes`](Self::set_product_codes).
        ///
        /// <p>The product codes. After you add a product code to an AFI, it can't be removed. This parameter is valid only when modifying the <code>productCodes</code> attribute.</p>
        pub fn product_codes(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.product_codes(input.into());
            self
        }
        /// <p>The product codes. After you add a product code to an AFI, it can't be removed. This parameter is valid only when modifying the <code>productCodes</code> attribute.</p>
        pub fn set_product_codes(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_product_codes(input);
            self
        }
        /// <p>The load permission for the AFI.</p>
        pub fn load_permission(mut self, input: crate::model::LoadPermissionModifications) -> Self {
            self.inner = self.inner.load_permission(input);
            self
        }
        /// <p>The load permission for the AFI.</p>
        pub fn set_load_permission(
            mut self,
            input: std::option::Option<crate::model::LoadPermissionModifications>,
        ) -> Self {
            self.inner = self.inner.set_load_permission(input);
            self
        }
        /// <p>A description for the AFI.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the AFI.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>A name for the AFI.</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>A name for the AFI.</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 `ModifyHosts`.
    ///
    /// <p>Modify the auto-placement setting of a Dedicated Host. When auto-placement is enabled, any instances that you launch with a tenancy of <code>host</code> but without a specific host ID are placed onto any available Dedicated Host in your account that has auto-placement enabled. When auto-placement is disabled, you need to provide a host ID to have the instance launch onto a specific host. If no host ID is provided, the instance is launched onto a suitable host with auto-placement enabled.</p>
    /// <p>You can also use this API action to modify a Dedicated Host to support either multiple instance types in an instance family, or to support a specific instance type only.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyHosts {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_hosts_input::Builder,
    }
    impl ModifyHosts {
        /// Creates a new `ModifyHosts`.
        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::ModifyHosts,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyHostsError>,
        > {
            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::ModifyHostsOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyHostsError>,
        > {
            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>Specify whether to enable or disable auto-placement.</p>
        pub fn auto_placement(mut self, input: crate::model::AutoPlacement) -> Self {
            self.inner = self.inner.auto_placement(input);
            self
        }
        /// <p>Specify whether to enable or disable auto-placement.</p>
        pub fn set_auto_placement(
            mut self,
            input: std::option::Option<crate::model::AutoPlacement>,
        ) -> Self {
            self.inner = self.inner.set_auto_placement(input);
            self
        }
        /// Appends an item to `HostIds`.
        ///
        /// To override the contents of this collection use [`set_host_ids`](Self::set_host_ids).
        ///
        /// <p>The IDs of the Dedicated Hosts to modify.</p>
        pub fn host_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.host_ids(input.into());
            self
        }
        /// <p>The IDs of the Dedicated Hosts to modify.</p>
        pub fn set_host_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_host_ids(input);
            self
        }
        /// <p>Indicates whether to enable or disable host recovery for the Dedicated Host. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html"> Host recovery</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn host_recovery(mut self, input: crate::model::HostRecovery) -> Self {
            self.inner = self.inner.host_recovery(input);
            self
        }
        /// <p>Indicates whether to enable or disable host recovery for the Dedicated Host. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html"> Host recovery</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_host_recovery(
            mut self,
            input: std::option::Option<crate::model::HostRecovery>,
        ) -> Self {
            self.inner = self.inner.set_host_recovery(input);
            self
        }
        /// <p>Specifies the instance type to be supported by the Dedicated Host. Specify this parameter to modify a Dedicated Host to support only a specific instance type.</p>
        /// <p>If you want to modify a Dedicated Host to support multiple instance types in its current instance family, omit this parameter and specify <b>InstanceFamily</b> instead. You cannot specify <b>InstanceType</b> and <b>InstanceFamily</b> in the same request.</p>
        pub fn instance_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_type(input.into());
            self
        }
        /// <p>Specifies the instance type to be supported by the Dedicated Host. Specify this parameter to modify a Dedicated Host to support only a specific instance type.</p>
        /// <p>If you want to modify a Dedicated Host to support multiple instance types in its current instance family, omit this parameter and specify <b>InstanceFamily</b> instead. You cannot specify <b>InstanceType</b> and <b>InstanceFamily</b> in the same request.</p>
        pub fn set_instance_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_type(input);
            self
        }
        /// <p>Specifies the instance family to be supported by the Dedicated Host. Specify this parameter to modify a Dedicated Host to support multiple instance types within its current instance family.</p>
        /// <p>If you want to modify a Dedicated Host to support a specific instance type only, omit this parameter and specify <b>InstanceType</b> instead. You cannot specify <b>InstanceFamily</b> and <b>InstanceType</b> in the same request.</p>
        pub fn instance_family(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_family(input.into());
            self
        }
        /// <p>Specifies the instance family to be supported by the Dedicated Host. Specify this parameter to modify a Dedicated Host to support multiple instance types within its current instance family.</p>
        /// <p>If you want to modify a Dedicated Host to support a specific instance type only, omit this parameter and specify <b>InstanceType</b> instead. You cannot specify <b>InstanceFamily</b> and <b>InstanceType</b> in the same request.</p>
        pub fn set_instance_family(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_family(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyIdentityIdFormat`.
    ///
    /// <p>Modifies the ID format of a resource for a specified IAM user, IAM role, or the root user for an account; or all IAM users, IAM roles, and the root user for an account. You can specify that resources should receive longer IDs (17-character IDs) when they are created. </p>
    /// <p>This request can only be used to modify longer ID settings for resource types that are within the opt-in period. Resources currently in their opt-in period include: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>. </p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html">Resource IDs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. </p>
    /// <p>This setting applies to the principal specified in the request; it does not apply to the principal that makes the request. </p>
    /// <p>Resources created with longer IDs are visible to all IAM roles and users, regardless of these settings and provided that they have permission to use the relevant <code>Describe</code> command for the resource type.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyIdentityIdFormat {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_identity_id_format_input::Builder,
    }
    impl ModifyIdentityIdFormat {
        /// Creates a new `ModifyIdentityIdFormat`.
        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::ModifyIdentityIdFormat,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyIdentityIdFormatError>,
        > {
            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::ModifyIdentityIdFormatOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyIdentityIdFormatError>,
        > {
            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 ARN of the principal, which can be an IAM user, IAM role, or the root user. Specify <code>all</code> to modify the ID format for all IAM users, IAM roles, and the root user of the account.</p>
        pub fn principal_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.principal_arn(input.into());
            self
        }
        /// <p>The ARN of the principal, which can be an IAM user, IAM role, or the root user. Specify <code>all</code> to modify the ID format for all IAM users, IAM roles, and the root user of the account.</p>
        pub fn set_principal_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_principal_arn(input);
            self
        }
        /// <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>.</p>
        /// <p>Alternatively, use the <code>all-current</code> option to include all resource types that are currently within their opt-in period for longer IDs.</p>
        pub fn resource(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource(input.into());
            self
        }
        /// <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>.</p>
        /// <p>Alternatively, use the <code>all-current</code> option to include all resource types that are currently within their opt-in period for longer IDs.</p>
        pub fn set_resource(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource(input);
            self
        }
        /// <p>Indicates whether the resource should use longer IDs (17-character IDs)</p>
        pub fn use_long_ids(mut self, input: bool) -> Self {
            self.inner = self.inner.use_long_ids(input);
            self
        }
        /// <p>Indicates whether the resource should use longer IDs (17-character IDs)</p>
        pub fn set_use_long_ids(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_use_long_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyIdFormat`.
    ///
    /// <p>Modifies the ID format for the specified resource on a per-Region basis. You can specify that resources should receive longer IDs (17-character IDs) when they are created.</p>
    /// <p>This request can only be used to modify longer ID settings for resource types that are within the opt-in period. Resources currently in their opt-in period include: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>.</p>
    /// <p>This setting applies to the IAM user who makes the request; it does not apply to the entire Amazon Web Services account. By default, an IAM user defaults to the same settings as the root user. If you're using this action as the root user, then these settings apply to the entire account, unless an IAM user explicitly overrides these settings for themselves. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html">Resource IDs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>Resources created with longer IDs are visible to all IAM roles and users, regardless of these settings and provided that they have permission to use the relevant <code>Describe</code> command for the resource type.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyIdFormat {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_id_format_input::Builder,
    }
    impl ModifyIdFormat {
        /// Creates a new `ModifyIdFormat`.
        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::ModifyIdFormat,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyIdFormatError>,
        > {
            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::ModifyIdFormatOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyIdFormatError>,
        > {
            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 type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>.</p>
        /// <p>Alternatively, use the <code>all-current</code> option to include all resource types that are currently within their opt-in period for longer IDs.</p>
        pub fn resource(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource(input.into());
            self
        }
        /// <p>The type of resource: <code>bundle</code> | <code>conversion-task</code> | <code>customer-gateway</code> | <code>dhcp-options</code> | <code>elastic-ip-allocation</code> | <code>elastic-ip-association</code> | <code>export-task</code> | <code>flow-log</code> | <code>image</code> | <code>import-task</code> | <code>internet-gateway</code> | <code>network-acl</code> | <code>network-acl-association</code> | <code>network-interface</code> | <code>network-interface-attachment</code> | <code>prefix-list</code> | <code>route-table</code> | <code>route-table-association</code> | <code>security-group</code> | <code>subnet</code> | <code>subnet-cidr-block-association</code> | <code>vpc</code> | <code>vpc-cidr-block-association</code> | <code>vpc-endpoint</code> | <code>vpc-peering-connection</code> | <code>vpn-connection</code> | <code>vpn-gateway</code>.</p>
        /// <p>Alternatively, use the <code>all-current</code> option to include all resource types that are currently within their opt-in period for longer IDs.</p>
        pub fn set_resource(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource(input);
            self
        }
        /// <p>Indicate whether the resource should use longer IDs (17-character IDs).</p>
        pub fn use_long_ids(mut self, input: bool) -> Self {
            self.inner = self.inner.use_long_ids(input);
            self
        }
        /// <p>Indicate whether the resource should use longer IDs (17-character IDs).</p>
        pub fn set_use_long_ids(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_use_long_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyImageAttribute`.
    ///
    /// <p>Modifies the specified attribute of the specified AMI. You can specify only one attribute at a time. You can use the <code>Attribute</code> parameter to specify the attribute or one of the following parameters: <code>Description</code> or <code>LaunchPermission</code>.</p>
    /// <p>Images with an Amazon Web Services Marketplace product code cannot be made public.</p>
    /// <p>To enable the SriovNetSupport enhanced networking attribute of an image, enable SriovNetSupport on an instance and create an AMI from the instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyImageAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_image_attribute_input::Builder,
    }
    impl ModifyImageAttribute {
        /// Creates a new `ModifyImageAttribute`.
        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::ModifyImageAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyImageAttributeError>,
        > {
            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::ModifyImageAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyImageAttributeError>,
        > {
            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 attribute to modify.</p>
        /// <p>Valid values: <code>description</code> | <code>launchPermission</code> </p>
        pub fn attribute(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.attribute(input.into());
            self
        }
        /// <p>The name of the attribute to modify.</p>
        /// <p>Valid values: <code>description</code> | <code>launchPermission</code> </p>
        pub fn set_attribute(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>A new description for the AMI.</p>
        pub fn description(mut self, input: crate::model::AttributeValue) -> Self {
            self.inner = self.inner.description(input);
            self
        }
        /// <p>A new description for the AMI.</p>
        pub fn set_description(
            mut self,
            input: std::option::Option<crate::model::AttributeValue>,
        ) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>A new launch permission for the AMI.</p>
        pub fn launch_permission(
            mut self,
            input: crate::model::LaunchPermissionModifications,
        ) -> Self {
            self.inner = self.inner.launch_permission(input);
            self
        }
        /// <p>A new launch permission for the AMI.</p>
        pub fn set_launch_permission(
            mut self,
            input: std::option::Option<crate::model::LaunchPermissionModifications>,
        ) -> Self {
            self.inner = self.inner.set_launch_permission(input);
            self
        }
        /// <p>The operation type. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn operation_type(mut self, input: crate::model::OperationType) -> Self {
            self.inner = self.inner.operation_type(input);
            self
        }
        /// <p>The operation type. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn set_operation_type(
            mut self,
            input: std::option::Option<crate::model::OperationType>,
        ) -> Self {
            self.inner = self.inner.set_operation_type(input);
            self
        }
        /// Appends an item to `ProductCodes`.
        ///
        /// To override the contents of this collection use [`set_product_codes`](Self::set_product_codes).
        ///
        /// <p>Not supported.</p>
        pub fn product_codes(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.product_codes(input.into());
            self
        }
        /// <p>Not supported.</p>
        pub fn set_product_codes(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_product_codes(input);
            self
        }
        /// Appends an item to `UserGroups`.
        ///
        /// To override the contents of this collection use [`set_user_groups`](Self::set_user_groups).
        ///
        /// <p>The user groups. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn user_groups(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.user_groups(input.into());
            self
        }
        /// <p>The user groups. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn set_user_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_user_groups(input);
            self
        }
        /// Appends an item to `UserIds`.
        ///
        /// To override the contents of this collection use [`set_user_ids`](Self::set_user_ids).
        ///
        /// <p>The Amazon Web Services account IDs. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn user_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.user_ids(input.into());
            self
        }
        /// <p>The Amazon Web Services account IDs. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn set_user_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_user_ids(input);
            self
        }
        /// <p>The value of the attribute being modified. This parameter can be used only when the <code>Attribute</code> parameter is <code>description</code>.</p>
        pub fn value(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.value(input.into());
            self
        }
        /// <p>The value of the attribute being modified. This parameter can be used only when the <code>Attribute</code> parameter is <code>description</code>.</p>
        pub fn set_value(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_value(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `OrganizationArns`.
        ///
        /// To override the contents of this collection use [`set_organization_arns`](Self::set_organization_arns).
        ///
        /// <p>The Amazon Resource Name (ARN) of an organization. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn organization_arns(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.organization_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of an organization. This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn set_organization_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_organization_arns(input);
            self
        }
        /// Appends an item to `OrganizationalUnitArns`.
        ///
        /// To override the contents of this collection use [`set_organizational_unit_arns`](Self::set_organizational_unit_arns).
        ///
        /// <p>The Amazon Resource Name (ARN) of an organizational unit (OU). This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn organizational_unit_arns(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.organizational_unit_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of an organizational unit (OU). This parameter can be used only when the <code>Attribute</code> parameter is <code>launchPermission</code>.</p>
        pub fn set_organizational_unit_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_organizational_unit_arns(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyInstanceAttribute`.
    ///
    /// <p>Modifies the specified attribute of the specified instance. You can specify only one attribute at a time.</p>
    /// <p> <b>Note: </b>Using this action to change the security groups associated with an elastic network interface (ENI) attached to an instance in a VPC can result in an error if the instance has more than one ENI. To change the security groups associated with an ENI attached to an instance that has multiple ENIs, we recommend that you use the <code>ModifyNetworkInterfaceAttribute</code> action.</p>
    /// <p>To modify some attributes, the instance must be stopped. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingAttributesWhileInstanceStopped.html">Modify a stopped instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyInstanceAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_instance_attribute_input::Builder,
    }
    impl ModifyInstanceAttribute {
        /// Creates a new `ModifyInstanceAttribute`.
        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::ModifyInstanceAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceAttributeError>,
        > {
            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::ModifyInstanceAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceAttributeError>,
        > {
            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>Enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. If the value is <code>true</code>, source/destination checks are enabled; otherwise, they are disabled. The default value is <code>true</code>. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.</p>
        pub fn source_dest_check(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.source_dest_check(input);
            self
        }
        /// <p>Enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. If the value is <code>true</code>, source/destination checks are enabled; otherwise, they are disabled. The default value is <code>true</code>. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.</p>
        pub fn set_source_dest_check(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_source_dest_check(input);
            self
        }
        /// <p>The name of the attribute to modify.</p> <important>
        /// <p>You can modify the following attributes only: <code>disableApiTermination</code> | <code>instanceType</code> | <code>kernel</code> | <code>ramdisk</code> | <code>instanceInitiatedShutdownBehavior</code> | <code>blockDeviceMapping</code> | <code>userData</code> | <code>sourceDestCheck</code> | <code>groupSet</code> | <code>ebsOptimized</code> | <code>sriovNetSupport</code> | <code>enaSupport</code> | <code>nvmeSupport</code> | <code>disableApiStop</code> | <code>enclaveOptions</code> </p>
        /// </important>
        pub fn attribute(mut self, input: crate::model::InstanceAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The name of the attribute to modify.</p> <important>
        /// <p>You can modify the following attributes only: <code>disableApiTermination</code> | <code>instanceType</code> | <code>kernel</code> | <code>ramdisk</code> | <code>instanceInitiatedShutdownBehavior</code> | <code>blockDeviceMapping</code> | <code>userData</code> | <code>sourceDestCheck</code> | <code>groupSet</code> | <code>ebsOptimized</code> | <code>sriovNetSupport</code> | <code>enaSupport</code> | <code>nvmeSupport</code> | <code>disableApiStop</code> | <code>enclaveOptions</code> </p>
        /// </important>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::InstanceAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// Appends an item to `BlockDeviceMappings`.
        ///
        /// To override the contents of this collection use [`set_block_device_mappings`](Self::set_block_device_mappings).
        ///
        /// <p>Modifies the <code>DeleteOnTermination</code> attribute for volumes that are currently attached. The volume must be owned by the caller. If no value is specified for <code>DeleteOnTermination</code>, the default is <code>true</code> and the volume is deleted when the instance is terminated.</p>
        /// <p>To add instance store volumes to an Amazon EBS-backed instance, you must add them when you launch the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM">Update the block device mapping when launching an instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn block_device_mappings(
            mut self,
            input: crate::model::InstanceBlockDeviceMappingSpecification,
        ) -> Self {
            self.inner = self.inner.block_device_mappings(input);
            self
        }
        /// <p>Modifies the <code>DeleteOnTermination</code> attribute for volumes that are currently attached. The volume must be owned by the caller. If no value is specified for <code>DeleteOnTermination</code>, the default is <code>true</code> and the volume is deleted when the instance is terminated.</p>
        /// <p>To add instance store volumes to an Amazon EBS-backed instance, you must add them when you launch the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM">Update the block device mapping when launching an instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_block_device_mappings(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::InstanceBlockDeviceMappingSpecification>,
            >,
        ) -> Self {
            self.inner = self.inner.set_block_device_mappings(input);
            self
        }
        /// <p>If the value is <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this parameter for Spot Instances.</p>
        pub fn disable_api_termination(
            mut self,
            input: crate::model::AttributeBooleanValue,
        ) -> Self {
            self.inner = self.inner.disable_api_termination(input);
            self
        }
        /// <p>If the value is <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this parameter for Spot Instances.</p>
        pub fn set_disable_api_termination(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_disable_api_termination(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Specifies whether the instance is optimized for Amazon EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance.</p>
        pub fn ebs_optimized(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.ebs_optimized(input);
            self
        }
        /// <p>Specifies whether the instance is optimized for Amazon EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance.</p>
        pub fn set_ebs_optimized(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_ebs_optimized(input);
            self
        }
        /// <p>Set to <code>true</code> to enable enhanced networking with ENA for the instance.</p>
        /// <p>This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.</p>
        pub fn ena_support(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.ena_support(input);
            self
        }
        /// <p>Set to <code>true</code> to enable enhanced networking with ENA for the instance.</p>
        /// <p>This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.</p>
        pub fn set_ena_support(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_ena_support(input);
            self
        }
        /// Appends an item to `Groups`.
        ///
        /// To override the contents of this collection use [`set_groups`](Self::set_groups).
        ///
        /// <p>[EC2-VPC] Replaces the security groups of the instance with the specified security groups. You must specify at least one security group, even if it's just the default security group for the VPC. You must specify the security group ID, not the security group name.</p>
        pub fn groups(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.groups(input.into());
            self
        }
        /// <p>[EC2-VPC] Replaces the security groups of the instance with the specified security groups. You must specify at least one security group, even if it's just the default security group for the VPC. You must specify the security group ID, not the security group name.</p>
        pub fn set_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_groups(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>Specifies whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).</p>
        pub fn instance_initiated_shutdown_behavior(
            mut self,
            input: crate::model::AttributeValue,
        ) -> Self {
            self.inner = self.inner.instance_initiated_shutdown_behavior(input);
            self
        }
        /// <p>Specifies whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).</p>
        pub fn set_instance_initiated_shutdown_behavior(
            mut self,
            input: std::option::Option<crate::model::AttributeValue>,
        ) -> Self {
            self.inner = self.inner.set_instance_initiated_shutdown_behavior(input);
            self
        }
        /// <p>Changes the instance type to the specified value. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>. If the instance type is not valid, the error returned is <code>InvalidInstanceAttributeValue</code>.</p>
        pub fn instance_type(mut self, input: crate::model::AttributeValue) -> Self {
            self.inner = self.inner.instance_type(input);
            self
        }
        /// <p>Changes the instance type to the specified value. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>. If the instance type is not valid, the error returned is <code>InvalidInstanceAttributeValue</code>.</p>
        pub fn set_instance_type(
            mut self,
            input: std::option::Option<crate::model::AttributeValue>,
        ) -> Self {
            self.inner = self.inner.set_instance_type(input);
            self
        }
        /// <p>Changes the instance's kernel to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html">PV-GRUB</a>.</p>
        pub fn kernel(mut self, input: crate::model::AttributeValue) -> Self {
            self.inner = self.inner.kernel(input);
            self
        }
        /// <p>Changes the instance's kernel to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html">PV-GRUB</a>.</p>
        pub fn set_kernel(
            mut self,
            input: std::option::Option<crate::model::AttributeValue>,
        ) -> Self {
            self.inner = self.inner.set_kernel(input);
            self
        }
        /// <p>Changes the instance's RAM disk to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html">PV-GRUB</a>.</p>
        pub fn ramdisk(mut self, input: crate::model::AttributeValue) -> Self {
            self.inner = self.inner.ramdisk(input);
            self
        }
        /// <p>Changes the instance's RAM disk to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html">PV-GRUB</a>.</p>
        pub fn set_ramdisk(
            mut self,
            input: std::option::Option<crate::model::AttributeValue>,
        ) -> Self {
            self.inner = self.inner.set_ramdisk(input);
            self
        }
        /// <p>Set to <code>simple</code> to enable enhanced networking with the Intel 82599 Virtual Function interface for the instance.</p>
        /// <p>There is no way to disable enhanced networking with the Intel 82599 Virtual Function interface at this time.</p>
        /// <p>This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.</p>
        pub fn sriov_net_support(mut self, input: crate::model::AttributeValue) -> Self {
            self.inner = self.inner.sriov_net_support(input);
            self
        }
        /// <p>Set to <code>simple</code> to enable enhanced networking with the Intel 82599 Virtual Function interface for the instance.</p>
        /// <p>There is no way to disable enhanced networking with the Intel 82599 Virtual Function interface at this time.</p>
        /// <p>This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.</p>
        pub fn set_sriov_net_support(
            mut self,
            input: std::option::Option<crate::model::AttributeValue>,
        ) -> Self {
            self.inner = self.inner.set_sriov_net_support(input);
            self
        }
        /// <p>Changes the instance's user data to the specified value. If you are using an Amazon Web Services SDK or command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text.</p>
        pub fn user_data(mut self, input: crate::model::BlobAttributeValue) -> Self {
            self.inner = self.inner.user_data(input);
            self
        }
        /// <p>Changes the instance's user data to the specified value. If you are using an Amazon Web Services SDK or command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text.</p>
        pub fn set_user_data(
            mut self,
            input: std::option::Option<crate::model::BlobAttributeValue>,
        ) -> Self {
            self.inner = self.inner.set_user_data(input);
            self
        }
        /// <p>A new value for the attribute. Use only with the <code>kernel</code>, <code>ramdisk</code>, <code>userData</code>, <code>disableApiTermination</code>, or <code>instanceInitiatedShutdownBehavior</code> attribute.</p>
        pub fn value(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.value(input.into());
            self
        }
        /// <p>A new value for the attribute. Use only with the <code>kernel</code>, <code>ramdisk</code>, <code>userData</code>, <code>disableApiTermination</code>, or <code>instanceInitiatedShutdownBehavior</code> attribute.</p>
        pub fn set_value(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_value(input);
            self
        }
        /// <p>Indicates whether an instance is enabled for stop protection. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection">Stop Protection</a>.</p>
        /// <p></p>
        pub fn disable_api_stop(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.disable_api_stop(input);
            self
        }
        /// <p>Indicates whether an instance is enabled for stop protection. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection">Stop Protection</a>.</p>
        /// <p></p>
        pub fn set_disable_api_stop(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_disable_api_stop(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyInstanceCapacityReservationAttributes`.
    ///
    /// <p>Modifies the Capacity Reservation settings for a stopped instance. Use this action to configure an instance to target a specific Capacity Reservation, run in any <code>open</code> Capacity Reservation with matching attributes, or run On-Demand Instance capacity.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyInstanceCapacityReservationAttributes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_instance_capacity_reservation_attributes_input::Builder,
    }
    impl ModifyInstanceCapacityReservationAttributes {
        /// Creates a new `ModifyInstanceCapacityReservationAttributes`.
        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::ModifyInstanceCapacityReservationAttributes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyInstanceCapacityReservationAttributesError,
            >,
        > {
            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::ModifyInstanceCapacityReservationAttributesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyInstanceCapacityReservationAttributesError,
            >,
        > {
            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 instance to be modified.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance to be modified.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>Information about the Capacity Reservation targeting option.</p>
        pub fn capacity_reservation_specification(
            mut self,
            input: crate::model::CapacityReservationSpecification,
        ) -> Self {
            self.inner = self.inner.capacity_reservation_specification(input);
            self
        }
        /// <p>Information about the Capacity Reservation targeting option.</p>
        pub fn set_capacity_reservation_specification(
            mut self,
            input: std::option::Option<crate::model::CapacityReservationSpecification>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_specification(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyInstanceCreditSpecification`.
    ///
    /// <p>Modifies the credit option for CPU usage on a running or stopped burstable performance instance. The credit options are <code>standard</code> and <code>unlimited</code>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html">Burstable performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyInstanceCreditSpecification {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_instance_credit_specification_input::Builder,
    }
    impl ModifyInstanceCreditSpecification {
        /// Creates a new `ModifyInstanceCreditSpecification`.
        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::ModifyInstanceCreditSpecification,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceCreditSpecificationError>,
        > {
            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::ModifyInstanceCreditSpecificationOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceCreditSpecificationError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// Appends an item to `InstanceCreditSpecifications`.
        ///
        /// To override the contents of this collection use [`set_instance_credit_specifications`](Self::set_instance_credit_specifications).
        ///
        /// <p>Information about the credit option for CPU usage.</p>
        pub fn instance_credit_specifications(
            mut self,
            input: crate::model::InstanceCreditSpecificationRequest,
        ) -> Self {
            self.inner = self.inner.instance_credit_specifications(input);
            self
        }
        /// <p>Information about the credit option for CPU usage.</p>
        pub fn set_instance_credit_specifications(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::InstanceCreditSpecificationRequest>,
            >,
        ) -> Self {
            self.inner = self.inner.set_instance_credit_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyInstanceEventStartTime`.
    ///
    /// <p>Modifies the start time for a scheduled Amazon EC2 instance event.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyInstanceEventStartTime {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_instance_event_start_time_input::Builder,
    }
    impl ModifyInstanceEventStartTime {
        /// Creates a new `ModifyInstanceEventStartTime`.
        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::ModifyInstanceEventStartTime,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceEventStartTimeError>,
        > {
            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::ModifyInstanceEventStartTimeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceEventStartTimeError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance with the scheduled event.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance with the scheduled event.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The ID of the event whose date and time you are modifying.</p>
        pub fn instance_event_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_event_id(input.into());
            self
        }
        /// <p>The ID of the event whose date and time you are modifying.</p>
        pub fn set_instance_event_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_event_id(input);
            self
        }
        /// <p>The new date and time when the event will take place.</p>
        pub fn not_before(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.not_before(input);
            self
        }
        /// <p>The new date and time when the event will take place.</p>
        pub fn set_not_before(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_not_before(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyInstanceEventWindow`.
    ///
    /// <p>Modifies the specified event window.</p>
    /// <p>You can define either a set of time ranges or a cron expression when modifying the event window, but not both.</p>
    /// <p>To modify the targets associated with the event window, use the <code>AssociateInstanceEventWindow</code> and <code>DisassociateInstanceEventWindow</code> API.</p>
    /// <p>If Amazon Web Services has already scheduled an event, modifying an event window won't change the time of the scheduled event.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html">Define event windows for scheduled events</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyInstanceEventWindow {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_instance_event_window_input::Builder,
    }
    impl ModifyInstanceEventWindow {
        /// Creates a new `ModifyInstanceEventWindow`.
        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::ModifyInstanceEventWindow,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceEventWindowError>,
        > {
            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::ModifyInstanceEventWindowOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceEventWindowError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The name of the event window.</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 event window.</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// <p>The ID of the event window.</p>
        pub fn instance_event_window_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_event_window_id(input.into());
            self
        }
        /// <p>The ID of the event window.</p>
        pub fn set_instance_event_window_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_instance_event_window_id(input);
            self
        }
        /// Appends an item to `TimeRanges`.
        ///
        /// To override the contents of this collection use [`set_time_ranges`](Self::set_time_ranges).
        ///
        /// <p>The time ranges of the event window.</p>
        pub fn time_ranges(
            mut self,
            input: crate::model::InstanceEventWindowTimeRangeRequest,
        ) -> Self {
            self.inner = self.inner.time_ranges(input);
            self
        }
        /// <p>The time ranges of the event window.</p>
        pub fn set_time_ranges(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::InstanceEventWindowTimeRangeRequest>,
            >,
        ) -> Self {
            self.inner = self.inner.set_time_ranges(input);
            self
        }
        /// <p>The cron expression of the event window, for example, <code>* 0-4,20-23 * * 1,5</code>.</p>
        /// <p>Constraints:</p>
        /// <ul>
        /// <li> <p>Only hour and day of the week values are supported.</p> </li>
        /// <li> <p>For day of the week values, you can specify either integers <code>0</code> through <code>6</code>, or alternative single values <code>SUN</code> through <code>SAT</code>.</p> </li>
        /// <li> <p>The minute, month, and year must be specified by <code>*</code>.</p> </li>
        /// <li> <p>The hour value must be one or a multiple range, for example, <code>0-4</code> or <code>0-4,20-23</code>.</p> </li>
        /// <li> <p>Each hour range must be &gt;= 2 hours, for example, <code>0-2</code> or <code>20-23</code>.</p> </li>
        /// <li> <p>The event window must be &gt;= 4 hours. The combined total time ranges in the event window must be &gt;= 4 hours.</p> </li>
        /// </ul>
        /// <p>For more information about cron expressions, see <a href="https://en.wikipedia.org/wiki/Cron">cron</a> on the <i>Wikipedia website</i>.</p>
        pub fn cron_expression(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cron_expression(input.into());
            self
        }
        /// <p>The cron expression of the event window, for example, <code>* 0-4,20-23 * * 1,5</code>.</p>
        /// <p>Constraints:</p>
        /// <ul>
        /// <li> <p>Only hour and day of the week values are supported.</p> </li>
        /// <li> <p>For day of the week values, you can specify either integers <code>0</code> through <code>6</code>, or alternative single values <code>SUN</code> through <code>SAT</code>.</p> </li>
        /// <li> <p>The minute, month, and year must be specified by <code>*</code>.</p> </li>
        /// <li> <p>The hour value must be one or a multiple range, for example, <code>0-4</code> or <code>0-4,20-23</code>.</p> </li>
        /// <li> <p>Each hour range must be &gt;= 2 hours, for example, <code>0-2</code> or <code>20-23</code>.</p> </li>
        /// <li> <p>The event window must be &gt;= 4 hours. The combined total time ranges in the event window must be &gt;= 4 hours.</p> </li>
        /// </ul>
        /// <p>For more information about cron expressions, see <a href="https://en.wikipedia.org/wiki/Cron">cron</a> on the <i>Wikipedia website</i>.</p>
        pub fn set_cron_expression(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_cron_expression(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyInstanceMaintenanceOptions`.
    ///
    /// <p>Modifies the recovery behavior of your instance to disable simplified automatic recovery or set the recovery behavior to default. The default configuration will not enable simplified automatic recovery for an unsupported instance type. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery">Simplified automatic recovery</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyInstanceMaintenanceOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_instance_maintenance_options_input::Builder,
    }
    impl ModifyInstanceMaintenanceOptions {
        /// Creates a new `ModifyInstanceMaintenanceOptions`.
        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::ModifyInstanceMaintenanceOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceMaintenanceOptionsError>,
        > {
            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::ModifyInstanceMaintenanceOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceMaintenanceOptionsError>,
        > {
            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 instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>Disables the automatic recovery behavior of your instance or sets it to default.</p>
        pub fn auto_recovery(mut self, input: crate::model::InstanceAutoRecoveryState) -> Self {
            self.inner = self.inner.auto_recovery(input);
            self
        }
        /// <p>Disables the automatic recovery behavior of your instance or sets it to default.</p>
        pub fn set_auto_recovery(
            mut self,
            input: std::option::Option<crate::model::InstanceAutoRecoveryState>,
        ) -> Self {
            self.inner = self.inner.set_auto_recovery(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyInstanceMetadataOptions`.
    ///
    /// <p>Modify the instance metadata parameters on a running or stopped instance. When you modify the parameters on a stopped instance, they are applied when the instance is started. When you modify the parameters on a running instance, the API responds with a state of “pending”. After the parameter modifications are successfully applied to the instance, the state of the modifications changes from “pending” to “applied” in subsequent describe-instances API calls. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">Instance metadata and user data</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyInstanceMetadataOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_instance_metadata_options_input::Builder,
    }
    impl ModifyInstanceMetadataOptions {
        /// Creates a new `ModifyInstanceMetadataOptions`.
        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::ModifyInstanceMetadataOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceMetadataOptionsError>,
        > {
            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::ModifyInstanceMetadataOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstanceMetadataOptionsError>,
        > {
            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 instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>IMDSv2 uses token-backed sessions. Set the use of HTTP tokens to <code>optional</code> (in other words, set the use of IMDSv2 to <code>optional</code>) or <code>required</code> (in other words, set the use of IMDSv2 to <code>required</code>).</p>
        /// <ul>
        /// <li> <p> <code>optional</code> - When IMDSv2 is optional, you can choose to retrieve instance metadata with or without a session token in your request. If you retrieve the IAM role credentials without a token, the IMDSv1 role credentials are returned. If you retrieve the IAM role credentials using a valid session token, the IMDSv2 role credentials are returned.</p> </li>
        /// <li> <p> <code>required</code> - When IMDSv2 is required, you must send a session token with any instance metadata retrieval requests. In this state, retrieving the IAM role credentials always returns IMDSv2 credentials; IMDSv1 credentials are not available.</p> </li>
        /// </ul>
        /// <p>Default: <code>optional</code> </p>
        pub fn http_tokens(mut self, input: crate::model::HttpTokensState) -> Self {
            self.inner = self.inner.http_tokens(input);
            self
        }
        /// <p>IMDSv2 uses token-backed sessions. Set the use of HTTP tokens to <code>optional</code> (in other words, set the use of IMDSv2 to <code>optional</code>) or <code>required</code> (in other words, set the use of IMDSv2 to <code>required</code>).</p>
        /// <ul>
        /// <li> <p> <code>optional</code> - When IMDSv2 is optional, you can choose to retrieve instance metadata with or without a session token in your request. If you retrieve the IAM role credentials without a token, the IMDSv1 role credentials are returned. If you retrieve the IAM role credentials using a valid session token, the IMDSv2 role credentials are returned.</p> </li>
        /// <li> <p> <code>required</code> - When IMDSv2 is required, you must send a session token with any instance metadata retrieval requests. In this state, retrieving the IAM role credentials always returns IMDSv2 credentials; IMDSv1 credentials are not available.</p> </li>
        /// </ul>
        /// <p>Default: <code>optional</code> </p>
        pub fn set_http_tokens(
            mut self,
            input: std::option::Option<crate::model::HttpTokensState>,
        ) -> Self {
            self.inner = self.inner.set_http_tokens(input);
            self
        }
        /// <p>The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel. If no parameter is specified, the existing state is maintained.</p>
        /// <p>Possible values: Integers from 1 to 64</p>
        pub fn http_put_response_hop_limit(mut self, input: i32) -> Self {
            self.inner = self.inner.http_put_response_hop_limit(input);
            self
        }
        /// <p>The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel. If no parameter is specified, the existing state is maintained.</p>
        /// <p>Possible values: Integers from 1 to 64</p>
        pub fn set_http_put_response_hop_limit(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_http_put_response_hop_limit(input);
            self
        }
        /// <p>Enables or disables the HTTP metadata endpoint on your instances. If this parameter is not specified, the existing state is maintained.</p>
        /// <p>If you specify a value of <code>disabled</code>, you cannot access your instance metadata.</p>
        pub fn http_endpoint(mut self, input: crate::model::InstanceMetadataEndpointState) -> Self {
            self.inner = self.inner.http_endpoint(input);
            self
        }
        /// <p>Enables or disables the HTTP metadata endpoint on your instances. If this parameter is not specified, the existing state is maintained.</p>
        /// <p>If you specify a value of <code>disabled</code>, you cannot access your instance metadata.</p>
        pub fn set_http_endpoint(
            mut self,
            input: std::option::Option<crate::model::InstanceMetadataEndpointState>,
        ) -> Self {
            self.inner = self.inner.set_http_endpoint(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Enables or disables the IPv6 endpoint for the instance metadata service. This setting applies only if you have enabled the HTTP metadata endpoint.</p>
        pub fn http_protocol_ipv6(
            mut self,
            input: crate::model::InstanceMetadataProtocolState,
        ) -> Self {
            self.inner = self.inner.http_protocol_ipv6(input);
            self
        }
        /// <p>Enables or disables the IPv6 endpoint for the instance metadata service. This setting applies only if you have enabled the HTTP metadata endpoint.</p>
        pub fn set_http_protocol_ipv6(
            mut self,
            input: std::option::Option<crate::model::InstanceMetadataProtocolState>,
        ) -> Self {
            self.inner = self.inner.set_http_protocol_ipv6(input);
            self
        }
        /// <p>Set to <code>enabled</code> to allow access to instance tags from the instance metadata. Set to <code>disabled</code> to turn off access to instance tags from the instance metadata. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS">Work with instance tags using the instance metadata</a>.</p>
        /// <p>Default: <code>disabled</code> </p>
        pub fn instance_metadata_tags(
            mut self,
            input: crate::model::InstanceMetadataTagsState,
        ) -> Self {
            self.inner = self.inner.instance_metadata_tags(input);
            self
        }
        /// <p>Set to <code>enabled</code> to allow access to instance tags from the instance metadata. Set to <code>disabled</code> to turn off access to instance tags from the instance metadata. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS">Work with instance tags using the instance metadata</a>.</p>
        /// <p>Default: <code>disabled</code> </p>
        pub fn set_instance_metadata_tags(
            mut self,
            input: std::option::Option<crate::model::InstanceMetadataTagsState>,
        ) -> Self {
            self.inner = self.inner.set_instance_metadata_tags(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyInstancePlacement`.
    ///
    /// <p>Modifies the placement attributes for a specified instance. You can do the following:</p>
    /// <ul>
    /// <li> <p>Modify the affinity between an instance and a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html">Dedicated Host</a>. When affinity is set to <code>host</code> and the instance is not associated with a specific Dedicated Host, the next time the instance is launched, it is automatically associated with the host on which it lands. If the instance is restarted or rebooted, this relationship persists.</p> </li>
    /// <li> <p>Change the Dedicated Host with which an instance is associated.</p> </li>
    /// <li> <p>Change the instance tenancy of an instance.</p> </li>
    /// <li> <p>Move an instance to or from a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html">placement group</a>.</p> </li>
    /// </ul>
    /// <p>At least one attribute for affinity, host ID, tenancy, or placement group name must be specified in the request. Affinity and tenancy can be modified in the same request.</p>
    /// <p>To modify the host ID, tenancy, placement group, or partition for an instance, the instance must be in the <code>stopped</code> state.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyInstancePlacement {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_instance_placement_input::Builder,
    }
    impl ModifyInstancePlacement {
        /// Creates a new `ModifyInstancePlacement`.
        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::ModifyInstancePlacement,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstancePlacementError>,
        > {
            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::ModifyInstancePlacementOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyInstancePlacementError>,
        > {
            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 affinity setting for the instance.</p>
        pub fn affinity(mut self, input: crate::model::Affinity) -> Self {
            self.inner = self.inner.affinity(input);
            self
        }
        /// <p>The affinity setting for the instance.</p>
        pub fn set_affinity(mut self, input: std::option::Option<crate::model::Affinity>) -> Self {
            self.inner = self.inner.set_affinity(input);
            self
        }
        /// <p>The name of the placement group in which to place the instance. For spread placement groups, the instance must have a tenancy of <code>default</code>. For cluster and partition placement groups, the instance must have a tenancy of <code>default</code> or <code>dedicated</code>.</p>
        /// <p>To remove an instance from a placement group, specify an empty string ("").</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>The name of the placement group in which to place the instance. For spread placement groups, the instance must have a tenancy of <code>default</code>. For cluster and partition placement groups, the instance must have a tenancy of <code>default</code> or <code>dedicated</code>.</p>
        /// <p>To remove an instance from a placement group, specify an empty string ("").</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// <p>The ID of the Dedicated Host with which to associate the instance.</p>
        pub fn host_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.host_id(input.into());
            self
        }
        /// <p>The ID of the Dedicated Host with which to associate the instance.</p>
        pub fn set_host_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_host_id(input);
            self
        }
        /// <p>The ID of the instance that you are modifying.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance that you are modifying.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The tenancy for the instance.</p> <note>
        /// <p>For T3 instances, you can't change the tenancy from <code>dedicated</code> to <code>host</code>, or from <code>host</code> to <code>dedicated</code>. Attempting to make one of these unsupported tenancy changes results in the <code>InvalidTenancy</code> error code.</p>
        /// </note>
        pub fn tenancy(mut self, input: crate::model::HostTenancy) -> Self {
            self.inner = self.inner.tenancy(input);
            self
        }
        /// <p>The tenancy for the instance.</p> <note>
        /// <p>For T3 instances, you can't change the tenancy from <code>dedicated</code> to <code>host</code>, or from <code>host</code> to <code>dedicated</code>. Attempting to make one of these unsupported tenancy changes results in the <code>InvalidTenancy</code> error code.</p>
        /// </note>
        pub fn set_tenancy(
            mut self,
            input: std::option::Option<crate::model::HostTenancy>,
        ) -> Self {
            self.inner = self.inner.set_tenancy(input);
            self
        }
        /// <p>The number of the partition in which to place the instance. Valid only if the placement group strategy is set to <code>partition</code>.</p>
        pub fn partition_number(mut self, input: i32) -> Self {
            self.inner = self.inner.partition_number(input);
            self
        }
        /// <p>The number of the partition in which to place the instance. Valid only if the placement group strategy is set to <code>partition</code>.</p>
        pub fn set_partition_number(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_partition_number(input);
            self
        }
        /// <p>The ARN of the host resource group in which to place the instance.</p>
        pub fn host_resource_group_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.host_resource_group_arn(input.into());
            self
        }
        /// <p>The ARN of the host resource group in which to place the instance.</p>
        pub fn set_host_resource_group_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_host_resource_group_arn(input);
            self
        }
        /// <p>The Group Id of a placement group. You must specify the Placement Group <b>Group Id</b> to launch an instance in a shared placement group.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The Group Id of a placement group. You must specify the Placement Group <b>Group Id</b> to launch an instance in a shared placement group.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyIpam`.
    ///
    /// <p>Modify the configurations of an IPAM. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyIpam {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_ipam_input::Builder,
    }
    impl ModifyIpam {
        /// Creates a new `ModifyIpam`.
        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::ModifyIpam,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyIpamError>,
        > {
            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::ModifyIpamOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyIpamError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM you want to modify.</p>
        pub fn ipam_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_id(input.into());
            self
        }
        /// <p>The ID of the IPAM you want to modify.</p>
        pub fn set_ipam_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_id(input);
            self
        }
        /// <p>The description of the IPAM you want to modify.</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 IPAM you want to modify.</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 `AddOperatingRegions`.
        ///
        /// To override the contents of this collection use [`set_add_operating_regions`](Self::set_add_operating_regions).
        ///
        /// <p>Choose the operating Regions for the IPAM. Operating Regions are Amazon Web Services Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only discovers and monitors resources in the Amazon Web Services Regions you select as operating Regions.</p>
        /// <p>For more information about operating Regions, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html">Create an IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn add_operating_regions(
            mut self,
            input: crate::model::AddIpamOperatingRegion,
        ) -> Self {
            self.inner = self.inner.add_operating_regions(input);
            self
        }
        /// <p>Choose the operating Regions for the IPAM. Operating Regions are Amazon Web Services Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only discovers and monitors resources in the Amazon Web Services Regions you select as operating Regions.</p>
        /// <p>For more information about operating Regions, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html">Create an IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn set_add_operating_regions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::AddIpamOperatingRegion>>,
        ) -> Self {
            self.inner = self.inner.set_add_operating_regions(input);
            self
        }
        /// Appends an item to `RemoveOperatingRegions`.
        ///
        /// To override the contents of this collection use [`set_remove_operating_regions`](Self::set_remove_operating_regions).
        ///
        /// <p>The operating Regions to remove.</p>
        pub fn remove_operating_regions(
            mut self,
            input: crate::model::RemoveIpamOperatingRegion,
        ) -> Self {
            self.inner = self.inner.remove_operating_regions(input);
            self
        }
        /// <p>The operating Regions to remove.</p>
        pub fn set_remove_operating_regions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::RemoveIpamOperatingRegion>>,
        ) -> Self {
            self.inner = self.inner.set_remove_operating_regions(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyIpamPool`.
    ///
    /// <p>Modify the configurations of an IPAM pool.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html">Modify a pool</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyIpamPool {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_ipam_pool_input::Builder,
    }
    impl ModifyIpamPool {
        /// Creates a new `ModifyIpamPool`.
        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::ModifyIpamPool,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyIpamPoolError>,
        > {
            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::ModifyIpamPoolOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyIpamPoolError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM pool you want to modify.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the IPAM pool you want to modify.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The description of the IPAM pool you want to modify.</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 IPAM pool you want to modify.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>If true, IPAM will continuously look for resources within the CIDR range of this pool and automatically import them as allocations into your IPAM. The CIDRs that will be allocated for these resources must not already be allocated to other resources in order for the import to succeed. IPAM will import a CIDR regardless of its compliance with the pool's allocation rules, so a resource might be imported and subsequently marked as noncompliant. If IPAM discovers multiple CIDRs that overlap, IPAM will import the largest CIDR only. If IPAM discovers multiple CIDRs with matching CIDRs, IPAM will randomly import one of them only. </p>
        /// <p>A locale must be set on the pool for this feature to work.</p>
        pub fn auto_import(mut self, input: bool) -> Self {
            self.inner = self.inner.auto_import(input);
            self
        }
        /// <p>If true, IPAM will continuously look for resources within the CIDR range of this pool and automatically import them as allocations into your IPAM. The CIDRs that will be allocated for these resources must not already be allocated to other resources in order for the import to succeed. IPAM will import a CIDR regardless of its compliance with the pool's allocation rules, so a resource might be imported and subsequently marked as noncompliant. If IPAM discovers multiple CIDRs that overlap, IPAM will import the largest CIDR only. If IPAM discovers multiple CIDRs with matching CIDRs, IPAM will randomly import one of them only. </p>
        /// <p>A locale must be set on the pool for this feature to work.</p>
        pub fn set_auto_import(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_auto_import(input);
            self
        }
        /// <p>The minimum netmask length required for CIDR allocations in this IPAM pool to be compliant. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128. The minimum netmask length must be less than the maximum netmask length.</p>
        pub fn allocation_min_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.allocation_min_netmask_length(input);
            self
        }
        /// <p>The minimum netmask length required for CIDR allocations in this IPAM pool to be compliant. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128. The minimum netmask length must be less than the maximum netmask length.</p>
        pub fn set_allocation_min_netmask_length(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_allocation_min_netmask_length(input);
            self
        }
        /// <p>The maximum netmask length possible for CIDR allocations in this IPAM pool to be compliant. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.The maximum netmask length must be greater than the minimum netmask length.</p>
        pub fn allocation_max_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.allocation_max_netmask_length(input);
            self
        }
        /// <p>The maximum netmask length possible for CIDR allocations in this IPAM pool to be compliant. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.The maximum netmask length must be greater than the minimum netmask length.</p>
        pub fn set_allocation_max_netmask_length(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_allocation_max_netmask_length(input);
            self
        }
        /// <p>The default netmask length for allocations added to this pool. If, for example, the CIDR assigned to this pool is 10.0.0.0/8 and you enter 16 here, new allocations will default to 10.0.0.0/16.</p>
        pub fn allocation_default_netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.allocation_default_netmask_length(input);
            self
        }
        /// <p>The default netmask length for allocations added to this pool. If, for example, the CIDR assigned to this pool is 10.0.0.0/8 and you enter 16 here, new allocations will default to 10.0.0.0/16.</p>
        pub fn set_allocation_default_netmask_length(
            mut self,
            input: std::option::Option<i32>,
        ) -> Self {
            self.inner = self.inner.set_allocation_default_netmask_length(input);
            self
        }
        /// <p>Clear the default netmask length allocation rule for this pool.</p>
        pub fn clear_allocation_default_netmask_length(mut self, input: bool) -> Self {
            self.inner = self.inner.clear_allocation_default_netmask_length(input);
            self
        }
        /// <p>Clear the default netmask length allocation rule for this pool.</p>
        pub fn set_clear_allocation_default_netmask_length(
            mut self,
            input: std::option::Option<bool>,
        ) -> Self {
            self.inner = self
                .inner
                .set_clear_allocation_default_netmask_length(input);
            self
        }
        /// Appends an item to `AddAllocationResourceTags`.
        ///
        /// To override the contents of this collection use [`set_add_allocation_resource_tags`](Self::set_add_allocation_resource_tags).
        ///
        /// <p>Add tag allocation rules to a pool. For more information about allocation rules, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html">Create a top-level pool</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn add_allocation_resource_tags(
            mut self,
            input: crate::model::RequestIpamResourceTag,
        ) -> Self {
            self.inner = self.inner.add_allocation_resource_tags(input);
            self
        }
        /// <p>Add tag allocation rules to a pool. For more information about allocation rules, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html">Create a top-level pool</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
        pub fn set_add_allocation_resource_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::RequestIpamResourceTag>>,
        ) -> Self {
            self.inner = self.inner.set_add_allocation_resource_tags(input);
            self
        }
        /// Appends an item to `RemoveAllocationResourceTags`.
        ///
        /// To override the contents of this collection use [`set_remove_allocation_resource_tags`](Self::set_remove_allocation_resource_tags).
        ///
        /// <p>Remove tag allocation rules from a pool.</p>
        pub fn remove_allocation_resource_tags(
            mut self,
            input: crate::model::RequestIpamResourceTag,
        ) -> Self {
            self.inner = self.inner.remove_allocation_resource_tags(input);
            self
        }
        /// <p>Remove tag allocation rules from a pool.</p>
        pub fn set_remove_allocation_resource_tags(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::RequestIpamResourceTag>>,
        ) -> Self {
            self.inner = self.inner.set_remove_allocation_resource_tags(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyIpamResourceCidr`.
    ///
    /// <p>Modify a resource CIDR. You can use this action to transfer resource CIDRs between scopes and ignore resource CIDRs that you do not want to manage. If set to false, the resource will not be tracked for overlap, it cannot be auto-imported into a pool, and it will be removed from any pool it has an allocation in.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/move-resource-ipam.html">Move resource CIDRs between scopes</a> and <a href="https://docs.aws.amazon.com/vpc/latest/ipam/change-monitoring-state-ipam.html">Change the monitoring state of resource CIDRs</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyIpamResourceCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_ipam_resource_cidr_input::Builder,
    }
    impl ModifyIpamResourceCidr {
        /// Creates a new `ModifyIpamResourceCidr`.
        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::ModifyIpamResourceCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyIpamResourceCidrError>,
        > {
            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::ModifyIpamResourceCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyIpamResourceCidrError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the resource you want to modify.</p>
        pub fn resource_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_id(input.into());
            self
        }
        /// <p>The ID of the resource you want to modify.</p>
        pub fn set_resource_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_resource_id(input);
            self
        }
        /// <p>The CIDR of the resource you want to modify.</p>
        pub fn resource_cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_cidr(input.into());
            self
        }
        /// <p>The CIDR of the resource you want to modify.</p>
        pub fn set_resource_cidr(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_resource_cidr(input);
            self
        }
        /// <p>The Amazon Web Services Region of the resource you want to modify.</p>
        pub fn resource_region(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_region(input.into());
            self
        }
        /// <p>The Amazon Web Services Region of the resource you want to modify.</p>
        pub fn set_resource_region(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_resource_region(input);
            self
        }
        /// <p>The ID of the current scope that the resource CIDR is in.</p>
        pub fn current_ipam_scope_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.current_ipam_scope_id(input.into());
            self
        }
        /// <p>The ID of the current scope that the resource CIDR is in.</p>
        pub fn set_current_ipam_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_current_ipam_scope_id(input);
            self
        }
        /// <p>The ID of the scope you want to transfer the resource CIDR to.</p>
        pub fn destination_ipam_scope_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_ipam_scope_id(input.into());
            self
        }
        /// <p>The ID of the scope you want to transfer the resource CIDR to.</p>
        pub fn set_destination_ipam_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_ipam_scope_id(input);
            self
        }
        /// <p>Determines if the resource is monitored by IPAM. If a resource is monitored, the resource is discovered by IPAM and you can view details about the resource’s CIDR.</p>
        pub fn monitored(mut self, input: bool) -> Self {
            self.inner = self.inner.monitored(input);
            self
        }
        /// <p>Determines if the resource is monitored by IPAM. If a resource is monitored, the resource is discovered by IPAM and you can view details about the resource’s CIDR.</p>
        pub fn set_monitored(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_monitored(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyIpamScope`.
    ///
    /// <p>Modify an IPAM scope.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyIpamScope {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_ipam_scope_input::Builder,
    }
    impl ModifyIpamScope {
        /// Creates a new `ModifyIpamScope`.
        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::ModifyIpamScope,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyIpamScopeError>,
        > {
            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::ModifyIpamScopeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyIpamScopeError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the scope you want to modify.</p>
        pub fn ipam_scope_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_scope_id(input.into());
            self
        }
        /// <p>The ID of the scope you want to modify.</p>
        pub fn set_ipam_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipam_scope_id(input);
            self
        }
        /// <p>The description of the scope you want to modify.</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 scope you want to modify.</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 `ModifyLaunchTemplate`.
    ///
    /// <p>Modifies a launch template. You can specify which version of the launch template to set as the default version. When launching an instance, the default version applies when a launch template version is not specified.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyLaunchTemplate {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_launch_template_input::Builder,
    }
    impl ModifyLaunchTemplate {
        /// Creates a new `ModifyLaunchTemplate`.
        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::ModifyLaunchTemplate,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyLaunchTemplateError>,
        > {
            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::ModifyLaunchTemplateOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyLaunchTemplateError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        /// <p>Constraint: Maximum 128 ASCII characters.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring idempotency</a>.</p>
        /// <p>Constraint: Maximum 128 ASCII characters.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        pub fn launch_template_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_id(input.into());
            self
        }
        /// <p>The ID of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateId</code> or the <code>LaunchTemplateName</code>, but not both.</p>
        pub fn set_launch_template_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_id(input);
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        pub fn launch_template_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_template_name(input.into());
            self
        }
        /// <p>The name of the launch template.</p>
        /// <p>You must specify either the <code>LaunchTemplateName</code> or the <code>LaunchTemplateId</code>, but not both.</p>
        pub fn set_launch_template_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_name(input);
            self
        }
        /// <p>The version number of the launch template to set as the default version.</p>
        pub fn default_version(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.default_version(input.into());
            self
        }
        /// <p>The version number of the launch template to set as the default version.</p>
        pub fn set_default_version(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_default_version(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyLocalGatewayRoute`.
    ///
    /// <p>Modifies the specified local gateway route.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyLocalGatewayRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_local_gateway_route_input::Builder,
    }
    impl ModifyLocalGatewayRoute {
        /// Creates a new `ModifyLocalGatewayRoute`.
        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::ModifyLocalGatewayRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyLocalGatewayRouteError>,
        > {
            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::ModifyLocalGatewayRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyLocalGatewayRouteError>,
        > {
            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 CIDR block used for destination matches. The value that you provide must match the CIDR of an existing route in the table.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The CIDR block used for destination matches. The value that you provide must match the CIDR of an existing route in the table.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn local_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn set_local_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_id(input);
            self
        }
        /// <p> The ID of the virtual interface group. </p>
        pub fn local_gateway_virtual_interface_group_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .local_gateway_virtual_interface_group_id(input.into());
            self
        }
        /// <p> The ID of the virtual interface group. </p>
        pub fn set_local_gateway_virtual_interface_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self
                .inner
                .set_local_gateway_virtual_interface_group_id(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyManagedPrefixList`.
    ///
    /// <p>Modifies the specified managed prefix list.</p>
    /// <p>Adding or removing entries in a prefix list creates a new version of the prefix list. Changing the name of the prefix list does not affect the version.</p>
    /// <p>If you specify a current version number that does not match the true current version number, the request fails.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyManagedPrefixList {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_managed_prefix_list_input::Builder,
    }
    impl ModifyManagedPrefixList {
        /// Creates a new `ModifyManagedPrefixList`.
        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::ModifyManagedPrefixList,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyManagedPrefixListError>,
        > {
            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::ModifyManagedPrefixListOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyManagedPrefixListError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn set_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_id(input);
            self
        }
        /// <p>The current version of the prefix list.</p>
        pub fn current_version(mut self, input: i64) -> Self {
            self.inner = self.inner.current_version(input);
            self
        }
        /// <p>The current version of the prefix list.</p>
        pub fn set_current_version(mut self, input: std::option::Option<i64>) -> Self {
            self.inner = self.inner.set_current_version(input);
            self
        }
        /// <p>A name for the prefix list.</p>
        pub fn prefix_list_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_name(input.into());
            self
        }
        /// <p>A name for the prefix list.</p>
        pub fn set_prefix_list_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_name(input);
            self
        }
        /// Appends an item to `AddEntries`.
        ///
        /// To override the contents of this collection use [`set_add_entries`](Self::set_add_entries).
        ///
        /// <p>One or more entries to add to the prefix list.</p>
        pub fn add_entries(mut self, input: crate::model::AddPrefixListEntry) -> Self {
            self.inner = self.inner.add_entries(input);
            self
        }
        /// <p>One or more entries to add to the prefix list.</p>
        pub fn set_add_entries(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::AddPrefixListEntry>>,
        ) -> Self {
            self.inner = self.inner.set_add_entries(input);
            self
        }
        /// Appends an item to `RemoveEntries`.
        ///
        /// To override the contents of this collection use [`set_remove_entries`](Self::set_remove_entries).
        ///
        /// <p>One or more entries to remove from the prefix list.</p>
        pub fn remove_entries(mut self, input: crate::model::RemovePrefixListEntry) -> Self {
            self.inner = self.inner.remove_entries(input);
            self
        }
        /// <p>One or more entries to remove from the prefix list.</p>
        pub fn set_remove_entries(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::RemovePrefixListEntry>>,
        ) -> Self {
            self.inner = self.inner.set_remove_entries(input);
            self
        }
        /// <p>The maximum number of entries for the prefix list. You cannot modify the entries of a prefix list and modify the size of a prefix list at the same time.</p>
        /// <p>If any of the resources that reference the prefix list cannot support the new maximum size, the modify operation fails. Check the state message for the IDs of the first ten resources that do not support the new maximum size.</p>
        pub fn max_entries(mut self, input: i32) -> Self {
            self.inner = self.inner.max_entries(input);
            self
        }
        /// <p>The maximum number of entries for the prefix list. You cannot modify the entries of a prefix list and modify the size of a prefix list at the same time.</p>
        /// <p>If any of the resources that reference the prefix list cannot support the new maximum size, the modify operation fails. Check the state message for the IDs of the first ten resources that do not support the new maximum size.</p>
        pub fn set_max_entries(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_entries(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyNetworkInterfaceAttribute`.
    ///
    /// <p>Modifies the specified network interface attribute. You can specify only one attribute at a time. You can use this action to attach and detach security groups from an existing EC2 instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyNetworkInterfaceAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_network_interface_attribute_input::Builder,
    }
    impl ModifyNetworkInterfaceAttribute {
        /// Creates a new `ModifyNetworkInterfaceAttribute`.
        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::ModifyNetworkInterfaceAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyNetworkInterfaceAttributeError>,
        > {
            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::ModifyNetworkInterfaceAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyNetworkInterfaceAttributeError>,
        > {
            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>Information about the interface attachment. If modifying the <code>delete on termination</code> attribute, you must specify the ID of the interface attachment.</p>
        pub fn attachment(
            mut self,
            input: crate::model::NetworkInterfaceAttachmentChanges,
        ) -> Self {
            self.inner = self.inner.attachment(input);
            self
        }
        /// <p>Information about the interface attachment. If modifying the <code>delete on termination</code> attribute, you must specify the ID of the interface attachment.</p>
        pub fn set_attachment(
            mut self,
            input: std::option::Option<crate::model::NetworkInterfaceAttachmentChanges>,
        ) -> Self {
            self.inner = self.inner.set_attachment(input);
            self
        }
        /// <p>A description for the network interface.</p>
        pub fn description(mut self, input: crate::model::AttributeValue) -> Self {
            self.inner = self.inner.description(input);
            self
        }
        /// <p>A description for the network interface.</p>
        pub fn set_description(
            mut self,
            input: std::option::Option<crate::model::AttributeValue>,
        ) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `Groups`.
        ///
        /// To override the contents of this collection use [`set_groups`](Self::set_groups).
        ///
        /// <p>Changes the security groups for the network interface. The new set of groups you specify replaces the current set. You must specify at least one group, even if it's just the default security group in the VPC. You must specify the ID of the security group, not the name.</p>
        pub fn groups(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.groups(input.into());
            self
        }
        /// <p>Changes the security groups for the network interface. The new set of groups you specify replaces the current set. You must specify at least one group, even if it's just the default security group in the VPC. You must specify the ID of the security group, not the name.</p>
        pub fn set_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_groups(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>Enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. If the value is <code>true</code>, source/destination checks are enabled; otherwise, they are disabled. The default value is <code>true</code>. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.</p>
        pub fn source_dest_check(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.source_dest_check(input);
            self
        }
        /// <p>Enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. If the value is <code>true</code>, source/destination checks are enabled; otherwise, they are disabled. The default value is <code>true</code>. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.</p>
        pub fn set_source_dest_check(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_source_dest_check(input);
            self
        }
        /// <p>Updates the ENA Express configuration for the network interface that’s attached to the instance.</p>
        pub fn ena_srd_specification(mut self, input: crate::model::EnaSrdSpecification) -> Self {
            self.inner = self.inner.ena_srd_specification(input);
            self
        }
        /// <p>Updates the ENA Express configuration for the network interface that’s attached to the instance.</p>
        pub fn set_ena_srd_specification(
            mut self,
            input: std::option::Option<crate::model::EnaSrdSpecification>,
        ) -> Self {
            self.inner = self.inner.set_ena_srd_specification(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyPrivateDnsNameOptions`.
    ///
    /// <p>Modifies the options for instance hostnames for the specified instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyPrivateDnsNameOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_private_dns_name_options_input::Builder,
    }
    impl ModifyPrivateDnsNameOptions {
        /// Creates a new `ModifyPrivateDnsNameOptions`.
        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::ModifyPrivateDnsNameOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyPrivateDnsNameOptionsError>,
        > {
            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::ModifyPrivateDnsNameOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyPrivateDnsNameOptionsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>The type of hostname for EC2 instances. For IPv4 only subnets, an instance DNS name must be based on the instance IPv4 address. For IPv6 only subnets, an instance DNS name must be based on the instance ID. For dual-stack subnets, you can specify whether DNS names use the instance IPv4 address or the instance ID.</p>
        pub fn private_dns_hostname_type(mut self, input: crate::model::HostnameType) -> Self {
            self.inner = self.inner.private_dns_hostname_type(input);
            self
        }
        /// <p>The type of hostname for EC2 instances. For IPv4 only subnets, an instance DNS name must be based on the instance IPv4 address. For IPv6 only subnets, an instance DNS name must be based on the instance ID. For dual-stack subnets, you can specify whether DNS names use the instance IPv4 address or the instance ID.</p>
        pub fn set_private_dns_hostname_type(
            mut self,
            input: std::option::Option<crate::model::HostnameType>,
        ) -> Self {
            self.inner = self.inner.set_private_dns_hostname_type(input);
            self
        }
        /// <p>Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p>
        pub fn enable_resource_name_dns_a_record(mut self, input: bool) -> Self {
            self.inner = self.inner.enable_resource_name_dns_a_record(input);
            self
        }
        /// <p>Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p>
        pub fn set_enable_resource_name_dns_a_record(
            mut self,
            input: std::option::Option<bool>,
        ) -> Self {
            self.inner = self.inner.set_enable_resource_name_dns_a_record(input);
            self
        }
        /// <p>Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p>
        pub fn enable_resource_name_dns_aaaa_record(mut self, input: bool) -> Self {
            self.inner = self.inner.enable_resource_name_dns_aaaa_record(input);
            self
        }
        /// <p>Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p>
        pub fn set_enable_resource_name_dns_aaaa_record(
            mut self,
            input: std::option::Option<bool>,
        ) -> Self {
            self.inner = self.inner.set_enable_resource_name_dns_aaaa_record(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyReservedInstances`.
    ///
    /// <p>Modifies the configuration of your Reserved Instances, such as the Availability Zone, instance count, or instance type. The Reserved Instances to be modified must be identical, except for Availability Zone, network platform, and instance type.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html">Modifying Reserved Instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyReservedInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_reserved_instances_input::Builder,
    }
    impl ModifyReservedInstances {
        /// Creates a new `ModifyReservedInstances`.
        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::ModifyReservedInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyReservedInstancesError>,
        > {
            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::ModifyReservedInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyReservedInstancesError>,
        > {
            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 `ReservedInstancesIds`.
        ///
        /// To override the contents of this collection use [`set_reserved_instances_ids`](Self::set_reserved_instances_ids).
        ///
        /// <p>The IDs of the Reserved Instances to modify.</p>
        pub fn reserved_instances_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.reserved_instances_ids(input.into());
            self
        }
        /// <p>The IDs of the Reserved Instances to modify.</p>
        pub fn set_reserved_instances_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_ids(input);
            self
        }
        /// <p>A unique, case-sensitive token you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// Appends an item to `TargetConfigurations`.
        ///
        /// To override the contents of this collection use [`set_target_configurations`](Self::set_target_configurations).
        ///
        /// <p>The configuration settings for the Reserved Instances to modify.</p>
        pub fn target_configurations(
            mut self,
            input: crate::model::ReservedInstancesConfiguration,
        ) -> Self {
            self.inner = self.inner.target_configurations(input);
            self
        }
        /// <p>The configuration settings for the Reserved Instances to modify.</p>
        pub fn set_target_configurations(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ReservedInstancesConfiguration>>,
        ) -> Self {
            self.inner = self.inner.set_target_configurations(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifySecurityGroupRules`.
    ///
    /// <p>Modifies the rules of a security group.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifySecurityGroupRules {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_security_group_rules_input::Builder,
    }
    impl ModifySecurityGroupRules {
        /// Creates a new `ModifySecurityGroupRules`.
        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::ModifySecurityGroupRules,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifySecurityGroupRulesError>,
        > {
            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::ModifySecurityGroupRulesOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifySecurityGroupRulesError>,
        > {
            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 security group.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The ID of the security group.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
        /// Appends an item to `SecurityGroupRules`.
        ///
        /// To override the contents of this collection use [`set_security_group_rules`](Self::set_security_group_rules).
        ///
        /// <p>Information about the security group properties to update.</p>
        pub fn security_group_rules(
            mut self,
            input: crate::model::SecurityGroupRuleUpdate,
        ) -> Self {
            self.inner = self.inner.security_group_rules(input);
            self
        }
        /// <p>Information about the security group properties to update.</p>
        pub fn set_security_group_rules(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::SecurityGroupRuleUpdate>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_rules(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifySnapshotAttribute`.
    ///
    /// <p>Adds or removes permission settings for the specified snapshot. You may add or remove specified Amazon Web Services account IDs from a snapshot's list of create volume permissions, but you cannot do both in a single operation. If you need to both add and remove account IDs for a snapshot, you must use multiple operations. You can make up to 500 modifications to a snapshot in a single operation.</p>
    /// <p>Encrypted snapshots and snapshots with Amazon Web Services Marketplace product codes cannot be made public. Snapshots encrypted with your default KMS key cannot be shared with other accounts.</p>
    /// <p>For more information about modifying snapshot permissions, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html">Share a snapshot</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifySnapshotAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_snapshot_attribute_input::Builder,
    }
    impl ModifySnapshotAttribute {
        /// Creates a new `ModifySnapshotAttribute`.
        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::ModifySnapshotAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifySnapshotAttributeError>,
        > {
            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::ModifySnapshotAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifySnapshotAttributeError>,
        > {
            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 snapshot attribute to modify. Only volume creation permissions can be modified.</p>
        pub fn attribute(mut self, input: crate::model::SnapshotAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The snapshot attribute to modify. Only volume creation permissions can be modified.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::SnapshotAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>A JSON representation of the snapshot attribute modification.</p>
        pub fn create_volume_permission(
            mut self,
            input: crate::model::CreateVolumePermissionModifications,
        ) -> Self {
            self.inner = self.inner.create_volume_permission(input);
            self
        }
        /// <p>A JSON representation of the snapshot attribute modification.</p>
        pub fn set_create_volume_permission(
            mut self,
            input: std::option::Option<crate::model::CreateVolumePermissionModifications>,
        ) -> Self {
            self.inner = self.inner.set_create_volume_permission(input);
            self
        }
        /// Appends an item to `GroupNames`.
        ///
        /// To override the contents of this collection use [`set_group_names`](Self::set_group_names).
        ///
        /// <p>The group to modify for the snapshot.</p>
        pub fn group_names(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_names(input.into());
            self
        }
        /// <p>The group to modify for the snapshot.</p>
        pub fn set_group_names(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_group_names(input);
            self
        }
        /// <p>The type of operation to perform to the attribute.</p>
        pub fn operation_type(mut self, input: crate::model::OperationType) -> Self {
            self.inner = self.inner.operation_type(input);
            self
        }
        /// <p>The type of operation to perform to the attribute.</p>
        pub fn set_operation_type(
            mut self,
            input: std::option::Option<crate::model::OperationType>,
        ) -> Self {
            self.inner = self.inner.set_operation_type(input);
            self
        }
        /// <p>The ID of the snapshot.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The ID of the snapshot.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// Appends an item to `UserIds`.
        ///
        /// To override the contents of this collection use [`set_user_ids`](Self::set_user_ids).
        ///
        /// <p>The account ID to modify for the snapshot.</p>
        pub fn user_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.user_ids(input.into());
            self
        }
        /// <p>The account ID to modify for the snapshot.</p>
        pub fn set_user_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_user_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifySnapshotTier`.
    ///
    /// <p>Archives an Amazon EBS snapshot. When you archive a snapshot, it is converted to a full snapshot that includes all of the blocks of data that were written to the volume at the time the snapshot was created, and moved from the standard tier to the archive tier. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshot-archive.html">Archive Amazon EBS snapshots</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifySnapshotTier {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_snapshot_tier_input::Builder,
    }
    impl ModifySnapshotTier {
        /// Creates a new `ModifySnapshotTier`.
        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::ModifySnapshotTier,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifySnapshotTierError>,
        > {
            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::ModifySnapshotTierOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifySnapshotTierError>,
        > {
            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 snapshot.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The ID of the snapshot.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// <p>The name of the storage tier. You must specify <code>archive</code>.</p>
        pub fn storage_tier(mut self, input: crate::model::TargetStorageTier) -> Self {
            self.inner = self.inner.storage_tier(input);
            self
        }
        /// <p>The name of the storage tier. You must specify <code>archive</code>.</p>
        pub fn set_storage_tier(
            mut self,
            input: std::option::Option<crate::model::TargetStorageTier>,
        ) -> Self {
            self.inner = self.inner.set_storage_tier(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifySpotFleetRequest`.
    ///
    /// <p>Modifies the specified Spot Fleet request.</p>
    /// <p>You can only modify a Spot Fleet request of type <code>maintain</code>.</p>
    /// <p>While the Spot Fleet request is being modified, it is in the <code>modifying</code> state.</p>
    /// <p>To scale up your Spot Fleet, increase its target capacity. The Spot Fleet launches the additional Spot Instances according to the allocation strategy for the Spot Fleet request. If the allocation strategy is <code>lowestPrice</code>, the Spot Fleet launches instances using the Spot Instance pool with the lowest price. If the allocation strategy is <code>diversified</code>, the Spot Fleet distributes the instances across the Spot Instance pools. If the allocation strategy is <code>capacityOptimized</code>, Spot Fleet launches instances from Spot Instance pools with optimal capacity for the number of instances that are launching.</p>
    /// <p>To scale down your Spot Fleet, decrease its target capacity. First, the Spot Fleet cancels any open requests that exceed the new target capacity. You can request that the Spot Fleet terminate Spot Instances until the size of the fleet no longer exceeds the new target capacity. If the allocation strategy is <code>lowestPrice</code>, the Spot Fleet terminates the instances with the highest price per unit. If the allocation strategy is <code>capacityOptimized</code>, the Spot Fleet terminates the instances in the Spot Instance pools that have the least available Spot Instance capacity. If the allocation strategy is <code>diversified</code>, the Spot Fleet terminates instances across the Spot Instance pools. Alternatively, you can request that the Spot Fleet keep the fleet at its current size, but not replace any Spot Instances that are interrupted or that you terminate manually.</p>
    /// <p>If you are finished with your Spot Fleet for now, but will use it again later, you can set the target capacity to 0.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifySpotFleetRequest {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_spot_fleet_request_input::Builder,
    }
    impl ModifySpotFleetRequest {
        /// Creates a new `ModifySpotFleetRequest`.
        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::ModifySpotFleetRequest,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifySpotFleetRequestError>,
        > {
            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::ModifySpotFleetRequestOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifySpotFleetRequestError>,
        > {
            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>Indicates whether running Spot Instances should be terminated if the target capacity of the Spot Fleet request is decreased below the current size of the Spot Fleet.</p>
        pub fn excess_capacity_termination_policy(
            mut self,
            input: crate::model::ExcessCapacityTerminationPolicy,
        ) -> Self {
            self.inner = self.inner.excess_capacity_termination_policy(input);
            self
        }
        /// <p>Indicates whether running Spot Instances should be terminated if the target capacity of the Spot Fleet request is decreased below the current size of the Spot Fleet.</p>
        pub fn set_excess_capacity_termination_policy(
            mut self,
            input: std::option::Option<crate::model::ExcessCapacityTerminationPolicy>,
        ) -> Self {
            self.inner = self.inner.set_excess_capacity_termination_policy(input);
            self
        }
        /// Appends an item to `LaunchTemplateConfigs`.
        ///
        /// To override the contents of this collection use [`set_launch_template_configs`](Self::set_launch_template_configs).
        ///
        /// <p>The launch template and overrides. You can only use this parameter if you specified a launch template (<code>LaunchTemplateConfigs</code>) in your Spot Fleet request. If you specified <code>LaunchSpecifications</code> in your Spot Fleet request, then omit this parameter.</p>
        pub fn launch_template_configs(
            mut self,
            input: crate::model::LaunchTemplateConfig,
        ) -> Self {
            self.inner = self.inner.launch_template_configs(input);
            self
        }
        /// <p>The launch template and overrides. You can only use this parameter if you specified a launch template (<code>LaunchTemplateConfigs</code>) in your Spot Fleet request. If you specified <code>LaunchSpecifications</code> in your Spot Fleet request, then omit this parameter.</p>
        pub fn set_launch_template_configs(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::LaunchTemplateConfig>>,
        ) -> Self {
            self.inner = self.inner.set_launch_template_configs(input);
            self
        }
        /// <p>The ID of the Spot Fleet request.</p>
        pub fn spot_fleet_request_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.spot_fleet_request_id(input.into());
            self
        }
        /// <p>The ID of the Spot Fleet request.</p>
        pub fn set_spot_fleet_request_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_spot_fleet_request_id(input);
            self
        }
        /// <p>The size of the fleet.</p>
        pub fn target_capacity(mut self, input: i32) -> Self {
            self.inner = self.inner.target_capacity(input);
            self
        }
        /// <p>The size of the fleet.</p>
        pub fn set_target_capacity(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_target_capacity(input);
            self
        }
        /// <p>The number of On-Demand Instances in the fleet.</p>
        pub fn on_demand_target_capacity(mut self, input: i32) -> Self {
            self.inner = self.inner.on_demand_target_capacity(input);
            self
        }
        /// <p>The number of On-Demand Instances in the fleet.</p>
        pub fn set_on_demand_target_capacity(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_on_demand_target_capacity(input);
            self
        }
        /// <p>Reserved.</p>
        pub fn context(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.context(input.into());
            self
        }
        /// <p>Reserved.</p>
        pub fn set_context(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_context(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifySubnetAttribute`.
    ///
    /// <p>Modifies a subnet attribute. You can only modify one attribute at a time.</p>
    /// <p>Use this action to modify subnets on Amazon Web Services Outposts.</p>
    /// <ul>
    /// <li> <p>To modify a subnet on an Outpost rack, set both <code>MapCustomerOwnedIpOnLaunch</code> and <code>CustomerOwnedIpv4Pool</code>. These two parameters act as a single attribute.</p> </li>
    /// <li> <p>To modify a subnet on an Outpost server, set either <code>EnableLniAtDeviceIndex</code> or <code>DisableLniAtDeviceIndex</code>.</p> </li>
    /// </ul>
    /// <p>For more information about Amazon Web Services Outposts, see the following:</p>
    /// <ul>
    /// <li> <p> <a href="https://docs.aws.amazon.com/outposts/latest/userguide/how-servers-work.html">Outpost servers</a> </p> </li>
    /// <li> <p> <a href="https://docs.aws.amazon.com/outposts/latest/userguide/how-racks-work.html">Outpost racks</a> </p> </li>
    /// </ul>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifySubnetAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_subnet_attribute_input::Builder,
    }
    impl ModifySubnetAttribute {
        /// Creates a new `ModifySubnetAttribute`.
        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::ModifySubnetAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifySubnetAttributeError>,
        > {
            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::ModifySubnetAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifySubnetAttributeError>,
        > {
            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>Specify <code>true</code> to indicate that network interfaces created in the specified subnet should be assigned an IPv6 address. This includes a network interface that's created when launching an instance into the subnet (the instance therefore receives an IPv6 address). </p>
        /// <p>If you enable the IPv6 addressing feature for your subnet, your network interface or instance only receives an IPv6 address if it's created using version <code>2016-11-15</code> or later of the Amazon EC2 API.</p>
        pub fn assign_ipv6_address_on_creation(
            mut self,
            input: crate::model::AttributeBooleanValue,
        ) -> Self {
            self.inner = self.inner.assign_ipv6_address_on_creation(input);
            self
        }
        /// <p>Specify <code>true</code> to indicate that network interfaces created in the specified subnet should be assigned an IPv6 address. This includes a network interface that's created when launching an instance into the subnet (the instance therefore receives an IPv6 address). </p>
        /// <p>If you enable the IPv6 addressing feature for your subnet, your network interface or instance only receives an IPv6 address if it's created using version <code>2016-11-15</code> or later of the Amazon EC2 API.</p>
        pub fn set_assign_ipv6_address_on_creation(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_assign_ipv6_address_on_creation(input);
            self
        }
        /// <p>Specify <code>true</code> to indicate that network interfaces attached to instances created in the specified subnet should be assigned a public IPv4 address.</p>
        pub fn map_public_ip_on_launch(
            mut self,
            input: crate::model::AttributeBooleanValue,
        ) -> Self {
            self.inner = self.inner.map_public_ip_on_launch(input);
            self
        }
        /// <p>Specify <code>true</code> to indicate that network interfaces attached to instances created in the specified subnet should be assigned a public IPv4 address.</p>
        pub fn set_map_public_ip_on_launch(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_map_public_ip_on_launch(input);
            self
        }
        /// <p>The ID of the subnet.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>The ID of the subnet.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// <p>Specify <code>true</code> to indicate that network interfaces attached to instances created in the specified subnet should be assigned a customer-owned IPv4 address.</p>
        /// <p>When this value is <code>true</code>, you must specify the customer-owned IP pool using <code>CustomerOwnedIpv4Pool</code>.</p>
        pub fn map_customer_owned_ip_on_launch(
            mut self,
            input: crate::model::AttributeBooleanValue,
        ) -> Self {
            self.inner = self.inner.map_customer_owned_ip_on_launch(input);
            self
        }
        /// <p>Specify <code>true</code> to indicate that network interfaces attached to instances created in the specified subnet should be assigned a customer-owned IPv4 address.</p>
        /// <p>When this value is <code>true</code>, you must specify the customer-owned IP pool using <code>CustomerOwnedIpv4Pool</code>.</p>
        pub fn set_map_customer_owned_ip_on_launch(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_map_customer_owned_ip_on_launch(input);
            self
        }
        /// <p>The customer-owned IPv4 address pool associated with the subnet.</p>
        /// <p>You must set this value when you specify <code>true</code> for <code>MapCustomerOwnedIpOnLaunch</code>.</p>
        pub fn customer_owned_ipv4_pool(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.customer_owned_ipv4_pool(input.into());
            self
        }
        /// <p>The customer-owned IPv4 address pool associated with the subnet.</p>
        /// <p>You must set this value when you specify <code>true</code> for <code>MapCustomerOwnedIpOnLaunch</code>.</p>
        pub fn set_customer_owned_ipv4_pool(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_customer_owned_ipv4_pool(input);
            self
        }
        /// <p>Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this subnet should return synthetic IPv6 addresses for IPv4-only destinations.</p>
        pub fn enable_dns64(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.enable_dns64(input);
            self
        }
        /// <p>Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this subnet should return synthetic IPv6 addresses for IPv4-only destinations.</p>
        pub fn set_enable_dns64(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_enable_dns64(input);
            self
        }
        /// <p>The type of hostname to assign to instances in the subnet at launch. For IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name can be based on the instance IPv4 address (ip-name) or the instance ID (resource-name). For IPv6 only subnets, an instance DNS name must be based on the instance ID (resource-name).</p>
        pub fn private_dns_hostname_type_on_launch(
            mut self,
            input: crate::model::HostnameType,
        ) -> Self {
            self.inner = self.inner.private_dns_hostname_type_on_launch(input);
            self
        }
        /// <p>The type of hostname to assign to instances in the subnet at launch. For IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name can be based on the instance IPv4 address (ip-name) or the instance ID (resource-name). For IPv6 only subnets, an instance DNS name must be based on the instance ID (resource-name).</p>
        pub fn set_private_dns_hostname_type_on_launch(
            mut self,
            input: std::option::Option<crate::model::HostnameType>,
        ) -> Self {
            self.inner = self.inner.set_private_dns_hostname_type_on_launch(input);
            self
        }
        /// <p>Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p>
        pub fn enable_resource_name_dns_a_record_on_launch(
            mut self,
            input: crate::model::AttributeBooleanValue,
        ) -> Self {
            self.inner = self
                .inner
                .enable_resource_name_dns_a_record_on_launch(input);
            self
        }
        /// <p>Indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p>
        pub fn set_enable_resource_name_dns_a_record_on_launch(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self
                .inner
                .set_enable_resource_name_dns_a_record_on_launch(input);
            self
        }
        /// <p>Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p>
        pub fn enable_resource_name_dns_aaaa_record_on_launch(
            mut self,
            input: crate::model::AttributeBooleanValue,
        ) -> Self {
            self.inner = self
                .inner
                .enable_resource_name_dns_aaaa_record_on_launch(input);
            self
        }
        /// <p>Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p>
        pub fn set_enable_resource_name_dns_aaaa_record_on_launch(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self
                .inner
                .set_enable_resource_name_dns_aaaa_record_on_launch(input);
            self
        }
        /// <p> Indicates the device position for local network interfaces in this subnet. For example, <code>1</code> indicates local network interfaces in this subnet are the secondary network interface (eth1). A local network interface cannot be the primary network interface (eth0). </p>
        pub fn enable_lni_at_device_index(mut self, input: i32) -> Self {
            self.inner = self.inner.enable_lni_at_device_index(input);
            self
        }
        /// <p> Indicates the device position for local network interfaces in this subnet. For example, <code>1</code> indicates local network interfaces in this subnet are the secondary network interface (eth1). A local network interface cannot be the primary network interface (eth0). </p>
        pub fn set_enable_lni_at_device_index(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_enable_lni_at_device_index(input);
            self
        }
        /// <p> Specify <code>true</code> to indicate that local network interfaces at the current position should be disabled. </p>
        pub fn disable_lni_at_device_index(
            mut self,
            input: crate::model::AttributeBooleanValue,
        ) -> Self {
            self.inner = self.inner.disable_lni_at_device_index(input);
            self
        }
        /// <p> Specify <code>true</code> to indicate that local network interfaces at the current position should be disabled. </p>
        pub fn set_disable_lni_at_device_index(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_disable_lni_at_device_index(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyTrafficMirrorFilterNetworkServices`.
    ///
    /// <p>Allows or restricts mirroring network services.</p>
    /// <p> By default, Amazon DNS network services are not eligible for Traffic Mirror. Use <code>AddNetworkServices</code> to add network services to a Traffic Mirror filter. When a network service is added to the Traffic Mirror filter, all traffic related to that network service will be mirrored. When you no longer want to mirror network services, use <code>RemoveNetworkServices</code> to remove the network services from the Traffic Mirror filter. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyTrafficMirrorFilterNetworkServices {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_traffic_mirror_filter_network_services_input::Builder,
    }
    impl ModifyTrafficMirrorFilterNetworkServices {
        /// Creates a new `ModifyTrafficMirrorFilterNetworkServices`.
        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::ModifyTrafficMirrorFilterNetworkServices,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyTrafficMirrorFilterNetworkServicesError,
            >,
        > {
            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::ModifyTrafficMirrorFilterNetworkServicesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyTrafficMirrorFilterNetworkServicesError,
            >,
        > {
            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 Traffic Mirror filter.</p>
        pub fn traffic_mirror_filter_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_filter_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror filter.</p>
        pub fn set_traffic_mirror_filter_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_filter_id(input);
            self
        }
        /// Appends an item to `AddNetworkServices`.
        ///
        /// To override the contents of this collection use [`set_add_network_services`](Self::set_add_network_services).
        ///
        /// <p>The network service, for example Amazon DNS, that you want to mirror.</p>
        pub fn add_network_services(
            mut self,
            input: crate::model::TrafficMirrorNetworkService,
        ) -> Self {
            self.inner = self.inner.add_network_services(input);
            self
        }
        /// <p>The network service, for example Amazon DNS, that you want to mirror.</p>
        pub fn set_add_network_services(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TrafficMirrorNetworkService>>,
        ) -> Self {
            self.inner = self.inner.set_add_network_services(input);
            self
        }
        /// Appends an item to `RemoveNetworkServices`.
        ///
        /// To override the contents of this collection use [`set_remove_network_services`](Self::set_remove_network_services).
        ///
        /// <p>The network service, for example Amazon DNS, that you no longer want to mirror.</p>
        pub fn remove_network_services(
            mut self,
            input: crate::model::TrafficMirrorNetworkService,
        ) -> Self {
            self.inner = self.inner.remove_network_services(input);
            self
        }
        /// <p>The network service, for example Amazon DNS, that you no longer want to mirror.</p>
        pub fn set_remove_network_services(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TrafficMirrorNetworkService>>,
        ) -> Self {
            self.inner = self.inner.set_remove_network_services(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyTrafficMirrorFilterRule`.
    ///
    /// <p>Modifies the specified Traffic Mirror rule.</p>
    /// <p> <code>DestinationCidrBlock</code> and <code>SourceCidrBlock</code> must both be an IPv4 range or an IPv6 range.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyTrafficMirrorFilterRule {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_traffic_mirror_filter_rule_input::Builder,
    }
    impl ModifyTrafficMirrorFilterRule {
        /// Creates a new `ModifyTrafficMirrorFilterRule`.
        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::ModifyTrafficMirrorFilterRule,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyTrafficMirrorFilterRuleError>,
        > {
            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::ModifyTrafficMirrorFilterRuleOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyTrafficMirrorFilterRuleError>,
        > {
            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 Traffic Mirror rule.</p>
        pub fn traffic_mirror_filter_rule_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.traffic_mirror_filter_rule_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror rule.</p>
        pub fn set_traffic_mirror_filter_rule_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_filter_rule_id(input);
            self
        }
        /// <p>The type of traffic to assign to the rule.</p>
        pub fn traffic_direction(mut self, input: crate::model::TrafficDirection) -> Self {
            self.inner = self.inner.traffic_direction(input);
            self
        }
        /// <p>The type of traffic to assign to the rule.</p>
        pub fn set_traffic_direction(
            mut self,
            input: std::option::Option<crate::model::TrafficDirection>,
        ) -> Self {
            self.inner = self.inner.set_traffic_direction(input);
            self
        }
        /// <p>The number of the Traffic Mirror rule. This number must be unique for each Traffic Mirror rule in a given direction. The rules are processed in ascending order by rule number.</p>
        pub fn rule_number(mut self, input: i32) -> Self {
            self.inner = self.inner.rule_number(input);
            self
        }
        /// <p>The number of the Traffic Mirror rule. This number must be unique for each Traffic Mirror rule in a given direction. The rules are processed in ascending order by rule number.</p>
        pub fn set_rule_number(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_rule_number(input);
            self
        }
        /// <p>The action to assign to the rule.</p>
        pub fn rule_action(mut self, input: crate::model::TrafficMirrorRuleAction) -> Self {
            self.inner = self.inner.rule_action(input);
            self
        }
        /// <p>The action to assign to the rule.</p>
        pub fn set_rule_action(
            mut self,
            input: std::option::Option<crate::model::TrafficMirrorRuleAction>,
        ) -> Self {
            self.inner = self.inner.set_rule_action(input);
            self
        }
        /// <p>The destination ports that are associated with the Traffic Mirror rule.</p>
        pub fn destination_port_range(
            mut self,
            input: crate::model::TrafficMirrorPortRangeRequest,
        ) -> Self {
            self.inner = self.inner.destination_port_range(input);
            self
        }
        /// <p>The destination ports that are associated with the Traffic Mirror rule.</p>
        pub fn set_destination_port_range(
            mut self,
            input: std::option::Option<crate::model::TrafficMirrorPortRangeRequest>,
        ) -> Self {
            self.inner = self.inner.set_destination_port_range(input);
            self
        }
        /// <p>The port range to assign to the Traffic Mirror rule.</p>
        pub fn source_port_range(
            mut self,
            input: crate::model::TrafficMirrorPortRangeRequest,
        ) -> Self {
            self.inner = self.inner.source_port_range(input);
            self
        }
        /// <p>The port range to assign to the Traffic Mirror rule.</p>
        pub fn set_source_port_range(
            mut self,
            input: std::option::Option<crate::model::TrafficMirrorPortRangeRequest>,
        ) -> Self {
            self.inner = self.inner.set_source_port_range(input);
            self
        }
        /// <p>The protocol, for example TCP, to assign to the Traffic Mirror rule.</p>
        pub fn protocol(mut self, input: i32) -> Self {
            self.inner = self.inner.protocol(input);
            self
        }
        /// <p>The protocol, for example TCP, to assign to the Traffic Mirror rule.</p>
        pub fn set_protocol(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_protocol(input);
            self
        }
        /// <p>The destination CIDR block to assign to the Traffic Mirror rule.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The destination CIDR block to assign to the Traffic Mirror rule.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The source CIDR block to assign to the Traffic Mirror rule.</p>
        pub fn source_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_cidr_block(input.into());
            self
        }
        /// <p>The source CIDR block to assign to the Traffic Mirror rule.</p>
        pub fn set_source_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_cidr_block(input);
            self
        }
        /// <p>The description to assign to the Traffic Mirror rule.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description to assign to the Traffic Mirror rule.</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 `RemoveFields`.
        ///
        /// To override the contents of this collection use [`set_remove_fields`](Self::set_remove_fields).
        ///
        /// <p>The properties that you want to remove from the Traffic Mirror filter rule.</p>
        /// <p>When you remove a property from a Traffic Mirror filter rule, the property is set to the default.</p>
        pub fn remove_fields(mut self, input: crate::model::TrafficMirrorFilterRuleField) -> Self {
            self.inner = self.inner.remove_fields(input);
            self
        }
        /// <p>The properties that you want to remove from the Traffic Mirror filter rule.</p>
        /// <p>When you remove a property from a Traffic Mirror filter rule, the property is set to the default.</p>
        pub fn set_remove_fields(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TrafficMirrorFilterRuleField>>,
        ) -> Self {
            self.inner = self.inner.set_remove_fields(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyTrafficMirrorSession`.
    ///
    /// <p>Modifies a Traffic Mirror session.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyTrafficMirrorSession {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_traffic_mirror_session_input::Builder,
    }
    impl ModifyTrafficMirrorSession {
        /// Creates a new `ModifyTrafficMirrorSession`.
        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::ModifyTrafficMirrorSession,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyTrafficMirrorSessionError>,
        > {
            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::ModifyTrafficMirrorSessionOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyTrafficMirrorSessionError>,
        > {
            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 Traffic Mirror session.</p>
        pub fn traffic_mirror_session_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_session_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror session.</p>
        pub fn set_traffic_mirror_session_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_session_id(input);
            self
        }
        /// <p>The Traffic Mirror target. The target must be in the same VPC as the source, or have a VPC peering connection with the source.</p>
        pub fn traffic_mirror_target_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_target_id(input.into());
            self
        }
        /// <p>The Traffic Mirror target. The target must be in the same VPC as the source, or have a VPC peering connection with the source.</p>
        pub fn set_traffic_mirror_target_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_target_id(input);
            self
        }
        /// <p>The ID of the Traffic Mirror filter.</p>
        pub fn traffic_mirror_filter_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.traffic_mirror_filter_id(input.into());
            self
        }
        /// <p>The ID of the Traffic Mirror filter.</p>
        pub fn set_traffic_mirror_filter_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_traffic_mirror_filter_id(input);
            self
        }
        /// <p>The number of bytes in each packet to mirror. These are bytes after the VXLAN header. To mirror a subset, set this to the length (in bytes) to mirror. For example, if you set this value to 100, then the first 100 bytes that meet the filter criteria are copied to the target. Do not specify this parameter when you want to mirror the entire packet.</p>
        pub fn packet_length(mut self, input: i32) -> Self {
            self.inner = self.inner.packet_length(input);
            self
        }
        /// <p>The number of bytes in each packet to mirror. These are bytes after the VXLAN header. To mirror a subset, set this to the length (in bytes) to mirror. For example, if you set this value to 100, then the first 100 bytes that meet the filter criteria are copied to the target. Do not specify this parameter when you want to mirror the entire packet.</p>
        pub fn set_packet_length(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_packet_length(input);
            self
        }
        /// <p>The session number determines the order in which sessions are evaluated when an interface is used by multiple sessions. The first session with a matching filter is the one that mirrors the packets.</p>
        /// <p>Valid values are 1-32766.</p>
        pub fn session_number(mut self, input: i32) -> Self {
            self.inner = self.inner.session_number(input);
            self
        }
        /// <p>The session number determines the order in which sessions are evaluated when an interface is used by multiple sessions. The first session with a matching filter is the one that mirrors the packets.</p>
        /// <p>Valid values are 1-32766.</p>
        pub fn set_session_number(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_session_number(input);
            self
        }
        /// <p>The virtual network ID of the Traffic Mirror session.</p>
        pub fn virtual_network_id(mut self, input: i32) -> Self {
            self.inner = self.inner.virtual_network_id(input);
            self
        }
        /// <p>The virtual network ID of the Traffic Mirror session.</p>
        pub fn set_virtual_network_id(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_virtual_network_id(input);
            self
        }
        /// <p>The description to assign to the Traffic Mirror session.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description to assign to the Traffic Mirror session.</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 `RemoveFields`.
        ///
        /// To override the contents of this collection use [`set_remove_fields`](Self::set_remove_fields).
        ///
        /// <p>The properties that you want to remove from the Traffic Mirror session.</p>
        /// <p>When you remove a property from a Traffic Mirror session, the property is set to the default.</p>
        pub fn remove_fields(mut self, input: crate::model::TrafficMirrorSessionField) -> Self {
            self.inner = self.inner.remove_fields(input);
            self
        }
        /// <p>The properties that you want to remove from the Traffic Mirror session.</p>
        /// <p>When you remove a property from a Traffic Mirror session, the property is set to the default.</p>
        pub fn set_remove_fields(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TrafficMirrorSessionField>>,
        ) -> Self {
            self.inner = self.inner.set_remove_fields(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyTransitGateway`.
    ///
    /// <p>Modifies the specified transit gateway. When you modify a transit gateway, the modified options are applied to new transit gateway attachments only. Your existing transit gateway attachments are not modified.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyTransitGateway {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_transit_gateway_input::Builder,
    }
    impl ModifyTransitGateway {
        /// Creates a new `ModifyTransitGateway`.
        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::ModifyTransitGateway,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyTransitGatewayError>,
        > {
            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::ModifyTransitGatewayOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyTransitGatewayError>,
        > {
            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 transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>The description for the transit gateway.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>The description for the transit gateway.</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 options to modify.</p>
        pub fn options(mut self, input: crate::model::ModifyTransitGatewayOptions) -> Self {
            self.inner = self.inner.options(input);
            self
        }
        /// <p>The options to modify.</p>
        pub fn set_options(
            mut self,
            input: std::option::Option<crate::model::ModifyTransitGatewayOptions>,
        ) -> Self {
            self.inner = self.inner.set_options(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyTransitGatewayPrefixListReference`.
    ///
    /// <p>Modifies a reference (route) to a prefix list in a specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyTransitGatewayPrefixListReference {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_transit_gateway_prefix_list_reference_input::Builder,
    }
    impl ModifyTransitGatewayPrefixListReference {
        /// Creates a new `ModifyTransitGatewayPrefixListReference`.
        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::ModifyTransitGatewayPrefixListReference,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyTransitGatewayPrefixListReferenceError,
            >,
        > {
            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::ModifyTransitGatewayPrefixListReferenceOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyTransitGatewayPrefixListReferenceError,
            >,
        > {
            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 transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn set_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_id(input);
            self
        }
        /// <p>The ID of the attachment to which traffic is routed.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment to which traffic is routed.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Indicates whether to drop traffic that matches this route.</p>
        pub fn blackhole(mut self, input: bool) -> Self {
            self.inner = self.inner.blackhole(input);
            self
        }
        /// <p>Indicates whether to drop traffic that matches this route.</p>
        pub fn set_blackhole(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_blackhole(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyTransitGatewayVpcAttachment`.
    ///
    /// <p>Modifies the specified VPC attachment.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyTransitGatewayVpcAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_transit_gateway_vpc_attachment_input::Builder,
    }
    impl ModifyTransitGatewayVpcAttachment {
        /// Creates a new `ModifyTransitGatewayVpcAttachment`.
        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::ModifyTransitGatewayVpcAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyTransitGatewayVpcAttachmentError>,
        > {
            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::ModifyTransitGatewayVpcAttachmentOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyTransitGatewayVpcAttachmentError>,
        > {
            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 attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// Appends an item to `AddSubnetIds`.
        ///
        /// To override the contents of this collection use [`set_add_subnet_ids`](Self::set_add_subnet_ids).
        ///
        /// <p>The IDs of one or more subnets to add. You can specify at most one subnet per Availability Zone.</p>
        pub fn add_subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.add_subnet_ids(input.into());
            self
        }
        /// <p>The IDs of one or more subnets to add. You can specify at most one subnet per Availability Zone.</p>
        pub fn set_add_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_add_subnet_ids(input);
            self
        }
        /// Appends an item to `RemoveSubnetIds`.
        ///
        /// To override the contents of this collection use [`set_remove_subnet_ids`](Self::set_remove_subnet_ids).
        ///
        /// <p>The IDs of one or more subnets to remove.</p>
        pub fn remove_subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.remove_subnet_ids(input.into());
            self
        }
        /// <p>The IDs of one or more subnets to remove.</p>
        pub fn set_remove_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_remove_subnet_ids(input);
            self
        }
        /// <p>The new VPC attachment options.</p>
        pub fn options(
            mut self,
            input: crate::model::ModifyTransitGatewayVpcAttachmentRequestOptions,
        ) -> Self {
            self.inner = self.inner.options(input);
            self
        }
        /// <p>The new VPC attachment options.</p>
        pub fn set_options(
            mut self,
            input: std::option::Option<
                crate::model::ModifyTransitGatewayVpcAttachmentRequestOptions,
            >,
        ) -> Self {
            self.inner = self.inner.set_options(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVerifiedAccessEndpoint`.
    ///
    /// <p>Modifies the configuration of an Amazon Web Services Verified Access endpoint.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVerifiedAccessEndpoint {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_verified_access_endpoint_input::Builder,
    }
    impl ModifyVerifiedAccessEndpoint {
        /// Creates a new `ModifyVerifiedAccessEndpoint`.
        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::ModifyVerifiedAccessEndpoint,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessEndpointError>,
        > {
            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::ModifyVerifiedAccessEndpointOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessEndpointError>,
        > {
            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 Amazon Web Services Verified Access endpoint.</p>
        pub fn verified_access_endpoint_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
        pub fn set_verified_access_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_endpoint_id(input);
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access group.</p>
        pub fn verified_access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.verified_access_group_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access group.</p>
        pub fn set_verified_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_group_id(input);
            self
        }
        /// <p>The load balancer details if creating the Amazon Web Services Verified Access endpoint as <code>load-balancer</code>type.</p>
        pub fn load_balancer_options(
            mut self,
            input: crate::model::ModifyVerifiedAccessEndpointLoadBalancerOptions,
        ) -> Self {
            self.inner = self.inner.load_balancer_options(input);
            self
        }
        /// <p>The load balancer details if creating the Amazon Web Services Verified Access endpoint as <code>load-balancer</code>type.</p>
        pub fn set_load_balancer_options(
            mut self,
            input: std::option::Option<
                crate::model::ModifyVerifiedAccessEndpointLoadBalancerOptions,
            >,
        ) -> Self {
            self.inner = self.inner.set_load_balancer_options(input);
            self
        }
        /// <p>The network interface options.</p>
        pub fn network_interface_options(
            mut self,
            input: crate::model::ModifyVerifiedAccessEndpointEniOptions,
        ) -> Self {
            self.inner = self.inner.network_interface_options(input);
            self
        }
        /// <p>The network interface options.</p>
        pub fn set_network_interface_options(
            mut self,
            input: std::option::Option<crate::model::ModifyVerifiedAccessEndpointEniOptions>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_options(input);
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access endpoint.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access endpoint.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVerifiedAccessEndpointPolicy`.
    ///
    /// <p>Modifies the specified Verified Access endpoint policy.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVerifiedAccessEndpointPolicy {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_verified_access_endpoint_policy_input::Builder,
    }
    impl ModifyVerifiedAccessEndpointPolicy {
        /// Creates a new `ModifyVerifiedAccessEndpointPolicy`.
        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::ModifyVerifiedAccessEndpointPolicy,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVerifiedAccessEndpointPolicyError,
            >,
        > {
            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::ModifyVerifiedAccessEndpointPolicyOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVerifiedAccessEndpointPolicyError,
            >,
        > {
            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 Amazon Web Services Verified Access endpoint.</p>
        pub fn verified_access_endpoint_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access endpoint.</p>
        pub fn set_verified_access_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_endpoint_id(input);
            self
        }
        /// <p>The status of the Verified Access policy.</p>
        pub fn policy_enabled(mut self, input: bool) -> Self {
            self.inner = self.inner.policy_enabled(input);
            self
        }
        /// <p>The status of the Verified Access policy.</p>
        pub fn set_policy_enabled(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_policy_enabled(input);
            self
        }
        /// <p>The Amazon Web Services Verified Access policy document.</p>
        pub fn policy_document(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.policy_document(input.into());
            self
        }
        /// <p>The Amazon Web Services Verified Access policy document.</p>
        pub fn set_policy_document(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_policy_document(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVerifiedAccessGroup`.
    ///
    /// <p>Modifies the specified Verified Access group configuration.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVerifiedAccessGroup {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_verified_access_group_input::Builder,
    }
    impl ModifyVerifiedAccessGroup {
        /// Creates a new `ModifyVerifiedAccessGroup`.
        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::ModifyVerifiedAccessGroup,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessGroupError>,
        > {
            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::ModifyVerifiedAccessGroupOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessGroupError>,
        > {
            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 Amazon Web Services Verified Access group.</p>
        pub fn verified_access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.verified_access_group_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access group.</p>
        pub fn set_verified_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_group_id(input);
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access group.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access group.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVerifiedAccessGroupPolicy`.
    ///
    /// <p>Modifies the specified Verified Access group policy.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVerifiedAccessGroupPolicy {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_verified_access_group_policy_input::Builder,
    }
    impl ModifyVerifiedAccessGroupPolicy {
        /// Creates a new `ModifyVerifiedAccessGroupPolicy`.
        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::ModifyVerifiedAccessGroupPolicy,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessGroupPolicyError>,
        > {
            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::ModifyVerifiedAccessGroupPolicyOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessGroupPolicyError>,
        > {
            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 Amazon Web Services Verified Access group.</p>
        pub fn verified_access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.verified_access_group_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access group.</p>
        pub fn set_verified_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_group_id(input);
            self
        }
        /// <p>The status of the Verified Access policy.</p>
        pub fn policy_enabled(mut self, input: bool) -> Self {
            self.inner = self.inner.policy_enabled(input);
            self
        }
        /// <p>The status of the Verified Access policy.</p>
        pub fn set_policy_enabled(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_policy_enabled(input);
            self
        }
        /// <p>The Amazon Web Services Verified Access policy document.</p>
        pub fn policy_document(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.policy_document(input.into());
            self
        }
        /// <p>The Amazon Web Services Verified Access policy document.</p>
        pub fn set_policy_document(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_policy_document(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVerifiedAccessInstance`.
    ///
    /// <p>Modifies the configuration of the specified Verified Access instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVerifiedAccessInstance {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_verified_access_instance_input::Builder,
    }
    impl ModifyVerifiedAccessInstance {
        /// Creates a new `ModifyVerifiedAccessInstance`.
        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::ModifyVerifiedAccessInstance,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessInstanceError>,
        > {
            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::ModifyVerifiedAccessInstanceOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessInstanceError>,
        > {
            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 Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access instance.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access instance.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVerifiedAccessInstanceLoggingConfiguration`.
    ///
    /// <p>Modifies the logging configuration for the specified Amazon Web Services Verified Access instance.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVerifiedAccessInstanceLoggingConfiguration {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_verified_access_instance_logging_configuration_input::Builder,
    }
    impl ModifyVerifiedAccessInstanceLoggingConfiguration {
        /// Creates a new `ModifyVerifiedAccessInstanceLoggingConfiguration`.
        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::ModifyVerifiedAccessInstanceLoggingConfiguration,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVerifiedAccessInstanceLoggingConfigurationError,
            >,
        > {
            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::ModifyVerifiedAccessInstanceLoggingConfigurationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVerifiedAccessInstanceLoggingConfigurationError,
            >,
        > {
            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 Amazon Web Services Verified Access instance.</p>
        pub fn verified_access_instance_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_instance_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access instance.</p>
        pub fn set_verified_access_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_instance_id(input);
            self
        }
        /// <p>The configuration options for Amazon Web Services Verified Access instances.</p>
        pub fn access_logs(mut self, input: crate::model::VerifiedAccessLogOptions) -> Self {
            self.inner = self.inner.access_logs(input);
            self
        }
        /// <p>The configuration options for Amazon Web Services Verified Access instances.</p>
        pub fn set_access_logs(
            mut self,
            input: std::option::Option<crate::model::VerifiedAccessLogOptions>,
        ) -> Self {
            self.inner = self.inner.set_access_logs(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVerifiedAccessTrustProvider`.
    ///
    /// <p>Modifies the configuration of the specified Amazon Web Services Verified Access trust provider.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVerifiedAccessTrustProvider {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_verified_access_trust_provider_input::Builder,
    }
    impl ModifyVerifiedAccessTrustProvider {
        /// Creates a new `ModifyVerifiedAccessTrustProvider`.
        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::ModifyVerifiedAccessTrustProvider,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessTrustProviderError>,
        > {
            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::ModifyVerifiedAccessTrustProviderOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVerifiedAccessTrustProviderError>,
        > {
            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 Amazon Web Services Verified Access trust provider.</p>
        pub fn verified_access_trust_provider_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.verified_access_trust_provider_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Verified Access trust provider.</p>
        pub fn set_verified_access_trust_provider_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_verified_access_trust_provider_id(input);
            self
        }
        /// <p>The OpenID Connect details for an <code>oidc</code>-type, user-identity based trust provider.</p>
        pub fn oidc_options(
            mut self,
            input: crate::model::ModifyVerifiedAccessTrustProviderOidcOptions,
        ) -> Self {
            self.inner = self.inner.oidc_options(input);
            self
        }
        /// <p>The OpenID Connect details for an <code>oidc</code>-type, user-identity based trust provider.</p>
        pub fn set_oidc_options(
            mut self,
            input: std::option::Option<crate::model::ModifyVerifiedAccessTrustProviderOidcOptions>,
        ) -> Self {
            self.inner = self.inner.set_oidc_options(input);
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access trust provider.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the Amazon Web Services Verified Access trust provider.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVolume`.
    ///
    /// <p>You can modify several parameters of an existing EBS volume, including volume size, volume type, and IOPS capacity. If your EBS volume is attached to a current-generation EC2 instance type, you might be able to apply these changes without stopping the instance or detaching the volume from it. For more information about modifying EBS volumes, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modify-volume.html">Amazon EBS Elastic Volumes</a> (Linux instances) or <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-modify-volume.html">Amazon EBS Elastic Volumes</a> (Windows instances).</p>
    /// <p>When you complete a resize operation on your volume, you need to extend the volume's file-system size to take advantage of the new storage capacity. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#recognize-expanded-volume-linux">Extend a Linux file system</a> or <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html#recognize-expanded-volume-windows">Extend a Windows file system</a>.</p>
    /// <p> You can use CloudWatch Events to check the status of a modification to an EBS volume. For information about CloudWatch Events, see the <a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/">Amazon CloudWatch Events User Guide</a>. You can also track the status of a modification using <code>DescribeVolumesModifications</code>. For information about tracking status changes using either method, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-modifications.html">Monitor the progress of volume modifications</a>.</p>
    /// <p>With previous-generation instance types, resizing an EBS volume might require detaching and reattaching the volume or stopping and restarting the instance.</p>
    /// <p>After modifying a volume, you must wait at least six hours and ensure that the volume is in the <code>in-use</code> or <code>available</code> state before you can modify the same volume. This is sometimes referred to as a cooldown period.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVolume {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_volume_input::Builder,
    }
    impl ModifyVolume {
        /// Creates a new `ModifyVolume`.
        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::ModifyVolume,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVolumeError>,
        > {
            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::ModifyVolumeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVolumeError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn volume_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_id(input.into());
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn set_volume_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_volume_id(input);
            self
        }
        /// <p>The target size of the volume, in GiB. The target volume size must be greater than or equal to the existing size of the volume.</p>
        /// <p>The following are the supported volumes sizes for each volume type:</p>
        /// <ul>
        /// <li> <p> <code>gp2</code> and <code>gp3</code>: 1-16,384</p> </li>
        /// <li> <p> <code>io1</code> and <code>io2</code>: 4-16,384</p> </li>
        /// <li> <p> <code>st1</code> and <code>sc1</code>: 125-16,384</p> </li>
        /// <li> <p> <code>standard</code>: 1-1,024</p> </li>
        /// </ul>
        /// <p>Default: The existing size is retained.</p>
        pub fn size(mut self, input: i32) -> Self {
            self.inner = self.inner.size(input);
            self
        }
        /// <p>The target size of the volume, in GiB. The target volume size must be greater than or equal to the existing size of the volume.</p>
        /// <p>The following are the supported volumes sizes for each volume type:</p>
        /// <ul>
        /// <li> <p> <code>gp2</code> and <code>gp3</code>: 1-16,384</p> </li>
        /// <li> <p> <code>io1</code> and <code>io2</code>: 4-16,384</p> </li>
        /// <li> <p> <code>st1</code> and <code>sc1</code>: 125-16,384</p> </li>
        /// <li> <p> <code>standard</code>: 1-1,024</p> </li>
        /// </ul>
        /// <p>Default: The existing size is retained.</p>
        pub fn set_size(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_size(input);
            self
        }
        /// <p>The target EBS volume type of the volume. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html">Amazon EBS volume types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Default: The existing type is retained.</p>
        pub fn volume_type(mut self, input: crate::model::VolumeType) -> Self {
            self.inner = self.inner.volume_type(input);
            self
        }
        /// <p>The target EBS volume type of the volume. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html">Amazon EBS volume types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        /// <p>Default: The existing type is retained.</p>
        pub fn set_volume_type(
            mut self,
            input: std::option::Option<crate::model::VolumeType>,
        ) -> Self {
            self.inner = self.inner.set_volume_type(input);
            self
        }
        /// <p>The target IOPS rate of the volume. This parameter is valid only for <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes.</p>
        /// <p>The following are the supported values for each volume type:</p>
        /// <ul>
        /// <li> <p> <code>gp3</code>: 3,000-16,000 IOPS</p> </li>
        /// <li> <p> <code>io1</code>: 100-64,000 IOPS</p> </li>
        /// <li> <p> <code>io2</code>: 100-64,000 IOPS</p> </li>
        /// </ul>
        /// <p>Default: The existing value is retained if you keep the same volume type. If you change the volume type to <code>io1</code>, <code>io2</code>, or <code>gp3</code>, the default is 3,000.</p>
        pub fn iops(mut self, input: i32) -> Self {
            self.inner = self.inner.iops(input);
            self
        }
        /// <p>The target IOPS rate of the volume. This parameter is valid only for <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes.</p>
        /// <p>The following are the supported values for each volume type:</p>
        /// <ul>
        /// <li> <p> <code>gp3</code>: 3,000-16,000 IOPS</p> </li>
        /// <li> <p> <code>io1</code>: 100-64,000 IOPS</p> </li>
        /// <li> <p> <code>io2</code>: 100-64,000 IOPS</p> </li>
        /// </ul>
        /// <p>Default: The existing value is retained if you keep the same volume type. If you change the volume type to <code>io1</code>, <code>io2</code>, or <code>gp3</code>, the default is 3,000.</p>
        pub fn set_iops(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_iops(input);
            self
        }
        /// <p>The target throughput of the volume, in MiB/s. This parameter is valid only for <code>gp3</code> volumes. The maximum value is 1,000.</p>
        /// <p>Default: The existing value is retained if the source and target volume type is <code>gp3</code>. Otherwise, the default value is 125.</p>
        /// <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>
        pub fn throughput(mut self, input: i32) -> Self {
            self.inner = self.inner.throughput(input);
            self
        }
        /// <p>The target throughput of the volume, in MiB/s. This parameter is valid only for <code>gp3</code> volumes. The maximum value is 1,000.</p>
        /// <p>Default: The existing value is retained if the source and target volume type is <code>gp3</code>. Otherwise, the default value is 125.</p>
        /// <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>
        pub fn set_throughput(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_throughput(input);
            self
        }
        /// <p>Specifies whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances"> Nitro-based instances</a> in the same Availability Zone. This parameter is supported with <code>io1</code> and <code>io2</code> volumes only. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html"> Amazon EBS Multi-Attach</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn multi_attach_enabled(mut self, input: bool) -> Self {
            self.inner = self.inner.multi_attach_enabled(input);
            self
        }
        /// <p>Specifies whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances"> Nitro-based instances</a> in the same Availability Zone. This parameter is supported with <code>io1</code> and <code>io2</code> volumes only. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html"> Amazon EBS Multi-Attach</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
        pub fn set_multi_attach_enabled(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_multi_attach_enabled(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVolumeAttribute`.
    ///
    /// <p>Modifies a volume attribute.</p>
    /// <p>By default, all I/O operations for the volume are suspended when the data on the volume is determined to be potentially inconsistent, to prevent undetectable, latent data corruption. The I/O access to the volume can be resumed by first enabling I/O access and then checking the data consistency on your volume.</p>
    /// <p>You can change the default behavior to resume I/O operations. We recommend that you change this only for boot volumes or for volumes that are stateless or disposable.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVolumeAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_volume_attribute_input::Builder,
    }
    impl ModifyVolumeAttribute {
        /// Creates a new `ModifyVolumeAttribute`.
        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::ModifyVolumeAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVolumeAttributeError>,
        > {
            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::ModifyVolumeAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVolumeAttributeError>,
        > {
            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>Indicates whether the volume should be auto-enabled for I/O operations.</p>
        pub fn auto_enable_io(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.auto_enable_io(input);
            self
        }
        /// <p>Indicates whether the volume should be auto-enabled for I/O operations.</p>
        pub fn set_auto_enable_io(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_auto_enable_io(input);
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn volume_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.volume_id(input.into());
            self
        }
        /// <p>The ID of the volume.</p>
        pub fn set_volume_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_volume_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpcAttribute`.
    ///
    /// <p>Modifies the specified attribute of the specified VPC.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpcAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpc_attribute_input::Builder,
    }
    impl ModifyVpcAttribute {
        /// Creates a new `ModifyVpcAttribute`.
        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::ModifyVpcAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpcAttributeError>,
        > {
            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::ModifyVpcAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpcAttributeError>,
        > {
            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>Indicates whether the instances launched in the VPC get DNS hostnames. If enabled, instances in the VPC get DNS hostnames; otherwise, they do not.</p>
        /// <p>You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute. You can only enable DNS hostnames if you've enabled DNS support.</p>
        pub fn enable_dns_hostnames(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.enable_dns_hostnames(input);
            self
        }
        /// <p>Indicates whether the instances launched in the VPC get DNS hostnames. If enabled, instances in the VPC get DNS hostnames; otherwise, they do not.</p>
        /// <p>You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute. You can only enable DNS hostnames if you've enabled DNS support.</p>
        pub fn set_enable_dns_hostnames(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_enable_dns_hostnames(input);
            self
        }
        /// <p>Indicates whether the DNS resolution is supported for the VPC. If enabled, queries to the Amazon provided DNS server at the 169.254.169.253 IP address, or the reserved IP address at the base of the VPC network range "plus two" succeed. If disabled, the Amazon provided DNS service in the VPC that resolves public DNS hostnames to IP addresses is not enabled.</p>
        /// <p>You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute.</p>
        pub fn enable_dns_support(mut self, input: crate::model::AttributeBooleanValue) -> Self {
            self.inner = self.inner.enable_dns_support(input);
            self
        }
        /// <p>Indicates whether the DNS resolution is supported for the VPC. If enabled, queries to the Amazon provided DNS server at the 169.254.169.253 IP address, or the reserved IP address at the base of the VPC network range "plus two" succeed. If disabled, the Amazon provided DNS service in the VPC that resolves public DNS hostnames to IP addresses is not enabled.</p>
        /// <p>You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute.</p>
        pub fn set_enable_dns_support(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_enable_dns_support(input);
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>Indicates whether Network Address Usage metrics are enabled for your VPC.</p>
        pub fn enable_network_address_usage_metrics(
            mut self,
            input: crate::model::AttributeBooleanValue,
        ) -> Self {
            self.inner = self.inner.enable_network_address_usage_metrics(input);
            self
        }
        /// <p>Indicates whether Network Address Usage metrics are enabled for your VPC.</p>
        pub fn set_enable_network_address_usage_metrics(
            mut self,
            input: std::option::Option<crate::model::AttributeBooleanValue>,
        ) -> Self {
            self.inner = self.inner.set_enable_network_address_usage_metrics(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpcEndpoint`.
    ///
    /// <p>Modifies attributes of a specified VPC endpoint. The attributes that you can modify depend on the type of VPC endpoint (interface, gateway, or Gateway Load Balancer). For more information, see the <a href="https://docs.aws.amazon.com/vpc/latest/privatelink/">Amazon Web Services PrivateLink Guide</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpcEndpoint {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpc_endpoint_input::Builder,
    }
    impl ModifyVpcEndpoint {
        /// Creates a new `ModifyVpcEndpoint`.
        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::ModifyVpcEndpoint,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpcEndpointError>,
        > {
            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::ModifyVpcEndpointOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpcEndpointError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the endpoint.</p>
        pub fn vpc_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the endpoint.</p>
        pub fn set_vpc_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_id(input);
            self
        }
        /// <p>(Gateway endpoint) Specify <code>true</code> to reset the policy document to the default policy. The default policy allows full access to the service.</p>
        pub fn reset_policy(mut self, input: bool) -> Self {
            self.inner = self.inner.reset_policy(input);
            self
        }
        /// <p>(Gateway endpoint) Specify <code>true</code> to reset the policy document to the default policy. The default policy allows full access to the service.</p>
        pub fn set_reset_policy(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_reset_policy(input);
            self
        }
        /// <p>(Interface and gateway endpoints) A policy to attach to the endpoint that controls access to the service. The policy must be in valid JSON format.</p>
        pub fn policy_document(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.policy_document(input.into());
            self
        }
        /// <p>(Interface and gateway endpoints) A policy to attach to the endpoint that controls access to the service. The policy must be in valid JSON format.</p>
        pub fn set_policy_document(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_policy_document(input);
            self
        }
        /// Appends an item to `AddRouteTableIds`.
        ///
        /// To override the contents of this collection use [`set_add_route_table_ids`](Self::set_add_route_table_ids).
        ///
        /// <p>(Gateway endpoint) The IDs of the route tables to associate with the endpoint.</p>
        pub fn add_route_table_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.add_route_table_ids(input.into());
            self
        }
        /// <p>(Gateway endpoint) The IDs of the route tables to associate with the endpoint.</p>
        pub fn set_add_route_table_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_add_route_table_ids(input);
            self
        }
        /// Appends an item to `RemoveRouteTableIds`.
        ///
        /// To override the contents of this collection use [`set_remove_route_table_ids`](Self::set_remove_route_table_ids).
        ///
        /// <p>(Gateway endpoint) The IDs of the route tables to disassociate from the endpoint.</p>
        pub fn remove_route_table_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.remove_route_table_ids(input.into());
            self
        }
        /// <p>(Gateway endpoint) The IDs of the route tables to disassociate from the endpoint.</p>
        pub fn set_remove_route_table_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_remove_route_table_ids(input);
            self
        }
        /// Appends an item to `AddSubnetIds`.
        ///
        /// To override the contents of this collection use [`set_add_subnet_ids`](Self::set_add_subnet_ids).
        ///
        /// <p>(Interface and Gateway Load Balancer endpoints) The IDs of the subnets in which to serve the endpoint. For a Gateway Load Balancer endpoint, you can specify only one subnet.</p>
        pub fn add_subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.add_subnet_ids(input.into());
            self
        }
        /// <p>(Interface and Gateway Load Balancer endpoints) The IDs of the subnets in which to serve the endpoint. For a Gateway Load Balancer endpoint, you can specify only one subnet.</p>
        pub fn set_add_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_add_subnet_ids(input);
            self
        }
        /// Appends an item to `RemoveSubnetIds`.
        ///
        /// To override the contents of this collection use [`set_remove_subnet_ids`](Self::set_remove_subnet_ids).
        ///
        /// <p>(Interface endpoint) The IDs of the subnets from which to remove the endpoint.</p>
        pub fn remove_subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.remove_subnet_ids(input.into());
            self
        }
        /// <p>(Interface endpoint) The IDs of the subnets from which to remove the endpoint.</p>
        pub fn set_remove_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_remove_subnet_ids(input);
            self
        }
        /// Appends an item to `AddSecurityGroupIds`.
        ///
        /// To override the contents of this collection use [`set_add_security_group_ids`](Self::set_add_security_group_ids).
        ///
        /// <p>(Interface endpoint) The IDs of the security groups to associate with the network interface.</p>
        pub fn add_security_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.add_security_group_ids(input.into());
            self
        }
        /// <p>(Interface endpoint) The IDs of the security groups to associate with the network interface.</p>
        pub fn set_add_security_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_add_security_group_ids(input);
            self
        }
        /// Appends an item to `RemoveSecurityGroupIds`.
        ///
        /// To override the contents of this collection use [`set_remove_security_group_ids`](Self::set_remove_security_group_ids).
        ///
        /// <p>(Interface endpoint) The IDs of the security groups to disassociate from the network interface.</p>
        pub fn remove_security_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.remove_security_group_ids(input.into());
            self
        }
        /// <p>(Interface endpoint) The IDs of the security groups to disassociate from the network interface.</p>
        pub fn set_remove_security_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_remove_security_group_ids(input);
            self
        }
        /// <p>The IP address type for the endpoint.</p>
        pub fn ip_address_type(mut self, input: crate::model::IpAddressType) -> Self {
            self.inner = self.inner.ip_address_type(input);
            self
        }
        /// <p>The IP address type for the endpoint.</p>
        pub fn set_ip_address_type(
            mut self,
            input: std::option::Option<crate::model::IpAddressType>,
        ) -> Self {
            self.inner = self.inner.set_ip_address_type(input);
            self
        }
        /// <p>The DNS options for the endpoint.</p>
        pub fn dns_options(mut self, input: crate::model::DnsOptionsSpecification) -> Self {
            self.inner = self.inner.dns_options(input);
            self
        }
        /// <p>The DNS options for the endpoint.</p>
        pub fn set_dns_options(
            mut self,
            input: std::option::Option<crate::model::DnsOptionsSpecification>,
        ) -> Self {
            self.inner = self.inner.set_dns_options(input);
            self
        }
        /// <p>(Interface endpoint) Indicates whether a private hosted zone is associated with the VPC.</p>
        pub fn private_dns_enabled(mut self, input: bool) -> Self {
            self.inner = self.inner.private_dns_enabled(input);
            self
        }
        /// <p>(Interface endpoint) Indicates whether a private hosted zone is associated with the VPC.</p>
        pub fn set_private_dns_enabled(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_private_dns_enabled(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpcEndpointConnectionNotification`.
    ///
    /// <p>Modifies a connection notification for VPC endpoint or VPC endpoint service. You can change the SNS topic for the notification, or the events for which to be notified. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpcEndpointConnectionNotification {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpc_endpoint_connection_notification_input::Builder,
    }
    impl ModifyVpcEndpointConnectionNotification {
        /// Creates a new `ModifyVpcEndpointConnectionNotification`.
        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::ModifyVpcEndpointConnectionNotification,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVpcEndpointConnectionNotificationError,
            >,
        > {
            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::ModifyVpcEndpointConnectionNotificationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVpcEndpointConnectionNotificationError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the notification.</p>
        pub fn connection_notification_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.connection_notification_id(input.into());
            self
        }
        /// <p>The ID of the notification.</p>
        pub fn set_connection_notification_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_connection_notification_id(input);
            self
        }
        /// <p>The ARN for the SNS topic for the notification.</p>
        pub fn connection_notification_arn(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.connection_notification_arn(input.into());
            self
        }
        /// <p>The ARN for the SNS topic for the notification.</p>
        pub fn set_connection_notification_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_connection_notification_arn(input);
            self
        }
        /// Appends an item to `ConnectionEvents`.
        ///
        /// To override the contents of this collection use [`set_connection_events`](Self::set_connection_events).
        ///
        /// <p>The events for the endpoint. Valid values are <code>Accept</code>, <code>Connect</code>, <code>Delete</code>, and <code>Reject</code>.</p>
        pub fn connection_events(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.connection_events(input.into());
            self
        }
        /// <p>The events for the endpoint. Valid values are <code>Accept</code>, <code>Connect</code>, <code>Delete</code>, and <code>Reject</code>.</p>
        pub fn set_connection_events(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_connection_events(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpcEndpointServiceConfiguration`.
    ///
    /// <p>Modifies the attributes of your VPC endpoint service configuration. You can change the Network Load Balancers or Gateway Load Balancers for your service, and you can specify whether acceptance is required for requests to connect to your endpoint service through an interface VPC endpoint.</p>
    /// <p>If you set or modify the private DNS name, you must prove that you own the private DNS domain name.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpcEndpointServiceConfiguration {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpc_endpoint_service_configuration_input::Builder,
    }
    impl ModifyVpcEndpointServiceConfiguration {
        /// Creates a new `ModifyVpcEndpointServiceConfiguration`.
        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::ModifyVpcEndpointServiceConfiguration,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVpcEndpointServiceConfigurationError,
            >,
        > {
            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::ModifyVpcEndpointServiceConfigurationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVpcEndpointServiceConfigurationError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the service.</p>
        pub fn service_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_id(input.into());
            self
        }
        /// <p>The ID of the service.</p>
        pub fn set_service_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_id(input);
            self
        }
        /// <p>(Interface endpoint configuration) The private DNS name to assign to the endpoint service.</p>
        pub fn private_dns_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.private_dns_name(input.into());
            self
        }
        /// <p>(Interface endpoint configuration) The private DNS name to assign to the endpoint service.</p>
        pub fn set_private_dns_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_private_dns_name(input);
            self
        }
        /// <p>(Interface endpoint configuration) Removes the private DNS name of the endpoint service.</p>
        pub fn remove_private_dns_name(mut self, input: bool) -> Self {
            self.inner = self.inner.remove_private_dns_name(input);
            self
        }
        /// <p>(Interface endpoint configuration) Removes the private DNS name of the endpoint service.</p>
        pub fn set_remove_private_dns_name(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_remove_private_dns_name(input);
            self
        }
        /// <p>Indicates whether requests to create an endpoint to your service must be accepted.</p>
        pub fn acceptance_required(mut self, input: bool) -> Self {
            self.inner = self.inner.acceptance_required(input);
            self
        }
        /// <p>Indicates whether requests to create an endpoint to your service must be accepted.</p>
        pub fn set_acceptance_required(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_acceptance_required(input);
            self
        }
        /// Appends an item to `AddNetworkLoadBalancerArns`.
        ///
        /// To override the contents of this collection use [`set_add_network_load_balancer_arns`](Self::set_add_network_load_balancer_arns).
        ///
        /// <p>The Amazon Resource Names (ARNs) of Network Load Balancers to add to your service configuration.</p>
        pub fn add_network_load_balancer_arns(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.add_network_load_balancer_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARNs) of Network Load Balancers to add to your service configuration.</p>
        pub fn set_add_network_load_balancer_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_add_network_load_balancer_arns(input);
            self
        }
        /// Appends an item to `RemoveNetworkLoadBalancerArns`.
        ///
        /// To override the contents of this collection use [`set_remove_network_load_balancer_arns`](Self::set_remove_network_load_balancer_arns).
        ///
        /// <p>The Amazon Resource Names (ARNs) of Network Load Balancers to remove from your service configuration.</p>
        pub fn remove_network_load_balancer_arns(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.remove_network_load_balancer_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARNs) of Network Load Balancers to remove from your service configuration.</p>
        pub fn set_remove_network_load_balancer_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_remove_network_load_balancer_arns(input);
            self
        }
        /// Appends an item to `AddGatewayLoadBalancerArns`.
        ///
        /// To override the contents of this collection use [`set_add_gateway_load_balancer_arns`](Self::set_add_gateway_load_balancer_arns).
        ///
        /// <p>The Amazon Resource Names (ARNs) of Gateway Load Balancers to add to your service configuration.</p>
        pub fn add_gateway_load_balancer_arns(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.add_gateway_load_balancer_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARNs) of Gateway Load Balancers to add to your service configuration.</p>
        pub fn set_add_gateway_load_balancer_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_add_gateway_load_balancer_arns(input);
            self
        }
        /// Appends an item to `RemoveGatewayLoadBalancerArns`.
        ///
        /// To override the contents of this collection use [`set_remove_gateway_load_balancer_arns`](Self::set_remove_gateway_load_balancer_arns).
        ///
        /// <p>The Amazon Resource Names (ARNs) of Gateway Load Balancers to remove from your service configuration.</p>
        pub fn remove_gateway_load_balancer_arns(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.remove_gateway_load_balancer_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARNs) of Gateway Load Balancers to remove from your service configuration.</p>
        pub fn set_remove_gateway_load_balancer_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_remove_gateway_load_balancer_arns(input);
            self
        }
        /// Appends an item to `AddSupportedIpAddressTypes`.
        ///
        /// To override the contents of this collection use [`set_add_supported_ip_address_types`](Self::set_add_supported_ip_address_types).
        ///
        /// <p>The IP address types to add to your service configuration.</p>
        pub fn add_supported_ip_address_types(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.add_supported_ip_address_types(input.into());
            self
        }
        /// <p>The IP address types to add to your service configuration.</p>
        pub fn set_add_supported_ip_address_types(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_add_supported_ip_address_types(input);
            self
        }
        /// Appends an item to `RemoveSupportedIpAddressTypes`.
        ///
        /// To override the contents of this collection use [`set_remove_supported_ip_address_types`](Self::set_remove_supported_ip_address_types).
        ///
        /// <p>The IP address types to remove from your service configuration.</p>
        pub fn remove_supported_ip_address_types(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.remove_supported_ip_address_types(input.into());
            self
        }
        /// <p>The IP address types to remove from your service configuration.</p>
        pub fn set_remove_supported_ip_address_types(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_remove_supported_ip_address_types(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpcEndpointServicePayerResponsibility`.
    ///
    /// <p>Modifies the payer responsibility for your VPC endpoint service.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpcEndpointServicePayerResponsibility {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpc_endpoint_service_payer_responsibility_input::Builder,
    }
    impl ModifyVpcEndpointServicePayerResponsibility {
        /// Creates a new `ModifyVpcEndpointServicePayerResponsibility`.
        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::ModifyVpcEndpointServicePayerResponsibility,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVpcEndpointServicePayerResponsibilityError,
            >,
        > {
            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::ModifyVpcEndpointServicePayerResponsibilityOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVpcEndpointServicePayerResponsibilityError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the service.</p>
        pub fn service_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_id(input.into());
            self
        }
        /// <p>The ID of the service.</p>
        pub fn set_service_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_id(input);
            self
        }
        /// <p>The entity that is responsible for the endpoint costs. The default is the endpoint owner. If you set the payer responsibility to the service owner, you cannot set it back to the endpoint owner.</p>
        pub fn payer_responsibility(mut self, input: crate::model::PayerResponsibility) -> Self {
            self.inner = self.inner.payer_responsibility(input);
            self
        }
        /// <p>The entity that is responsible for the endpoint costs. The default is the endpoint owner. If you set the payer responsibility to the service owner, you cannot set it back to the endpoint owner.</p>
        pub fn set_payer_responsibility(
            mut self,
            input: std::option::Option<crate::model::PayerResponsibility>,
        ) -> Self {
            self.inner = self.inner.set_payer_responsibility(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpcEndpointServicePermissions`.
    ///
    /// <p>Modifies the permissions for your VPC endpoint service. You can add or remove permissions for service consumers (Amazon Web Services accounts, users, and IAM roles) to connect to your endpoint service.</p>
    /// <p>If you grant permissions to all principals, the service is public. Any users who know the name of a public service can send a request to attach an endpoint. If the service does not require manual approval, attachments are automatically approved.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpcEndpointServicePermissions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpc_endpoint_service_permissions_input::Builder,
    }
    impl ModifyVpcEndpointServicePermissions {
        /// Creates a new `ModifyVpcEndpointServicePermissions`.
        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::ModifyVpcEndpointServicePermissions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVpcEndpointServicePermissionsError,
            >,
        > {
            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::ModifyVpcEndpointServicePermissionsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ModifyVpcEndpointServicePermissionsError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the service.</p>
        pub fn service_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_id(input.into());
            self
        }
        /// <p>The ID of the service.</p>
        pub fn set_service_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_id(input);
            self
        }
        /// Appends an item to `AddAllowedPrincipals`.
        ///
        /// To override the contents of this collection use [`set_add_allowed_principals`](Self::set_add_allowed_principals).
        ///
        /// <p>The Amazon Resource Names (ARN) of the principals. Permissions are granted to the principals in this list. To grant permissions to all principals, specify an asterisk (*).</p>
        pub fn add_allowed_principals(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.add_allowed_principals(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARN) of the principals. Permissions are granted to the principals in this list. To grant permissions to all principals, specify an asterisk (*).</p>
        pub fn set_add_allowed_principals(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_add_allowed_principals(input);
            self
        }
        /// Appends an item to `RemoveAllowedPrincipals`.
        ///
        /// To override the contents of this collection use [`set_remove_allowed_principals`](Self::set_remove_allowed_principals).
        ///
        /// <p>The Amazon Resource Names (ARN) of the principals. Permissions are revoked for principals in this list.</p>
        pub fn remove_allowed_principals(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.remove_allowed_principals(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARN) of the principals. Permissions are revoked for principals in this list.</p>
        pub fn set_remove_allowed_principals(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_remove_allowed_principals(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpcPeeringConnectionOptions`.
    ///
    /// <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    /// <p>Modifies the VPC peering connection options on one side of a VPC peering connection. You can do the following:</p>
    /// <ul>
    /// <li> <p>Enable/disable communication over the peering connection between an EC2-Classic instance that's linked to your VPC (using ClassicLink) and instances in the peer VPC.</p> </li>
    /// <li> <p>Enable/disable communication over the peering connection between instances in your VPC and an EC2-Classic instance that's linked to the peer VPC.</p> </li>
    /// <li> <p>Enable/disable the ability to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC.</p> </li>
    /// </ul>
    /// <p>If the peered VPCs are in the same Amazon Web Services account, you can enable DNS resolution for queries from the local VPC. This ensures that queries from the local VPC resolve to private IP addresses in the peer VPC. This option is not available if the peered VPCs are in different different Amazon Web Services accounts or different Regions. For peered VPCs in different Amazon Web Services accounts, each Amazon Web Services account owner must initiate a separate request to modify the peering connection options. For inter-region peering connections, you must use the Region for the requester VPC to modify the requester VPC peering options and the Region for the accepter VPC to modify the accepter VPC peering options. To verify which VPCs are the accepter and the requester for a VPC peering connection, use the <code>DescribeVpcPeeringConnections</code> command.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpcPeeringConnectionOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpc_peering_connection_options_input::Builder,
    }
    impl ModifyVpcPeeringConnectionOptions {
        /// Creates a new `ModifyVpcPeeringConnectionOptions`.
        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::ModifyVpcPeeringConnectionOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpcPeeringConnectionOptionsError>,
        > {
            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::ModifyVpcPeeringConnectionOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpcPeeringConnectionOptionsError>,
        > {
            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 VPC peering connection options for the accepter VPC.</p>
        pub fn accepter_peering_connection_options(
            mut self,
            input: crate::model::PeeringConnectionOptionsRequest,
        ) -> Self {
            self.inner = self.inner.accepter_peering_connection_options(input);
            self
        }
        /// <p>The VPC peering connection options for the accepter VPC.</p>
        pub fn set_accepter_peering_connection_options(
            mut self,
            input: std::option::Option<crate::model::PeeringConnectionOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_accepter_peering_connection_options(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The VPC peering connection options for the requester VPC.</p>
        pub fn requester_peering_connection_options(
            mut self,
            input: crate::model::PeeringConnectionOptionsRequest,
        ) -> Self {
            self.inner = self.inner.requester_peering_connection_options(input);
            self
        }
        /// <p>The VPC peering connection options for the requester VPC.</p>
        pub fn set_requester_peering_connection_options(
            mut self,
            input: std::option::Option<crate::model::PeeringConnectionOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_requester_peering_connection_options(input);
            self
        }
        /// <p>The ID of the VPC peering connection.</p>
        pub fn vpc_peering_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_peering_connection_id(input.into());
            self
        }
        /// <p>The ID of the VPC peering connection.</p>
        pub fn set_vpc_peering_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_peering_connection_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpcTenancy`.
    ///
    /// <p>Modifies the instance tenancy attribute of the specified VPC. You can change the instance tenancy attribute of a VPC to <code>default</code> only. You cannot change the instance tenancy attribute to <code>dedicated</code>.</p>
    /// <p>After you modify the tenancy of the VPC, any new instances that you launch into the VPC have a tenancy of <code>default</code>, unless you specify otherwise during launch. The tenancy of any existing instances in the VPC is not affected.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html">Dedicated Instances</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpcTenancy {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpc_tenancy_input::Builder,
    }
    impl ModifyVpcTenancy {
        /// Creates a new `ModifyVpcTenancy`.
        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::ModifyVpcTenancy,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpcTenancyError>,
        > {
            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::ModifyVpcTenancyOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpcTenancyError>,
        > {
            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 VPC.</p>
        pub fn vpc_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_id(input.into());
            self
        }
        /// <p>The ID of the VPC.</p>
        pub fn set_vpc_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_vpc_id(input);
            self
        }
        /// <p>The instance tenancy attribute for the VPC. </p>
        pub fn instance_tenancy(mut self, input: crate::model::VpcTenancy) -> Self {
            self.inner = self.inner.instance_tenancy(input);
            self
        }
        /// <p>The instance tenancy attribute for the VPC. </p>
        pub fn set_instance_tenancy(
            mut self,
            input: std::option::Option<crate::model::VpcTenancy>,
        ) -> Self {
            self.inner = self.inner.set_instance_tenancy(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpnConnection`.
    ///
    /// <p>Modifies the customer gateway or the target gateway of an Amazon Web Services Site-to-Site VPN connection. To modify the target gateway, the following migration options are available:</p>
    /// <ul>
    /// <li> <p>An existing virtual private gateway to a new virtual private gateway</p> </li>
    /// <li> <p>An existing virtual private gateway to a transit gateway</p> </li>
    /// <li> <p>An existing transit gateway to a new transit gateway</p> </li>
    /// <li> <p>An existing transit gateway to a virtual private gateway</p> </li>
    /// </ul>
    /// <p>Before you perform the migration to the new gateway, you must configure the new gateway. Use <code>CreateVpnGateway</code> to create a virtual private gateway, or <code>CreateTransitGateway</code> to create a transit gateway.</p>
    /// <p>This step is required when you migrate from a virtual private gateway with static routes to a transit gateway. </p>
    /// <p>You must delete the static routes before you migrate to the new gateway.</p>
    /// <p>Keep a copy of the static route before you delete it. You will need to add back these routes to the transit gateway after the VPN connection migration is complete.</p>
    /// <p>After you migrate to the new gateway, you might need to modify your VPC route table. Use <code>CreateRoute</code> and <code>DeleteRoute</code> to make the changes described in <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/modify-vpn-target.html#step-update-routing">Update VPC route tables</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    /// <p>When the new gateway is a transit gateway, modify the transit gateway route table to allow traffic between the VPC and the Amazon Web Services Site-to-Site VPN connection. Use <code>CreateTransitGatewayRoute</code> to add the routes.</p>
    /// <p> If you deleted VPN static routes, you must add the static routes to the transit gateway route table.</p>
    /// <p>After you perform this operation, the VPN endpoint's IP addresses on the Amazon Web Services side and the tunnel options remain intact. Your Amazon Web Services Site-to-Site VPN connection will be temporarily unavailable for a brief period while we provision the new endpoints.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpnConnection {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpn_connection_input::Builder,
    }
    impl ModifyVpnConnection {
        /// Creates a new `ModifyVpnConnection`.
        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::ModifyVpnConnection,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpnConnectionError>,
        > {
            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::ModifyVpnConnectionOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpnConnectionError>,
        > {
            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 VPN connection.</p>
        pub fn vpn_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_id(input.into());
            self
        }
        /// <p>The ID of the VPN connection.</p>
        pub fn set_vpn_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_id(input);
            self
        }
        /// <p>The ID of the transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>The ID of the customer gateway at your end of the VPN connection.</p>
        pub fn customer_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.customer_gateway_id(input.into());
            self
        }
        /// <p>The ID of the customer gateway at your end of the VPN connection.</p>
        pub fn set_customer_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_customer_gateway_id(input);
            self
        }
        /// <p>The ID of the virtual private gateway at the Amazon Web Services side of the VPN connection.</p>
        pub fn vpn_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_gateway_id(input.into());
            self
        }
        /// <p>The ID of the virtual private gateway at the Amazon Web Services side of the VPN connection.</p>
        pub fn set_vpn_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_gateway_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpnConnectionOptions`.
    ///
    /// <p>Modifies the connection options for your Site-to-Site VPN connection.</p>
    /// <p>When you modify the VPN connection options, the VPN endpoint IP addresses on the Amazon Web Services side do not change, and the tunnel options do not change. Your VPN connection will be temporarily unavailable for a brief period while the VPN connection is updated.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpnConnectionOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpn_connection_options_input::Builder,
    }
    impl ModifyVpnConnectionOptions {
        /// Creates a new `ModifyVpnConnectionOptions`.
        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::ModifyVpnConnectionOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpnConnectionOptionsError>,
        > {
            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::ModifyVpnConnectionOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpnConnectionOptionsError>,
        > {
            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 Site-to-Site VPN connection. </p>
        pub fn vpn_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_id(input.into());
            self
        }
        /// <p>The ID of the Site-to-Site VPN connection. </p>
        pub fn set_vpn_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_id(input);
            self
        }
        /// <p>The IPv4 CIDR on the customer gateway (on-premises) side of the VPN connection.</p>
        /// <p>Default: <code>0.0.0.0/0</code> </p>
        pub fn local_ipv4_network_cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.local_ipv4_network_cidr(input.into());
            self
        }
        /// <p>The IPv4 CIDR on the customer gateway (on-premises) side of the VPN connection.</p>
        /// <p>Default: <code>0.0.0.0/0</code> </p>
        pub fn set_local_ipv4_network_cidr(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_ipv4_network_cidr(input);
            self
        }
        /// <p>The IPv4 CIDR on the Amazon Web Services side of the VPN connection.</p>
        /// <p>Default: <code>0.0.0.0/0</code> </p>
        pub fn remote_ipv4_network_cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.remote_ipv4_network_cidr(input.into());
            self
        }
        /// <p>The IPv4 CIDR on the Amazon Web Services side of the VPN connection.</p>
        /// <p>Default: <code>0.0.0.0/0</code> </p>
        pub fn set_remote_ipv4_network_cidr(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_remote_ipv4_network_cidr(input);
            self
        }
        /// <p>The IPv6 CIDR on the customer gateway (on-premises) side of the VPN connection.</p>
        /// <p>Default: <code>::/0</code> </p>
        pub fn local_ipv6_network_cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.local_ipv6_network_cidr(input.into());
            self
        }
        /// <p>The IPv6 CIDR on the customer gateway (on-premises) side of the VPN connection.</p>
        /// <p>Default: <code>::/0</code> </p>
        pub fn set_local_ipv6_network_cidr(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_ipv6_network_cidr(input);
            self
        }
        /// <p>The IPv6 CIDR on the Amazon Web Services side of the VPN connection.</p>
        /// <p>Default: <code>::/0</code> </p>
        pub fn remote_ipv6_network_cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.remote_ipv6_network_cidr(input.into());
            self
        }
        /// <p>The IPv6 CIDR on the Amazon Web Services side of the VPN connection.</p>
        /// <p>Default: <code>::/0</code> </p>
        pub fn set_remote_ipv6_network_cidr(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_remote_ipv6_network_cidr(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpnTunnelCertificate`.
    ///
    /// <p>Modifies the VPN tunnel endpoint certificate.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpnTunnelCertificate {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpn_tunnel_certificate_input::Builder,
    }
    impl ModifyVpnTunnelCertificate {
        /// Creates a new `ModifyVpnTunnelCertificate`.
        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::ModifyVpnTunnelCertificate,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpnTunnelCertificateError>,
        > {
            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::ModifyVpnTunnelCertificateOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpnTunnelCertificateError>,
        > {
            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 Amazon Web Services Site-to-Site VPN connection.</p>
        pub fn vpn_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Site-to-Site VPN connection.</p>
        pub fn set_vpn_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_id(input);
            self
        }
        /// <p>The external IP address of the VPN tunnel.</p>
        pub fn vpn_tunnel_outside_ip_address(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.vpn_tunnel_outside_ip_address(input.into());
            self
        }
        /// <p>The external IP address of the VPN tunnel.</p>
        pub fn set_vpn_tunnel_outside_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_tunnel_outside_ip_address(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ModifyVpnTunnelOptions`.
    ///
    /// <p>Modifies the options for a VPN tunnel in an Amazon Web Services Site-to-Site VPN connection. You can modify multiple options for a tunnel in a single request, but you can only modify one tunnel at a time. For more information, see <a href="https://docs.aws.amazon.com/vpn/latest/s2svpn/VPNTunnels.html">Site-to-Site VPN tunnel options for your Site-to-Site VPN connection</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ModifyVpnTunnelOptions {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::modify_vpn_tunnel_options_input::Builder,
    }
    impl ModifyVpnTunnelOptions {
        /// Creates a new `ModifyVpnTunnelOptions`.
        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::ModifyVpnTunnelOptions,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpnTunnelOptionsError>,
        > {
            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::ModifyVpnTunnelOptionsOutput,
            aws_smithy_http::result::SdkError<crate::error::ModifyVpnTunnelOptionsError>,
        > {
            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 Amazon Web Services Site-to-Site VPN connection.</p>
        pub fn vpn_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpn_connection_id(input.into());
            self
        }
        /// <p>The ID of the Amazon Web Services Site-to-Site VPN connection.</p>
        pub fn set_vpn_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_connection_id(input);
            self
        }
        /// <p>The external IP address of the VPN tunnel.</p>
        pub fn vpn_tunnel_outside_ip_address(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.vpn_tunnel_outside_ip_address(input.into());
            self
        }
        /// <p>The external IP address of the VPN tunnel.</p>
        pub fn set_vpn_tunnel_outside_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpn_tunnel_outside_ip_address(input);
            self
        }
        /// <p>The tunnel options to modify.</p>
        pub fn tunnel_options(
            mut self,
            input: crate::model::ModifyVpnTunnelOptionsSpecification,
        ) -> Self {
            self.inner = self.inner.tunnel_options(input);
            self
        }
        /// <p>The tunnel options to modify.</p>
        pub fn set_tunnel_options(
            mut self,
            input: std::option::Option<crate::model::ModifyVpnTunnelOptionsSpecification>,
        ) -> Self {
            self.inner = self.inner.set_tunnel_options(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `MonitorInstances`.
    ///
    /// <p>Enables detailed monitoring for a running instance. Otherwise, basic monitoring is enabled. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html">Monitor your instances using CloudWatch</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>To disable detailed monitoring, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_UnmonitorInstances.html">UnmonitorInstances</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct MonitorInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::monitor_instances_input::Builder,
    }
    impl MonitorInstances {
        /// Creates a new `MonitorInstances`.
        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::MonitorInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::MonitorInstancesError>,
        > {
            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::MonitorInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::MonitorInstancesError>,
        > {
            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 `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The IDs of the instances.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The IDs of the instances.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `MoveAddressToVpc`.
    ///
    /// <p>Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC platform. The Elastic IP address must be allocated to your account for more than 24 hours, and it must not be associated with an instance. After the Elastic IP address is moved, it is no longer available for use in the EC2-Classic platform, unless you move it back using the <code>RestoreAddressToClassic</code> request. You cannot move an Elastic IP address that was originally allocated for use in the EC2-VPC platform to the EC2-Classic platform.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct MoveAddressToVpc {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::move_address_to_vpc_input::Builder,
    }
    impl MoveAddressToVpc {
        /// Creates a new `MoveAddressToVpc`.
        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::MoveAddressToVpc,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::MoveAddressToVpcError>,
        > {
            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::MoveAddressToVpcOutput,
            aws_smithy_http::result::SdkError<crate::error::MoveAddressToVpcError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The Elastic IP address.</p>
        pub fn public_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ip(input.into());
            self
        }
        /// <p>The Elastic IP address.</p>
        pub fn set_public_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_public_ip(input);
            self
        }
    }
    /// Fluent builder constructing a request to `MoveByoipCidrToIpam`.
    ///
    /// <p>Move an BYOIP IPv4 CIDR to IPAM from a public IPv4 pool.</p>
    /// <p>If you already have an IPv4 BYOIP CIDR with Amazon Web Services, you can move the CIDR to IPAM from a public IPv4 pool. You cannot move an IPv6 CIDR to IPAM. If you are bringing a new IP address to Amazon Web Services for the first time, complete the steps in <a href="https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-ipam.html">Tutorial: BYOIP address CIDRs to IPAM</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct MoveByoipCidrToIpam {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::move_byoip_cidr_to_ipam_input::Builder,
    }
    impl MoveByoipCidrToIpam {
        /// Creates a new `MoveByoipCidrToIpam`.
        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::MoveByoipCidrToIpam,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::MoveByoipCidrToIpamError>,
        > {
            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::MoveByoipCidrToIpamOutput,
            aws_smithy_http::result::SdkError<crate::error::MoveByoipCidrToIpamError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The BYOIP CIDR.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The BYOIP CIDR.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>The IPAM pool ID.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The IPAM pool ID.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The Amazon Web Services account ID of the owner of the IPAM pool.</p>
        pub fn ipam_pool_owner(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_owner(input.into());
            self
        }
        /// <p>The Amazon Web Services account ID of the owner of the IPAM pool.</p>
        pub fn set_ipam_pool_owner(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipam_pool_owner(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ProvisionByoipCidr`.
    ///
    /// <p>Provisions an IPv4 or IPv6 address range for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP) and creates a corresponding address pool. After the address range is provisioned, it is ready to be advertised using <code>AdvertiseByoipCidr</code>.</p>
    /// <p>Amazon Web Services verifies that you own the address range and are authorized to advertise it. You must ensure that the address range is registered to you and that you created an RPKI ROA to authorize Amazon ASNs 16509 and 14618 to advertise the address range. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html">Bring your own IP addresses (BYOIP)</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p>Provisioning an address range is an asynchronous operation, so the call returns immediately, but the address range is not ready to use until its status changes from <code>pending-provision</code> to <code>provisioned</code>. To monitor the status of an address range, use <code>DescribeByoipCidrs</code>. To allocate an Elastic IP address from your IPv4 address pool, use <code>AllocateAddress</code> with either the specific address from the address pool or the ID of the address pool.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ProvisionByoipCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::provision_byoip_cidr_input::Builder,
    }
    impl ProvisionByoipCidr {
        /// Creates a new `ProvisionByoipCidr`.
        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::ProvisionByoipCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ProvisionByoipCidrError>,
        > {
            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::ProvisionByoipCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::ProvisionByoipCidrError>,
        > {
            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 public IPv4 or IPv6 address range, in CIDR notation. The most specific IPv4 prefix that you can specify is /24. The most specific IPv6 prefix you can specify is /56. The address range cannot overlap with another address range that you've brought to this or another Region.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The public IPv4 or IPv6 address range, in CIDR notation. The most specific IPv4 prefix that you can specify is /24. The most specific IPv6 prefix you can specify is /56. The address range cannot overlap with another address range that you've brought to this or another Region.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>A signed document that proves that you are authorized to bring the specified IP address range to Amazon using BYOIP.</p>
        pub fn cidr_authorization_context(
            mut self,
            input: crate::model::CidrAuthorizationContext,
        ) -> Self {
            self.inner = self.inner.cidr_authorization_context(input);
            self
        }
        /// <p>A signed document that proves that you are authorized to bring the specified IP address range to Amazon using BYOIP.</p>
        pub fn set_cidr_authorization_context(
            mut self,
            input: std::option::Option<crate::model::CidrAuthorizationContext>,
        ) -> Self {
            self.inner = self.inner.set_cidr_authorization_context(input);
            self
        }
        /// <p>(IPv6 only) Indicate whether the address range will be publicly advertised to the internet.</p>
        /// <p>Default: true</p>
        pub fn publicly_advertisable(mut self, input: bool) -> Self {
            self.inner = self.inner.publicly_advertisable(input);
            self
        }
        /// <p>(IPv6 only) Indicate whether the address range will be publicly advertised to the internet.</p>
        /// <p>Default: true</p>
        pub fn set_publicly_advertisable(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_publicly_advertisable(input);
            self
        }
        /// <p>A description for the address range and the address pool.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for the address range and the address pool.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `PoolTagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_pool_tag_specifications`](Self::set_pool_tag_specifications).
        ///
        /// <p>The tags to apply to the address pool.</p>
        pub fn pool_tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.pool_tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the address pool.</p>
        pub fn set_pool_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_pool_tag_specifications(input);
            self
        }
        /// <p>Reserved.</p>
        pub fn multi_region(mut self, input: bool) -> Self {
            self.inner = self.inner.multi_region(input);
            self
        }
        /// <p>Reserved.</p>
        pub fn set_multi_region(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_multi_region(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ProvisionIpamPoolCidr`.
    ///
    /// <p>Provision a CIDR to an IPAM pool. You can use this action to provision new CIDRs to a top-level pool or to transfer a CIDR from a top-level pool to a pool within it.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/prov-cidr-ipam.html">Provision CIDRs to pools</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ProvisionIpamPoolCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::provision_ipam_pool_cidr_input::Builder,
    }
    impl ProvisionIpamPoolCidr {
        /// Creates a new `ProvisionIpamPoolCidr`.
        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::ProvisionIpamPoolCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ProvisionIpamPoolCidrError>,
        > {
            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::ProvisionIpamPoolCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::ProvisionIpamPoolCidrError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM pool to which you want to assign a CIDR.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the IPAM pool to which you want to assign a CIDR.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The CIDR you want to assign to the IPAM pool.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The CIDR you want to assign to the IPAM pool.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>A signed document that proves that you are authorized to bring a specified IP address range to Amazon using BYOIP. This option applies to public pools only.</p>
        pub fn cidr_authorization_context(
            mut self,
            input: crate::model::IpamCidrAuthorizationContext,
        ) -> Self {
            self.inner = self.inner.cidr_authorization_context(input);
            self
        }
        /// <p>A signed document that proves that you are authorized to bring a specified IP address range to Amazon using BYOIP. This option applies to public pools only.</p>
        pub fn set_cidr_authorization_context(
            mut self,
            input: std::option::Option<crate::model::IpamCidrAuthorizationContext>,
        ) -> Self {
            self.inner = self.inner.set_cidr_authorization_context(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ProvisionPublicIpv4PoolCidr`.
    ///
    /// <p>Provision a CIDR to a public IPv4 pool.</p>
    /// <p>For more information about IPAM, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ProvisionPublicIpv4PoolCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::provision_public_ipv4_pool_cidr_input::Builder,
    }
    impl ProvisionPublicIpv4PoolCidr {
        /// Creates a new `ProvisionPublicIpv4PoolCidr`.
        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::ProvisionPublicIpv4PoolCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ProvisionPublicIpv4PoolCidrError>,
        > {
            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::ProvisionPublicIpv4PoolCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::ProvisionPublicIpv4PoolCidrError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM pool you would like to use to allocate this CIDR.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the IPAM pool you would like to use to allocate this CIDR.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The ID of the public IPv4 pool you would like to use for this CIDR.</p>
        pub fn pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.pool_id(input.into());
            self
        }
        /// <p>The ID of the public IPv4 pool you would like to use for this CIDR.</p>
        pub fn set_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_pool_id(input);
            self
        }
        /// <p>The netmask length of the CIDR you would like to allocate to the public IPv4 pool.</p>
        pub fn netmask_length(mut self, input: i32) -> Self {
            self.inner = self.inner.netmask_length(input);
            self
        }
        /// <p>The netmask length of the CIDR you would like to allocate to the public IPv4 pool.</p>
        pub fn set_netmask_length(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_netmask_length(input);
            self
        }
    }
    /// Fluent builder constructing a request to `PurchaseHostReservation`.
    ///
    /// <p>Purchase a reservation with configurations that match those of your Dedicated Host. You must have active Dedicated Hosts in your account before you purchase a reservation. This action results in the specified reservation being purchased and charged to your account.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct PurchaseHostReservation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::purchase_host_reservation_input::Builder,
    }
    impl PurchaseHostReservation {
        /// Creates a new `PurchaseHostReservation`.
        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::PurchaseHostReservation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::PurchaseHostReservationError>,
        > {
            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::PurchaseHostReservationOutput,
            aws_smithy_http::result::SdkError<crate::error::PurchaseHostReservationError>,
        > {
            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>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>The currency in which the <code>totalUpfrontPrice</code>, <code>LimitPrice</code>, and <code>totalHourlyPrice</code> amounts are specified. At this time, the only supported currency is <code>USD</code>.</p>
        pub fn currency_code(mut self, input: crate::model::CurrencyCodeValues) -> Self {
            self.inner = self.inner.currency_code(input);
            self
        }
        /// <p>The currency in which the <code>totalUpfrontPrice</code>, <code>LimitPrice</code>, and <code>totalHourlyPrice</code> amounts are specified. At this time, the only supported currency is <code>USD</code>.</p>
        pub fn set_currency_code(
            mut self,
            input: std::option::Option<crate::model::CurrencyCodeValues>,
        ) -> Self {
            self.inner = self.inner.set_currency_code(input);
            self
        }
        /// Appends an item to `HostIdSet`.
        ///
        /// To override the contents of this collection use [`set_host_id_set`](Self::set_host_id_set).
        ///
        /// <p>The IDs of the Dedicated Hosts with which the reservation will be associated.</p>
        pub fn host_id_set(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.host_id_set(input.into());
            self
        }
        /// <p>The IDs of the Dedicated Hosts with which the reservation will be associated.</p>
        pub fn set_host_id_set(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_host_id_set(input);
            self
        }
        /// <p>The specified limit is checked against the total upfront cost of the reservation (calculated as the offering's upfront cost multiplied by the host count). If the total upfront cost is greater than the specified price limit, the request fails. This is used to ensure that the purchase does not exceed the expected upfront cost of the purchase. At this time, the only supported currency is <code>USD</code>. For example, to indicate a limit price of USD 100, specify 100.00.</p>
        pub fn limit_price(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.limit_price(input.into());
            self
        }
        /// <p>The specified limit is checked against the total upfront cost of the reservation (calculated as the offering's upfront cost multiplied by the host count). If the total upfront cost is greater than the specified price limit, the request fails. This is used to ensure that the purchase does not exceed the expected upfront cost of the purchase. At this time, the only supported currency is <code>USD</code>. For example, to indicate a limit price of USD 100, specify 100.00.</p>
        pub fn set_limit_price(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_limit_price(input);
            self
        }
        /// <p>The ID of the offering.</p>
        pub fn offering_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.offering_id(input.into());
            self
        }
        /// <p>The ID of the offering.</p>
        pub fn set_offering_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_offering_id(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the Dedicated Host Reservation during purchase.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the Dedicated Host Reservation during purchase.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
    }
    /// Fluent builder constructing a request to `PurchaseReservedInstancesOffering`.
    ///
    /// <p>Purchases a Reserved Instance for use with your account. With Reserved Instances, you pay a lower hourly rate compared to On-Demand instance pricing.</p>
    /// <p>Use <code>DescribeReservedInstancesOfferings</code> to get a list of Reserved Instance offerings that match your specifications. After you've purchased a Reserved Instance, you can check for your new Reserved Instance with <code>DescribeReservedInstances</code>.</p>
    /// <p>To queue a purchase for a future date and time, specify a purchase time. If you do not specify a purchase time, the default is the current time.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html">Reserved Instances</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html">Reserved Instance Marketplace</a> in the <i>Amazon EC2 User Guide</i>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct PurchaseReservedInstancesOffering {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::purchase_reserved_instances_offering_input::Builder,
    }
    impl PurchaseReservedInstancesOffering {
        /// Creates a new `PurchaseReservedInstancesOffering`.
        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::PurchaseReservedInstancesOffering,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::PurchaseReservedInstancesOfferingError>,
        > {
            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::PurchaseReservedInstancesOfferingOutput,
            aws_smithy_http::result::SdkError<crate::error::PurchaseReservedInstancesOfferingError>,
        > {
            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 number of Reserved Instances to purchase.</p>
        pub fn instance_count(mut self, input: i32) -> Self {
            self.inner = self.inner.instance_count(input);
            self
        }
        /// <p>The number of Reserved Instances to purchase.</p>
        pub fn set_instance_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_instance_count(input);
            self
        }
        /// <p>The ID of the Reserved Instance offering to purchase.</p>
        pub fn reserved_instances_offering_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.reserved_instances_offering_id(input.into());
            self
        }
        /// <p>The ID of the Reserved Instance offering to purchase.</p>
        pub fn set_reserved_instances_offering_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_reserved_instances_offering_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Specified for Reserved Instance Marketplace offerings to limit the total order and ensure that the Reserved Instances are not purchased at unexpected prices.</p>
        pub fn limit_price(mut self, input: crate::model::ReservedInstanceLimitPrice) -> Self {
            self.inner = self.inner.limit_price(input);
            self
        }
        /// <p>Specified for Reserved Instance Marketplace offerings to limit the total order and ensure that the Reserved Instances are not purchased at unexpected prices.</p>
        pub fn set_limit_price(
            mut self,
            input: std::option::Option<crate::model::ReservedInstanceLimitPrice>,
        ) -> Self {
            self.inner = self.inner.set_limit_price(input);
            self
        }
        /// <p>The time at which to purchase the Reserved Instance, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn purchase_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.purchase_time(input);
            self
        }
        /// <p>The time at which to purchase the Reserved Instance, in UTC format (for example, <i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        pub fn set_purchase_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_purchase_time(input);
            self
        }
    }
    /// Fluent builder constructing a request to `PurchaseScheduledInstances`.
    ///
    /// <note>
    /// <p>You can no longer purchase Scheduled Instances.</p>
    /// </note>
    /// <p>Purchases the Scheduled Instances with the specified schedule.</p>
    /// <p>Scheduled Instances enable you to purchase Amazon EC2 compute capacity by the hour for a one-year term. Before you can purchase a Scheduled Instance, you must call <code>DescribeScheduledInstanceAvailability</code> to check for available schedules and obtain a purchase token. After you purchase a Scheduled Instance, you must call <code>RunScheduledInstances</code> during each scheduled time period.</p>
    /// <p>After you purchase a Scheduled Instance, you can't cancel, modify, or resell your purchase.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct PurchaseScheduledInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::purchase_scheduled_instances_input::Builder,
    }
    impl PurchaseScheduledInstances {
        /// Creates a new `PurchaseScheduledInstances`.
        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::PurchaseScheduledInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::PurchaseScheduledInstancesError>,
        > {
            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::PurchaseScheduledInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::PurchaseScheduledInstancesError>,
        > {
            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>Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `PurchaseRequests`.
        ///
        /// To override the contents of this collection use [`set_purchase_requests`](Self::set_purchase_requests).
        ///
        /// <p>The purchase requests.</p>
        pub fn purchase_requests(mut self, input: crate::model::PurchaseRequest) -> Self {
            self.inner = self.inner.purchase_requests(input);
            self
        }
        /// <p>The purchase requests.</p>
        pub fn set_purchase_requests(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::PurchaseRequest>>,
        ) -> Self {
            self.inner = self.inner.set_purchase_requests(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RebootInstances`.
    ///
    /// <p>Requests a reboot of the specified instances. This operation is asynchronous; it only queues a request to reboot the specified instances. The operation succeeds if the instances are valid and belong to you. Requests to reboot terminated instances are ignored.</p>
    /// <p>If an instance does not cleanly shut down within a few minutes, Amazon EC2 performs a hard reboot.</p>
    /// <p>For more information about troubleshooting, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html">Troubleshoot an unreachable instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RebootInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reboot_instances_input::Builder,
    }
    impl RebootInstances {
        /// Creates a new `RebootInstances`.
        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::RebootInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RebootInstancesError>,
        > {
            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::RebootInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::RebootInstancesError>,
        > {
            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 `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The instance IDs.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The instance IDs.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RegisterImage`.
    ///
    /// <p>Registers an AMI. When you're creating an AMI, this is the final step you must complete before you can launch an instance from the AMI. For more information about creating AMIs, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html">Create your own AMI</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <note>
    /// <p>For Amazon EBS-backed instances, <code>CreateImage</code> creates and registers the AMI in a single request, so you don't have to register the AMI yourself. We recommend that you always use <code>CreateImage</code> unless you have a specific reason to use RegisterImage.</p>
    /// </note>
    /// <p>If needed, you can deregister an AMI at any time. Any modifications you make to an AMI backed by an instance store volume invalidates its registration. If you make changes to an image, deregister the previous image and register the new image.</p>
    /// <p> <b>Register a snapshot of a root device volume</b> </p>
    /// <p>You can use <code>RegisterImage</code> to create an Amazon EBS-backed Linux AMI from a snapshot of a root device volume. You specify the snapshot using a block device mapping. You can't set the encryption state of the volume using the block device mapping. If the snapshot is encrypted, or encryption by default is enabled, the root volume of an instance launched from the AMI is encrypted.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot">Create a Linux AMI from a snapshot</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html">Use encryption with Amazon EBS-backed AMIs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// <p> <b>Amazon Web Services Marketplace product codes</b> </p>
    /// <p>If any snapshots have Amazon Web Services Marketplace product codes, they are copied to the new AMI.</p>
    /// <p>Windows and some Linux distributions, such as Red Hat Enterprise Linux (RHEL) and SUSE Linux Enterprise Server (SLES), use the Amazon EC2 billing product code associated with an AMI to verify the subscription status for package updates. To create a new AMI for operating systems that require a billing product code, instead of registering the AMI, do the following to preserve the billing product code association:</p>
    /// <ol>
    /// <li> <p>Launch an instance from an existing AMI with that billing product code.</p> </li>
    /// <li> <p>Customize the instance.</p> </li>
    /// <li> <p>Create an AMI from the instance using <code>CreateImage</code>.</p> </li>
    /// </ol>
    /// <p>If you purchase a Reserved Instance to apply to an On-Demand Instance that was launched from an AMI with a billing product code, make sure that the Reserved Instance has the matching billing product code. If you purchase a Reserved Instance without the matching billing product code, the Reserved Instance will not be applied to the On-Demand Instance. For information about how to obtain the platform details and billing information of an AMI, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html">Understand AMI billing information</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RegisterImage {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::register_image_input::Builder,
    }
    impl RegisterImage {
        /// Creates a new `RegisterImage`.
        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::RegisterImage,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RegisterImageError>,
        > {
            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::RegisterImageOutput,
            aws_smithy_http::result::SdkError<crate::error::RegisterImageError>,
        > {
            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 full path to your AMI manifest in Amazon S3 storage. The specified bucket must have the <code>aws-exec-read</code> canned access control list (ACL) to ensure that it can be accessed by Amazon EC2. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl">Canned ACLs</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
        pub fn image_location(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_location(input.into());
            self
        }
        /// <p>The full path to your AMI manifest in Amazon S3 storage. The specified bucket must have the <code>aws-exec-read</code> canned access control list (ACL) to ensure that it can be accessed by Amazon EC2. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl">Canned ACLs</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>
        pub fn set_image_location(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_image_location(input);
            self
        }
        /// <p>The architecture of the AMI.</p>
        /// <p>Default: For Amazon EBS-backed AMIs, <code>i386</code>. For instance store-backed AMIs, the architecture specified in the manifest file.</p>
        pub fn architecture(mut self, input: crate::model::ArchitectureValues) -> Self {
            self.inner = self.inner.architecture(input);
            self
        }
        /// <p>The architecture of the AMI.</p>
        /// <p>Default: For Amazon EBS-backed AMIs, <code>i386</code>. For instance store-backed AMIs, the architecture specified in the manifest file.</p>
        pub fn set_architecture(
            mut self,
            input: std::option::Option<crate::model::ArchitectureValues>,
        ) -> Self {
            self.inner = self.inner.set_architecture(input);
            self
        }
        /// Appends an item to `BlockDeviceMappings`.
        ///
        /// To override the contents of this collection use [`set_block_device_mappings`](Self::set_block_device_mappings).
        ///
        /// <p>The block device mapping entries.</p>
        /// <p>If you specify an Amazon EBS volume using the ID of an Amazon EBS snapshot, you can't specify the encryption state of the volume.</p>
        /// <p>If you create an AMI on an Outpost, then all backing snapshots must be on the same Outpost or in the Region of that Outpost. AMIs on an Outpost that include local snapshots can be used to launch instances on the same Outpost only. For more information, <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami">Amazon EBS local snapshots on Outposts</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn block_device_mappings(mut self, input: crate::model::BlockDeviceMapping) -> Self {
            self.inner = self.inner.block_device_mappings(input);
            self
        }
        /// <p>The block device mapping entries.</p>
        /// <p>If you specify an Amazon EBS volume using the ID of an Amazon EBS snapshot, you can't specify the encryption state of the volume.</p>
        /// <p>If you create an AMI on an Outpost, then all backing snapshots must be on the same Outpost or in the Region of that Outpost. AMIs on an Outpost that include local snapshots can be used to launch instances on the same Outpost only. For more information, <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami">Amazon EBS local snapshots on Outposts</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_block_device_mappings(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::BlockDeviceMapping>>,
        ) -> Self {
            self.inner = self.inner.set_block_device_mappings(input);
            self
        }
        /// <p>A description for your AMI.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>A description for your AMI.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Set to <code>true</code> to enable enhanced networking with ENA for the AMI and any instances that you launch from the AMI.</p>
        /// <p>This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.</p>
        pub fn ena_support(mut self, input: bool) -> Self {
            self.inner = self.inner.ena_support(input);
            self
        }
        /// <p>Set to <code>true</code> to enable enhanced networking with ENA for the AMI and any instances that you launch from the AMI.</p>
        /// <p>This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.</p>
        pub fn set_ena_support(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_ena_support(input);
            self
        }
        /// <p>The ID of the kernel.</p>
        pub fn kernel_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.kernel_id(input.into());
            self
        }
        /// <p>The ID of the kernel.</p>
        pub fn set_kernel_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_kernel_id(input);
            self
        }
        /// <p>A name for your AMI.</p>
        /// <p>Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)</p>
        pub fn name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.name(input.into());
            self
        }
        /// <p>A name for your AMI.</p>
        /// <p>Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)</p>
        pub fn set_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_name(input);
            self
        }
        /// Appends an item to `BillingProducts`.
        ///
        /// To override the contents of this collection use [`set_billing_products`](Self::set_billing_products).
        ///
        /// <p>The billing product codes. Your account must be authorized to specify billing product codes.</p>
        /// <p>If your account is not authorized to specify billing product codes, you can publish AMIs that include billable software and list them on the Amazon Web Services Marketplace. You must first register as a seller on the Amazon Web Services Marketplace. For more information, see <a href="https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html">Getting started as a seller</a> and <a href="https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html">AMI-based products</a> in the <i>Amazon Web Services Marketplace Seller Guide</i>.</p>
        pub fn billing_products(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.billing_products(input.into());
            self
        }
        /// <p>The billing product codes. Your account must be authorized to specify billing product codes.</p>
        /// <p>If your account is not authorized to specify billing product codes, you can publish AMIs that include billable software and list them on the Amazon Web Services Marketplace. You must first register as a seller on the Amazon Web Services Marketplace. For more information, see <a href="https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html">Getting started as a seller</a> and <a href="https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html">AMI-based products</a> in the <i>Amazon Web Services Marketplace Seller Guide</i>.</p>
        pub fn set_billing_products(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_billing_products(input);
            self
        }
        /// <p>The ID of the RAM disk.</p>
        pub fn ramdisk_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ramdisk_id(input.into());
            self
        }
        /// <p>The ID of the RAM disk.</p>
        pub fn set_ramdisk_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ramdisk_id(input);
            self
        }
        /// <p>The device name of the root device volume (for example, <code>/dev/sda1</code>).</p>
        pub fn root_device_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.root_device_name(input.into());
            self
        }
        /// <p>The device name of the root device volume (for example, <code>/dev/sda1</code>).</p>
        pub fn set_root_device_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_root_device_name(input);
            self
        }
        /// <p>Set to <code>simple</code> to enable enhanced networking with the Intel 82599 Virtual Function interface for the AMI and any instances that you launch from the AMI.</p>
        /// <p>There is no way to disable <code>sriovNetSupport</code> at this time.</p>
        /// <p>This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.</p>
        pub fn sriov_net_support(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.sriov_net_support(input.into());
            self
        }
        /// <p>Set to <code>simple</code> to enable enhanced networking with the Intel 82599 Virtual Function interface for the AMI and any instances that you launch from the AMI.</p>
        /// <p>There is no way to disable <code>sriovNetSupport</code> at this time.</p>
        /// <p>This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.</p>
        pub fn set_sriov_net_support(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_sriov_net_support(input);
            self
        }
        /// <p>The type of virtualization (<code>hvm</code> | <code>paravirtual</code>).</p>
        /// <p>Default: <code>paravirtual</code> </p>
        pub fn virtualization_type(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.virtualization_type(input.into());
            self
        }
        /// <p>The type of virtualization (<code>hvm</code> | <code>paravirtual</code>).</p>
        /// <p>Default: <code>paravirtual</code> </p>
        pub fn set_virtualization_type(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_virtualization_type(input);
            self
        }
        /// <p>The boot mode of the AMI. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html">Boot modes</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn boot_mode(mut self, input: crate::model::BootModeValues) -> Self {
            self.inner = self.inner.boot_mode(input);
            self
        }
        /// <p>The boot mode of the AMI. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html">Boot modes</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_boot_mode(
            mut self,
            input: std::option::Option<crate::model::BootModeValues>,
        ) -> Self {
            self.inner = self.inner.set_boot_mode(input);
            self
        }
        /// <p>Set to <code>v2.0</code> to enable Trusted Platform Module (TPM) support. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html">NitroTPM</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn tpm_support(mut self, input: crate::model::TpmSupportValues) -> Self {
            self.inner = self.inner.tpm_support(input);
            self
        }
        /// <p>Set to <code>v2.0</code> to enable Trusted Platform Module (TPM) support. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html">NitroTPM</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_tpm_support(
            mut self,
            input: std::option::Option<crate::model::TpmSupportValues>,
        ) -> Self {
            self.inner = self.inner.set_tpm_support(input);
            self
        }
        /// <p>Base64 representation of the non-volatile UEFI variable store. To retrieve the UEFI data, use the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData">GetInstanceUefiData</a> command. You can inspect and modify the UEFI data by using the <a href="https://github.com/awslabs/python-uefivars">python-uefivars tool</a> on GitHub. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html">UEFI Secure Boot</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn uefi_data(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.uefi_data(input.into());
            self
        }
        /// <p>Base64 representation of the non-volatile UEFI variable store. To retrieve the UEFI data, use the <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData">GetInstanceUefiData</a> command. You can inspect and modify the UEFI data by using the <a href="https://github.com/awslabs/python-uefivars">python-uefivars tool</a> on GitHub. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html">UEFI Secure Boot</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_uefi_data(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_uefi_data(input);
            self
        }
        /// <p>Set to <code>v2.0</code> to indicate that IMDSv2 is specified in the AMI. Instances launched from this AMI will have <code>HttpTokens</code> automatically set to <code>required</code> so that, by default, the instance requires that IMDSv2 is used when requesting instance metadata. In addition, <code>HttpPutResponseHopLimit</code> is set to <code>2</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration">Configure the AMI</a> in the <i>Amazon EC2 User Guide</i>.</p> <note>
        /// <p>If you set the value to <code>v2.0</code>, make sure that your AMI software can support IMDSv2.</p>
        /// </note>
        pub fn imds_support(mut self, input: crate::model::ImdsSupportValues) -> Self {
            self.inner = self.inner.imds_support(input);
            self
        }
        /// <p>Set to <code>v2.0</code> to indicate that IMDSv2 is specified in the AMI. Instances launched from this AMI will have <code>HttpTokens</code> automatically set to <code>required</code> so that, by default, the instance requires that IMDSv2 is used when requesting instance metadata. In addition, <code>HttpPutResponseHopLimit</code> is set to <code>2</code>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration">Configure the AMI</a> in the <i>Amazon EC2 User Guide</i>.</p> <note>
        /// <p>If you set the value to <code>v2.0</code>, make sure that your AMI software can support IMDSv2.</p>
        /// </note>
        pub fn set_imds_support(
            mut self,
            input: std::option::Option<crate::model::ImdsSupportValues>,
        ) -> Self {
            self.inner = self.inner.set_imds_support(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RegisterInstanceEventNotificationAttributes`.
    ///
    /// <p>Registers a set of tag keys to include in scheduled event notifications for your resources. </p>
    /// <p>To remove tags, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeregisterInstanceEventNotificationAttributes.html">DeregisterInstanceEventNotificationAttributes</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RegisterInstanceEventNotificationAttributes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::register_instance_event_notification_attributes_input::Builder,
    }
    impl RegisterInstanceEventNotificationAttributes {
        /// Creates a new `RegisterInstanceEventNotificationAttributes`.
        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::RegisterInstanceEventNotificationAttributes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::RegisterInstanceEventNotificationAttributesError,
            >,
        > {
            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::RegisterInstanceEventNotificationAttributesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::RegisterInstanceEventNotificationAttributesError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Information about the tag keys to register.</p>
        pub fn instance_tag_attribute(
            mut self,
            input: crate::model::RegisterInstanceTagAttributeRequest,
        ) -> Self {
            self.inner = self.inner.instance_tag_attribute(input);
            self
        }
        /// <p>Information about the tag keys to register.</p>
        pub fn set_instance_tag_attribute(
            mut self,
            input: std::option::Option<crate::model::RegisterInstanceTagAttributeRequest>,
        ) -> Self {
            self.inner = self.inner.set_instance_tag_attribute(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RegisterTransitGatewayMulticastGroupMembers`.
    ///
    /// <p>Registers members (network interfaces) with the transit gateway multicast group. A member is a network interface associated with a supported EC2 instance that receives multicast traffic. For information about supported instances, see <a href="https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-limits.html#multicast-limits">Multicast Consideration</a> in <i>Amazon VPC Transit Gateways</i>.</p>
    /// <p>After you add the members, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html">SearchTransitGatewayMulticastGroups</a> to verify that the members were added to the transit gateway multicast group.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RegisterTransitGatewayMulticastGroupMembers {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::register_transit_gateway_multicast_group_members_input::Builder,
    }
    impl RegisterTransitGatewayMulticastGroupMembers {
        /// Creates a new `RegisterTransitGatewayMulticastGroupMembers`.
        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::RegisterTransitGatewayMulticastGroupMembers,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::RegisterTransitGatewayMulticastGroupMembersError,
            >,
        > {
            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::RegisterTransitGatewayMulticastGroupMembersOutput,
            aws_smithy_http::result::SdkError<
                crate::error::RegisterTransitGatewayMulticastGroupMembersError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>The IP address assigned to the transit gateway multicast group.</p>
        pub fn group_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_ip_address(input.into());
            self
        }
        /// <p>The IP address assigned to the transit gateway multicast group.</p>
        pub fn set_group_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_group_ip_address(input);
            self
        }
        /// Appends an item to `NetworkInterfaceIds`.
        ///
        /// To override the contents of this collection use [`set_network_interface_ids`](Self::set_network_interface_ids).
        ///
        /// <p>The group members' network interface IDs to register with the transit gateway multicast group.</p>
        pub fn network_interface_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_ids(input.into());
            self
        }
        /// <p>The group members' network interface IDs to register with the transit gateway multicast group.</p>
        pub fn set_network_interface_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RegisterTransitGatewayMulticastGroupSources`.
    ///
    /// <p>Registers sources (network interfaces) with the specified transit gateway multicast group.</p>
    /// <p>A multicast source is a network interface attached to a supported instance that sends multicast traffic. For information about supported instances, see <a href="https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-limits.html#multicast-limits">Multicast Considerations</a> in <i>Amazon VPC Transit Gateways</i>.</p>
    /// <p>After you add the source, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html">SearchTransitGatewayMulticastGroups</a> to verify that the source was added to the multicast group.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RegisterTransitGatewayMulticastGroupSources {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::register_transit_gateway_multicast_group_sources_input::Builder,
    }
    impl RegisterTransitGatewayMulticastGroupSources {
        /// Creates a new `RegisterTransitGatewayMulticastGroupSources`.
        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::RegisterTransitGatewayMulticastGroupSources,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::RegisterTransitGatewayMulticastGroupSourcesError,
            >,
        > {
            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::RegisterTransitGatewayMulticastGroupSourcesOutput,
            aws_smithy_http::result::SdkError<
                crate::error::RegisterTransitGatewayMulticastGroupSourcesError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>The IP address assigned to the transit gateway multicast group.</p>
        pub fn group_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_ip_address(input.into());
            self
        }
        /// <p>The IP address assigned to the transit gateway multicast group.</p>
        pub fn set_group_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_group_ip_address(input);
            self
        }
        /// Appends an item to `NetworkInterfaceIds`.
        ///
        /// To override the contents of this collection use [`set_network_interface_ids`](Self::set_network_interface_ids).
        ///
        /// <p>The group sources' network interface IDs to register with the transit gateway multicast group.</p>
        pub fn network_interface_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_ids(input.into());
            self
        }
        /// <p>The group sources' network interface IDs to register with the transit gateway multicast group.</p>
        pub fn set_network_interface_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RejectTransitGatewayMulticastDomainAssociations`.
    ///
    /// <p>Rejects a request to associate cross-account subnets with a transit gateway multicast domain.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RejectTransitGatewayMulticastDomainAssociations {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reject_transit_gateway_multicast_domain_associations_input::Builder,
    }
    impl RejectTransitGatewayMulticastDomainAssociations {
        /// Creates a new `RejectTransitGatewayMulticastDomainAssociations`.
        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::RejectTransitGatewayMulticastDomainAssociations,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::RejectTransitGatewayMulticastDomainAssociationsError,
            >,
        > {
            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::RejectTransitGatewayMulticastDomainAssociationsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::RejectTransitGatewayMulticastDomainAssociationsError,
            >,
        > {
            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 transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// <p>The ID of the transit gateway attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// Appends an item to `SubnetIds`.
        ///
        /// To override the contents of this collection use [`set_subnet_ids`](Self::set_subnet_ids).
        ///
        /// <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
        pub fn subnet_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_ids(input.into());
            self
        }
        /// <p>The IDs of the subnets to associate with the transit gateway multicast domain.</p>
        pub fn set_subnet_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_subnet_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RejectTransitGatewayPeeringAttachment`.
    ///
    /// <p>Rejects a transit gateway peering attachment request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RejectTransitGatewayPeeringAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reject_transit_gateway_peering_attachment_input::Builder,
    }
    impl RejectTransitGatewayPeeringAttachment {
        /// Creates a new `RejectTransitGatewayPeeringAttachment`.
        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::RejectTransitGatewayPeeringAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::RejectTransitGatewayPeeringAttachmentError,
            >,
        > {
            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::RejectTransitGatewayPeeringAttachmentOutput,
            aws_smithy_http::result::SdkError<
                crate::error::RejectTransitGatewayPeeringAttachmentError,
            >,
        > {
            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 transit gateway peering attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway peering attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RejectTransitGatewayVpcAttachment`.
    ///
    /// <p>Rejects a request to attach a VPC to a transit gateway.</p>
    /// <p>The VPC attachment must be in the <code>pendingAcceptance</code> state. Use <code>DescribeTransitGatewayVpcAttachments</code> to view your pending VPC attachment requests. Use <code>AcceptTransitGatewayVpcAttachment</code> to accept a VPC attachment request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RejectTransitGatewayVpcAttachment {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reject_transit_gateway_vpc_attachment_input::Builder,
    }
    impl RejectTransitGatewayVpcAttachment {
        /// Creates a new `RejectTransitGatewayVpcAttachment`.
        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::RejectTransitGatewayVpcAttachment,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RejectTransitGatewayVpcAttachmentError>,
        > {
            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::RejectTransitGatewayVpcAttachmentOutput,
            aws_smithy_http::result::SdkError<crate::error::RejectTransitGatewayVpcAttachmentError>,
        > {
            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 attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RejectVpcEndpointConnections`.
    ///
    /// <p>Rejects VPC endpoint connection requests to your VPC endpoint service.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RejectVpcEndpointConnections {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reject_vpc_endpoint_connections_input::Builder,
    }
    impl RejectVpcEndpointConnections {
        /// Creates a new `RejectVpcEndpointConnections`.
        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::RejectVpcEndpointConnections,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RejectVpcEndpointConnectionsError>,
        > {
            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::RejectVpcEndpointConnectionsOutput,
            aws_smithy_http::result::SdkError<crate::error::RejectVpcEndpointConnectionsError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the service.</p>
        pub fn service_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_id(input.into());
            self
        }
        /// <p>The ID of the service.</p>
        pub fn set_service_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_id(input);
            self
        }
        /// Appends an item to `VpcEndpointIds`.
        ///
        /// To override the contents of this collection use [`set_vpc_endpoint_ids`](Self::set_vpc_endpoint_ids).
        ///
        /// <p>The IDs of the VPC endpoints.</p>
        pub fn vpc_endpoint_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_endpoint_ids(input.into());
            self
        }
        /// <p>The IDs of the VPC endpoints.</p>
        pub fn set_vpc_endpoint_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RejectVpcPeeringConnection`.
    ///
    /// <p>Rejects a VPC peering connection request. The VPC peering connection must be in the <code>pending-acceptance</code> state. Use the <code>DescribeVpcPeeringConnections</code> request to view your outstanding VPC peering connection requests. To delete an active VPC peering connection, or to delete a VPC peering connection request that you initiated, use <code>DeleteVpcPeeringConnection</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RejectVpcPeeringConnection {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reject_vpc_peering_connection_input::Builder,
    }
    impl RejectVpcPeeringConnection {
        /// Creates a new `RejectVpcPeeringConnection`.
        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::RejectVpcPeeringConnection,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RejectVpcPeeringConnectionError>,
        > {
            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::RejectVpcPeeringConnectionOutput,
            aws_smithy_http::result::SdkError<crate::error::RejectVpcPeeringConnectionError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the VPC peering connection.</p>
        pub fn vpc_peering_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_peering_connection_id(input.into());
            self
        }
        /// <p>The ID of the VPC peering connection.</p>
        pub fn set_vpc_peering_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_peering_connection_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReleaseAddress`.
    ///
    /// <p>Releases the specified Elastic IP address.</p>
    /// <p>[EC2-Classic, default VPC] Releasing an Elastic IP address automatically disassociates it from any instance that it's associated with. To disassociate an Elastic IP address without releasing it, use <code>DisassociateAddress</code>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    /// <p>[Nondefault VPC] You must use <code>DisassociateAddress</code> to disassociate the Elastic IP address before you can release it. Otherwise, Amazon EC2 returns an error (<code>InvalidIPAddress.InUse</code>).</p>
    /// <p>After releasing an Elastic IP address, it is released to the IP address pool. Be sure to update your DNS records and any servers or devices that communicate with the address. If you attempt to release an Elastic IP address that you already released, you'll get an <code>AuthFailure</code> error if the address is already allocated to another Amazon Web Services account.</p>
    /// <p>[EC2-VPC] After you release an Elastic IP address for use in a VPC, you might be able to recover it. For more information, see <code>AllocateAddress</code>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReleaseAddress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::release_address_input::Builder,
    }
    impl ReleaseAddress {
        /// Creates a new `ReleaseAddress`.
        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::ReleaseAddress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReleaseAddressError>,
        > {
            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::ReleaseAddressOutput,
            aws_smithy_http::result::SdkError<crate::error::ReleaseAddressError>,
        > {
            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>[EC2-VPC] The allocation ID. Required for EC2-VPC.</p>
        pub fn allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_id(input.into());
            self
        }
        /// <p>[EC2-VPC] The allocation ID. Required for EC2-VPC.</p>
        pub fn set_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_allocation_id(input);
            self
        }
        /// <p>[EC2-Classic] The Elastic IP address. Required for EC2-Classic.</p>
        pub fn public_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ip(input.into());
            self
        }
        /// <p>[EC2-Classic] The Elastic IP address. Required for EC2-Classic.</p>
        pub fn set_public_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_public_ip(input);
            self
        }
        /// <p>The set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses.</p>
        /// <p>If you provide an incorrect network border group, you receive an <code>InvalidAddress.NotFound</code> error.</p>
        /// <p>You cannot use a network border group with EC2 Classic. If you attempt this operation on EC2 classic, you receive an <code>InvalidParameterCombination</code> error.</p>
        pub fn network_border_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_border_group(input.into());
            self
        }
        /// <p>The set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses.</p>
        /// <p>If you provide an incorrect network border group, you receive an <code>InvalidAddress.NotFound</code> error.</p>
        /// <p>You cannot use a network border group with EC2 Classic. If you attempt this operation on EC2 classic, you receive an <code>InvalidParameterCombination</code> error.</p>
        pub fn set_network_border_group(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_border_group(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReleaseHosts`.
    ///
    /// <p>When you no longer want to use an On-Demand Dedicated Host it can be released. On-Demand billing is stopped and the host goes into <code>released</code> state. The host ID of Dedicated Hosts that have been released can no longer be specified in another request, for example, to modify the host. You must stop or terminate all instances on a host before it can be released.</p>
    /// <p>When Dedicated Hosts are released, it may take some time for them to stop counting toward your limit and you may receive capacity errors when trying to allocate new Dedicated Hosts. Wait a few minutes and then try again.</p>
    /// <p>Released hosts still appear in a <code>DescribeHosts</code> response.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReleaseHosts {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::release_hosts_input::Builder,
    }
    impl ReleaseHosts {
        /// Creates a new `ReleaseHosts`.
        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::ReleaseHosts,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReleaseHostsError>,
        > {
            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::ReleaseHostsOutput,
            aws_smithy_http::result::SdkError<crate::error::ReleaseHostsError>,
        > {
            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 `HostIds`.
        ///
        /// To override the contents of this collection use [`set_host_ids`](Self::set_host_ids).
        ///
        /// <p>The IDs of the Dedicated Hosts to release.</p>
        pub fn host_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.host_ids(input.into());
            self
        }
        /// <p>The IDs of the Dedicated Hosts to release.</p>
        pub fn set_host_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_host_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReleaseIpamPoolAllocation`.
    ///
    /// <p>Release an allocation within an IPAM pool. You can only use this action to release manual allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html">ModifyIpamResourceCidr</a>. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/ipam/release-pool-alloc-ipam.html">Release an allocation</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReleaseIpamPoolAllocation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::release_ipam_pool_allocation_input::Builder,
    }
    impl ReleaseIpamPoolAllocation {
        /// Creates a new `ReleaseIpamPoolAllocation`.
        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::ReleaseIpamPoolAllocation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReleaseIpamPoolAllocationError>,
        > {
            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::ReleaseIpamPoolAllocationOutput,
            aws_smithy_http::result::SdkError<crate::error::ReleaseIpamPoolAllocationError>,
        > {
            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>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the IPAM pool which contains the allocation you want to release.</p>
        pub fn ipam_pool_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_id(input.into());
            self
        }
        /// <p>The ID of the IPAM pool which contains the allocation you want to release.</p>
        pub fn set_ipam_pool_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ipam_pool_id(input);
            self
        }
        /// <p>The CIDR of the allocation you want to release.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The CIDR of the allocation you want to release.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>The ID of the allocation.</p>
        pub fn ipam_pool_allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipam_pool_allocation_id(input.into());
            self
        }
        /// <p>The ID of the allocation.</p>
        pub fn set_ipam_pool_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipam_pool_allocation_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReplaceIamInstanceProfileAssociation`.
    ///
    /// <p>Replaces an IAM instance profile for the specified running instance. You can use this action to change the IAM instance profile that's associated with an instance without having to disassociate the existing IAM instance profile first.</p>
    /// <p>Use <code>DescribeIamInstanceProfileAssociations</code> to get the association ID.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReplaceIamInstanceProfileAssociation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::replace_iam_instance_profile_association_input::Builder,
    }
    impl ReplaceIamInstanceProfileAssociation {
        /// Creates a new `ReplaceIamInstanceProfileAssociation`.
        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::ReplaceIamInstanceProfileAssociation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::ReplaceIamInstanceProfileAssociationError,
            >,
        > {
            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::ReplaceIamInstanceProfileAssociationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::ReplaceIamInstanceProfileAssociationError,
            >,
        > {
            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 IAM instance profile.</p>
        pub fn iam_instance_profile(
            mut self,
            input: crate::model::IamInstanceProfileSpecification,
        ) -> Self {
            self.inner = self.inner.iam_instance_profile(input);
            self
        }
        /// <p>The IAM instance profile.</p>
        pub fn set_iam_instance_profile(
            mut self,
            input: std::option::Option<crate::model::IamInstanceProfileSpecification>,
        ) -> Self {
            self.inner = self.inner.set_iam_instance_profile(input);
            self
        }
        /// <p>The ID of the existing IAM instance profile association.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The ID of the existing IAM instance profile association.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReplaceNetworkAclAssociation`.
    ///
    /// <p>Changes which network ACL a subnet is associated with. By default when you create a subnet, it's automatically associated with the default network ACL. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html">Network ACLs</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    /// <p>This is an idempotent operation.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReplaceNetworkAclAssociation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::replace_network_acl_association_input::Builder,
    }
    impl ReplaceNetworkAclAssociation {
        /// Creates a new `ReplaceNetworkAclAssociation`.
        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::ReplaceNetworkAclAssociation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReplaceNetworkAclAssociationError>,
        > {
            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::ReplaceNetworkAclAssociationOutput,
            aws_smithy_http::result::SdkError<crate::error::ReplaceNetworkAclAssociationError>,
        > {
            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 current association between the original network ACL and the subnet.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The ID of the current association between the original network ACL and the subnet.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the new network ACL to associate with the subnet.</p>
        pub fn network_acl_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_acl_id(input.into());
            self
        }
        /// <p>The ID of the new network ACL to associate with the subnet.</p>
        pub fn set_network_acl_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_acl_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReplaceNetworkAclEntry`.
    ///
    /// <p>Replaces an entry (rule) in a network ACL. For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html">Network ACLs</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReplaceNetworkAclEntry {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::replace_network_acl_entry_input::Builder,
    }
    impl ReplaceNetworkAclEntry {
        /// Creates a new `ReplaceNetworkAclEntry`.
        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::ReplaceNetworkAclEntry,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReplaceNetworkAclEntryError>,
        > {
            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::ReplaceNetworkAclEntryOutput,
            aws_smithy_http::result::SdkError<crate::error::ReplaceNetworkAclEntryError>,
        > {
            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 IPv4 network range to allow or deny, in CIDR notation (for example <code>172.16.0.0/24</code>).</p>
        pub fn cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_block(input.into());
            self
        }
        /// <p>The IPv4 network range to allow or deny, in CIDR notation (for example <code>172.16.0.0/24</code>).</p>
        pub fn set_cidr_block(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_block(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether to replace the egress rule.</p>
        /// <p>Default: If no value is specified, we replace the ingress rule.</p>
        pub fn egress(mut self, input: bool) -> Self {
            self.inner = self.inner.egress(input);
            self
        }
        /// <p>Indicates whether to replace the egress rule.</p>
        /// <p>Default: If no value is specified, we replace the ingress rule.</p>
        pub fn set_egress(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_egress(input);
            self
        }
        /// <p>ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.</p>
        pub fn icmp_type_code(mut self, input: crate::model::IcmpTypeCode) -> Self {
            self.inner = self.inner.icmp_type_code(input);
            self
        }
        /// <p>ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.</p>
        pub fn set_icmp_type_code(
            mut self,
            input: std::option::Option<crate::model::IcmpTypeCode>,
        ) -> Self {
            self.inner = self.inner.set_icmp_type_code(input);
            self
        }
        /// <p>The IPv6 network range to allow or deny, in CIDR notation (for example <code>2001:bd8:1234:1a00::/64</code>).</p>
        pub fn ipv6_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_cidr_block(input.into());
            self
        }
        /// <p>The IPv6 network range to allow or deny, in CIDR notation (for example <code>2001:bd8:1234:1a00::/64</code>).</p>
        pub fn set_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_cidr_block(input);
            self
        }
        /// <p>The ID of the ACL.</p>
        pub fn network_acl_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_acl_id(input.into());
            self
        }
        /// <p>The ID of the ACL.</p>
        pub fn set_network_acl_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_acl_id(input);
            self
        }
        /// <p>TCP or UDP protocols: The range of ports the rule applies to. Required if specifying protocol 6 (TCP) or 17 (UDP).</p>
        pub fn port_range(mut self, input: crate::model::PortRange) -> Self {
            self.inner = self.inner.port_range(input);
            self
        }
        /// <p>TCP or UDP protocols: The range of ports the rule applies to. Required if specifying protocol 6 (TCP) or 17 (UDP).</p>
        pub fn set_port_range(
            mut self,
            input: std::option::Option<crate::model::PortRange>,
        ) -> Self {
            self.inner = self.inner.set_port_range(input);
            self
        }
        /// <p>The protocol number. A value of "-1" means all protocols. If you specify "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), traffic on all ports is allowed, regardless of any ports or ICMP types or codes that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.</p>
        pub fn protocol(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.protocol(input.into());
            self
        }
        /// <p>The protocol number. A value of "-1" means all protocols. If you specify "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), traffic on all ports is allowed, regardless of any ports or ICMP types or codes that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol "58" (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.</p>
        pub fn set_protocol(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_protocol(input);
            self
        }
        /// <p>Indicates whether to allow or deny the traffic that matches the rule.</p>
        pub fn rule_action(mut self, input: crate::model::RuleAction) -> Self {
            self.inner = self.inner.rule_action(input);
            self
        }
        /// <p>Indicates whether to allow or deny the traffic that matches the rule.</p>
        pub fn set_rule_action(
            mut self,
            input: std::option::Option<crate::model::RuleAction>,
        ) -> Self {
            self.inner = self.inner.set_rule_action(input);
            self
        }
        /// <p>The rule number of the entry to replace.</p>
        pub fn rule_number(mut self, input: i32) -> Self {
            self.inner = self.inner.rule_number(input);
            self
        }
        /// <p>The rule number of the entry to replace.</p>
        pub fn set_rule_number(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_rule_number(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReplaceRoute`.
    ///
    /// <p>Replaces an existing route within a route table in a VPC.</p>
    /// <p>You must specify either a destination CIDR block or a prefix list ID. You must also specify exactly one of the resources from the parameter list, or reset the local route to its default target.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html">Route tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReplaceRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::replace_route_input::Builder,
    }
    impl ReplaceRoute {
        /// Creates a new `ReplaceRoute`.
        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::ReplaceRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReplaceRouteError>,
        > {
            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::ReplaceRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::ReplaceRouteError>,
        > {
            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 IPv4 CIDR address block used for the destination match. The value that you provide must match the CIDR of an existing route in the table.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The IPv4 CIDR address block used for the destination match. The value that you provide must match the CIDR of an existing route in the table.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The IPv6 CIDR address block used for the destination match. The value that you provide must match the CIDR of an existing route in the table.</p>
        pub fn destination_ipv6_cidr_block(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.destination_ipv6_cidr_block(input.into());
            self
        }
        /// <p>The IPv6 CIDR address block used for the destination match. The value that you provide must match the CIDR of an existing route in the table.</p>
        pub fn set_destination_ipv6_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_ipv6_cidr_block(input);
            self
        }
        /// <p>The ID of the prefix list for the route.</p>
        pub fn destination_prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list for the route.</p>
        pub fn set_destination_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_prefix_list_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints only.</p>
        pub fn vpc_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_endpoint_id(input.into());
            self
        }
        /// <p>The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints only.</p>
        pub fn set_vpc_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_endpoint_id(input);
            self
        }
        /// <p>[IPv6 traffic only] The ID of an egress-only internet gateway.</p>
        pub fn egress_only_internet_gateway_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.egress_only_internet_gateway_id(input.into());
            self
        }
        /// <p>[IPv6 traffic only] The ID of an egress-only internet gateway.</p>
        pub fn set_egress_only_internet_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_egress_only_internet_gateway_id(input);
            self
        }
        /// <p>The ID of an internet gateway or virtual private gateway.</p>
        pub fn gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.gateway_id(input.into());
            self
        }
        /// <p>The ID of an internet gateway or virtual private gateway.</p>
        pub fn set_gateway_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_gateway_id(input);
            self
        }
        /// <p>The ID of a NAT instance in your VPC.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of a NAT instance in your VPC.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>Specifies whether to reset the local route to its default target (<code>local</code>).</p>
        pub fn local_target(mut self, input: bool) -> Self {
            self.inner = self.inner.local_target(input);
            self
        }
        /// <p>Specifies whether to reset the local route to its default target (<code>local</code>).</p>
        pub fn set_local_target(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_local_target(input);
            self
        }
        /// <p>[IPv4 traffic only] The ID of a NAT gateway.</p>
        pub fn nat_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.nat_gateway_id(input.into());
            self
        }
        /// <p>[IPv4 traffic only] The ID of a NAT gateway.</p>
        pub fn set_nat_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_nat_gateway_id(input);
            self
        }
        /// <p>The ID of a transit gateway.</p>
        pub fn transit_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.transit_gateway_id(input.into());
            self
        }
        /// <p>The ID of a transit gateway.</p>
        pub fn set_transit_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_id(input);
            self
        }
        /// <p>The ID of the local gateway.</p>
        pub fn local_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.local_gateway_id(input.into());
            self
        }
        /// <p>The ID of the local gateway.</p>
        pub fn set_local_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_id(input);
            self
        }
        /// <p>[IPv4 traffic only] The ID of a carrier gateway.</p>
        pub fn carrier_gateway_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.carrier_gateway_id(input.into());
            self
        }
        /// <p>[IPv4 traffic only] The ID of a carrier gateway.</p>
        pub fn set_carrier_gateway_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_carrier_gateway_id(input);
            self
        }
        /// <p>The ID of a network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of a network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn route_table_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn set_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_route_table_id(input);
            self
        }
        /// <p>The ID of a VPC peering connection.</p>
        pub fn vpc_peering_connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.vpc_peering_connection_id(input.into());
            self
        }
        /// <p>The ID of a VPC peering connection.</p>
        pub fn set_vpc_peering_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_vpc_peering_connection_id(input);
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the core network.</p>
        pub fn core_network_arn(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.core_network_arn(input.into());
            self
        }
        /// <p>The Amazon Resource Name (ARN) of the core network.</p>
        pub fn set_core_network_arn(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_core_network_arn(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReplaceRouteTableAssociation`.
    ///
    /// <p>Changes the route table associated with a given subnet, internet gateway, or virtual private gateway in a VPC. After the operation completes, the subnet or gateway uses the routes in the new route table. For more information about route tables, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html">Route tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
    /// <p>You can also use this operation to change which table is the main route table in the VPC. Specify the main route table's association ID and the route table ID of the new main route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReplaceRouteTableAssociation {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::replace_route_table_association_input::Builder,
    }
    impl ReplaceRouteTableAssociation {
        /// Creates a new `ReplaceRouteTableAssociation`.
        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::ReplaceRouteTableAssociation,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReplaceRouteTableAssociationError>,
        > {
            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::ReplaceRouteTableAssociationOutput,
            aws_smithy_http::result::SdkError<crate::error::ReplaceRouteTableAssociationError>,
        > {
            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 association ID.</p>
        pub fn association_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.association_id(input.into());
            self
        }
        /// <p>The association ID.</p>
        pub fn set_association_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_association_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the new route table to associate with the subnet.</p>
        pub fn route_table_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.route_table_id(input.into());
            self
        }
        /// <p>The ID of the new route table to associate with the subnet.</p>
        pub fn set_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_route_table_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReplaceTransitGatewayRoute`.
    ///
    /// <p>Replaces the specified route in the specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReplaceTransitGatewayRoute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::replace_transit_gateway_route_input::Builder,
    }
    impl ReplaceTransitGatewayRoute {
        /// Creates a new `ReplaceTransitGatewayRoute`.
        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::ReplaceTransitGatewayRoute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReplaceTransitGatewayRouteError>,
        > {
            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::ReplaceTransitGatewayRouteOutput,
            aws_smithy_http::result::SdkError<crate::error::ReplaceTransitGatewayRouteError>,
        > {
            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 CIDR range used for the destination match. Routing decisions are based on the most specific match.</p>
        pub fn destination_cidr_block(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.destination_cidr_block(input.into());
            self
        }
        /// <p>The CIDR range used for the destination match. Routing decisions are based on the most specific match.</p>
        pub fn set_destination_cidr_block(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_destination_cidr_block(input);
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn transit_gateway_attachment_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_attachment_id(input.into());
            self
        }
        /// <p>The ID of the attachment.</p>
        pub fn set_transit_gateway_attachment_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_attachment_id(input);
            self
        }
        /// <p>Indicates whether traffic matching this route is to be dropped.</p>
        pub fn blackhole(mut self, input: bool) -> Self {
            self.inner = self.inner.blackhole(input);
            self
        }
        /// <p>Indicates whether traffic matching this route is to be dropped.</p>
        pub fn set_blackhole(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_blackhole(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ReportInstanceStatus`.
    ///
    /// <p>Submits feedback about the status of an instance. The instance must be in the <code>running</code> state. If your experience with the instance differs from the instance status returned by <code>DescribeInstanceStatus</code>, use <code>ReportInstanceStatus</code> to report your experience with the instance. Amazon EC2 collects this information to improve the accuracy of status checks.</p>
    /// <p>Use of this action does not change the value returned by <code>DescribeInstanceStatus</code>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ReportInstanceStatus {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::report_instance_status_input::Builder,
    }
    impl ReportInstanceStatus {
        /// Creates a new `ReportInstanceStatus`.
        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::ReportInstanceStatus,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ReportInstanceStatusError>,
        > {
            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::ReportInstanceStatusOutput,
            aws_smithy_http::result::SdkError<crate::error::ReportInstanceStatusError>,
        > {
            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>Descriptive text about the health state of your instance.</p>
        pub fn description(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.description(input.into());
            self
        }
        /// <p>Descriptive text about the health state of your instance.</p>
        pub fn set_description(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_description(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The time at which the reported instance health state ended.</p>
        pub fn end_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.end_time(input);
            self
        }
        /// <p>The time at which the reported instance health state ended.</p>
        pub fn set_end_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_end_time(input);
            self
        }
        /// Appends an item to `Instances`.
        ///
        /// To override the contents of this collection use [`set_instances`](Self::set_instances).
        ///
        /// <p>The instances.</p>
        pub fn instances(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instances(input.into());
            self
        }
        /// <p>The instances.</p>
        pub fn set_instances(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instances(input);
            self
        }
        /// Appends an item to `ReasonCodes`.
        ///
        /// To override the contents of this collection use [`set_reason_codes`](Self::set_reason_codes).
        ///
        /// <p>The reason codes that describe the health state of your instance.</p>
        /// <ul>
        /// <li> <p> <code>instance-stuck-in-state</code>: My instance is stuck in a state.</p> </li>
        /// <li> <p> <code>unresponsive</code>: My instance is unresponsive.</p> </li>
        /// <li> <p> <code>not-accepting-credentials</code>: My instance is not accepting my credentials.</p> </li>
        /// <li> <p> <code>password-not-available</code>: A password is not available for my instance.</p> </li>
        /// <li> <p> <code>performance-network</code>: My instance is experiencing performance problems that I believe are network related.</p> </li>
        /// <li> <p> <code>performance-instance-store</code>: My instance is experiencing performance problems that I believe are related to the instance stores.</p> </li>
        /// <li> <p> <code>performance-ebs-volume</code>: My instance is experiencing performance problems that I believe are related to an EBS volume.</p> </li>
        /// <li> <p> <code>performance-other</code>: My instance is experiencing performance problems.</p> </li>
        /// <li> <p> <code>other</code>: [explain using the description parameter]</p> </li>
        /// </ul>
        pub fn reason_codes(mut self, input: crate::model::ReportInstanceReasonCodes) -> Self {
            self.inner = self.inner.reason_codes(input);
            self
        }
        /// <p>The reason codes that describe the health state of your instance.</p>
        /// <ul>
        /// <li> <p> <code>instance-stuck-in-state</code>: My instance is stuck in a state.</p> </li>
        /// <li> <p> <code>unresponsive</code>: My instance is unresponsive.</p> </li>
        /// <li> <p> <code>not-accepting-credentials</code>: My instance is not accepting my credentials.</p> </li>
        /// <li> <p> <code>password-not-available</code>: A password is not available for my instance.</p> </li>
        /// <li> <p> <code>performance-network</code>: My instance is experiencing performance problems that I believe are network related.</p> </li>
        /// <li> <p> <code>performance-instance-store</code>: My instance is experiencing performance problems that I believe are related to the instance stores.</p> </li>
        /// <li> <p> <code>performance-ebs-volume</code>: My instance is experiencing performance problems that I believe are related to an EBS volume.</p> </li>
        /// <li> <p> <code>performance-other</code>: My instance is experiencing performance problems.</p> </li>
        /// <li> <p> <code>other</code>: [explain using the description parameter]</p> </li>
        /// </ul>
        pub fn set_reason_codes(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ReportInstanceReasonCodes>>,
        ) -> Self {
            self.inner = self.inner.set_reason_codes(input);
            self
        }
        /// <p>The time at which the reported instance health state began.</p>
        pub fn start_time(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.start_time(input);
            self
        }
        /// <p>The time at which the reported instance health state began.</p>
        pub fn set_start_time(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_start_time(input);
            self
        }
        /// <p>The status of all instances listed.</p>
        pub fn status(mut self, input: crate::model::ReportStatusType) -> Self {
            self.inner = self.inner.status(input);
            self
        }
        /// <p>The status of all instances listed.</p>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::ReportStatusType>,
        ) -> Self {
            self.inner = self.inner.set_status(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RequestSpotFleet`.
    ///
    /// <p>Creates a Spot Fleet request.</p>
    /// <p>The Spot Fleet request specifies the total target capacity and the On-Demand target capacity. Amazon EC2 calculates the difference between the total capacity and On-Demand capacity, and launches the difference as Spot capacity.</p>
    /// <p>You can submit a single request that includes multiple launch specifications that vary by instance type, AMI, Availability Zone, or subnet.</p>
    /// <p>By default, the Spot Fleet requests Spot Instances in the Spot Instance pool where the price per unit is the lowest. Each launch specification can include its own instance weighting that reflects the value of the instance type to your application workload.</p>
    /// <p>Alternatively, you can specify that the Spot Fleet distribute the target capacity across the Spot pools included in its launch specifications. By ensuring that the Spot Instances in your Spot Fleet are in different Spot pools, you can improve the availability of your fleet.</p>
    /// <p>You can specify tags for the Spot Fleet request and instances launched by the fleet. You cannot tag other resource types in a Spot Fleet request because only the <code>spot-fleet-request</code> and <code>instance</code> resource types are supported.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html">Spot Fleet requests</a> in the <i>Amazon EC2 User Guide</i>.</p> <important>
    /// <p>We strongly discourage using the RequestSpotFleet API because it is a legacy API with no planned investment. For options for requesting Spot Instances, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#which-spot-request-method-to-use">Which is the best Spot request method to use?</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// </important>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RequestSpotFleet {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::request_spot_fleet_input::Builder,
    }
    impl RequestSpotFleet {
        /// Creates a new `RequestSpotFleet`.
        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::RequestSpotFleet,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RequestSpotFleetError>,
        > {
            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::RequestSpotFleetOutput,
            aws_smithy_http::result::SdkError<crate::error::RequestSpotFleetError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The configuration for the Spot Fleet request.</p>
        pub fn spot_fleet_request_config(
            mut self,
            input: crate::model::SpotFleetRequestConfigData,
        ) -> Self {
            self.inner = self.inner.spot_fleet_request_config(input);
            self
        }
        /// <p>The configuration for the Spot Fleet request.</p>
        pub fn set_spot_fleet_request_config(
            mut self,
            input: std::option::Option<crate::model::SpotFleetRequestConfigData>,
        ) -> Self {
            self.inner = self.inner.set_spot_fleet_request_config(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RequestSpotInstances`.
    ///
    /// <p>Creates a Spot Instance request.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html">Spot Instance requests</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <important>
    /// <p>We strongly discourage using the RequestSpotInstances API because it is a legacy API with no planned investment. For options for requesting Spot Instances, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#which-spot-request-method-to-use">Which is the best Spot request method to use?</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>
    /// </important> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RequestSpotInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::request_spot_instances_input::Builder,
    }
    impl RequestSpotInstances {
        /// Creates a new `RequestSpotInstances`.
        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::RequestSpotInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RequestSpotInstancesError>,
        > {
            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::RequestSpotInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::RequestSpotInstancesError>,
        > {
            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 user-specified name for a logical grouping of requests.</p>
        /// <p>When you specify an Availability Zone group in a Spot Instance request, all Spot Instances in the request are launched in the same Availability Zone. Instance proximity is maintained with this parameter, but the choice of Availability Zone is not. The group applies only to requests for Spot Instances of the same instance type. Any additional Spot Instance requests that are specified with the same Availability Zone group name are launched in that same Availability Zone, as long as at least one instance from the group is still active.</p>
        /// <p>If there is no active instance running in the Availability Zone group that you specify for a new Spot Instance request (all instances are terminated, the request is expired, or the maximum price you specified falls below current Spot price), then Amazon EC2 launches the instance in any Availability Zone where the constraint can be met. Consequently, the subsequent set of Spot Instances could be placed in a different zone from the original request, even if you specified the same Availability Zone group.</p>
        /// <p>Default: Instances are launched in any available Availability Zone.</p>
        pub fn availability_zone_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.availability_zone_group(input.into());
            self
        }
        /// <p>The user-specified name for a logical grouping of requests.</p>
        /// <p>When you specify an Availability Zone group in a Spot Instance request, all Spot Instances in the request are launched in the same Availability Zone. Instance proximity is maintained with this parameter, but the choice of Availability Zone is not. The group applies only to requests for Spot Instances of the same instance type. Any additional Spot Instance requests that are specified with the same Availability Zone group name are launched in that same Availability Zone, as long as at least one instance from the group is still active.</p>
        /// <p>If there is no active instance running in the Availability Zone group that you specify for a new Spot Instance request (all instances are terminated, the request is expired, or the maximum price you specified falls below current Spot price), then Amazon EC2 launches the instance in any Availability Zone where the constraint can be met. Consequently, the subsequent set of Spot Instances could be placed in a different zone from the original request, even if you specified the same Availability Zone group.</p>
        /// <p>Default: Instances are launched in any available Availability Zone.</p>
        pub fn set_availability_zone_group(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_availability_zone_group(input);
            self
        }
        /// <p>Deprecated.</p>
        pub fn block_duration_minutes(mut self, input: i32) -> Self {
            self.inner = self.inner.block_duration_minutes(input);
            self
        }
        /// <p>Deprecated.</p>
        pub fn set_block_duration_minutes(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_block_duration_minutes(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html">How to Ensure Idempotency</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The maximum number of Spot Instances to launch.</p>
        /// <p>Default: 1</p>
        pub fn instance_count(mut self, input: i32) -> Self {
            self.inner = self.inner.instance_count(input);
            self
        }
        /// <p>The maximum number of Spot Instances to launch.</p>
        /// <p>Default: 1</p>
        pub fn set_instance_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_instance_count(input);
            self
        }
        /// <p>The instance launch group. Launch groups are Spot Instances that launch together and terminate together.</p>
        /// <p>Default: Instances are launched and terminated individually</p>
        pub fn launch_group(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.launch_group(input.into());
            self
        }
        /// <p>The instance launch group. Launch groups are Spot Instances that launch together and terminate together.</p>
        /// <p>Default: Instances are launched and terminated individually</p>
        pub fn set_launch_group(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_launch_group(input);
            self
        }
        /// <p>The launch specification.</p>
        pub fn launch_specification(
            mut self,
            input: crate::model::RequestSpotLaunchSpecification,
        ) -> Self {
            self.inner = self.inner.launch_specification(input);
            self
        }
        /// <p>The launch specification.</p>
        pub fn set_launch_specification(
            mut self,
            input: std::option::Option<crate::model::RequestSpotLaunchSpecification>,
        ) -> Self {
            self.inner = self.inner.set_launch_specification(input);
            self
        }
        /// <p>The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price.</p> <important>
        /// <p>If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter.</p>
        /// </important>
        pub fn spot_price(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.spot_price(input.into());
            self
        }
        /// <p>The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price.</p> <important>
        /// <p>If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter.</p>
        /// </important>
        pub fn set_spot_price(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_spot_price(input);
            self
        }
        /// <p>The Spot Instance request type.</p>
        /// <p>Default: <code>one-time</code> </p>
        pub fn r#type(mut self, input: crate::model::SpotInstanceType) -> Self {
            self.inner = self.inner.r#type(input);
            self
        }
        /// <p>The Spot Instance request type.</p>
        /// <p>Default: <code>one-time</code> </p>
        pub fn set_type(
            mut self,
            input: std::option::Option<crate::model::SpotInstanceType>,
        ) -> Self {
            self.inner = self.inner.set_type(input);
            self
        }
        /// <p>The start date of the request. If this is a one-time request, the request becomes active at this date and time and remains active until all instances launch, the request expires, or the request is canceled. If the request is persistent, the request becomes active at this date and time and remains active until it expires or is canceled.</p>
        /// <p>The specified start date and time cannot be equal to the current date and time. You must specify a start date and time that occurs after the current date and time.</p>
        pub fn valid_from(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.valid_from(input);
            self
        }
        /// <p>The start date of the request. If this is a one-time request, the request becomes active at this date and time and remains active until all instances launch, the request expires, or the request is canceled. If the request is persistent, the request becomes active at this date and time and remains active until it expires or is canceled.</p>
        /// <p>The specified start date and time cannot be equal to the current date and time. You must specify a start date and time that occurs after the current date and time.</p>
        pub fn set_valid_from(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_valid_from(input);
            self
        }
        /// <p>The end date of the request, in UTC format (<i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        /// <ul>
        /// <li> <p>For a persistent request, the request remains active until the <code>ValidUntil</code> date and time is reached. Otherwise, the request remains active until you cancel it. </p> </li>
        /// <li> <p>For a one-time request, the request remains active until all instances launch, the request is canceled, or the <code>ValidUntil</code> date and time is reached. By default, the request is valid for 7 days from the date the request was created.</p> </li>
        /// </ul>
        pub fn valid_until(mut self, input: aws_smithy_types::DateTime) -> Self {
            self.inner = self.inner.valid_until(input);
            self
        }
        /// <p>The end date of the request, in UTC format (<i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).</p>
        /// <ul>
        /// <li> <p>For a persistent request, the request remains active until the <code>ValidUntil</code> date and time is reached. Otherwise, the request remains active until you cancel it. </p> </li>
        /// <li> <p>For a one-time request, the request remains active until all instances launch, the request is canceled, or the <code>ValidUntil</code> date and time is reached. By default, the request is valid for 7 days from the date the request was created.</p> </li>
        /// </ul>
        pub fn set_valid_until(
            mut self,
            input: std::option::Option<aws_smithy_types::DateTime>,
        ) -> Self {
            self.inner = self.inner.set_valid_until(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The key-value pair for tagging the Spot Instance request on creation. The value for <code>ResourceType</code> must be <code>spot-instances-request</code>, otherwise the Spot Instance request fails. To tag the Spot Instance request after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>. </p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The key-value pair for tagging the Spot Instance request on creation. The value for <code>ResourceType</code> must be <code>spot-instances-request</code>, otherwise the Spot Instance request fails. To tag the Spot Instance request after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>. </p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>The behavior when a Spot Instance is interrupted. The default is <code>terminate</code>.</p>
        pub fn instance_interruption_behavior(
            mut self,
            input: crate::model::InstanceInterruptionBehavior,
        ) -> Self {
            self.inner = self.inner.instance_interruption_behavior(input);
            self
        }
        /// <p>The behavior when a Spot Instance is interrupted. The default is <code>terminate</code>.</p>
        pub fn set_instance_interruption_behavior(
            mut self,
            input: std::option::Option<crate::model::InstanceInterruptionBehavior>,
        ) -> Self {
            self.inner = self.inner.set_instance_interruption_behavior(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ResetAddressAttribute`.
    ///
    /// <p>Resets the attribute of the specified IP address. For requirements, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS">Using reverse DNS for email applications</a>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ResetAddressAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reset_address_attribute_input::Builder,
    }
    impl ResetAddressAttribute {
        /// Creates a new `ResetAddressAttribute`.
        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::ResetAddressAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ResetAddressAttributeError>,
        > {
            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::ResetAddressAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ResetAddressAttributeError>,
        > {
            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>[EC2-VPC] The allocation ID.</p>
        pub fn allocation_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.allocation_id(input.into());
            self
        }
        /// <p>[EC2-VPC] The allocation ID.</p>
        pub fn set_allocation_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_allocation_id(input);
            self
        }
        /// <p>The attribute of the IP address.</p>
        pub fn attribute(mut self, input: crate::model::AddressAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The attribute of the IP address.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::AddressAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ResetEbsDefaultKmsKeyId`.
    ///
    /// <p>Resets the default KMS key for EBS encryption for your account in this Region to the Amazon Web Services managed KMS key for EBS.</p>
    /// <p>After resetting the default KMS key to the Amazon Web Services managed KMS key, you can continue to encrypt by a customer managed KMS key by specifying it when you create the volume. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html">Amazon EBS encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ResetEbsDefaultKmsKeyId {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reset_ebs_default_kms_key_id_input::Builder,
    }
    impl ResetEbsDefaultKmsKeyId {
        /// Creates a new `ResetEbsDefaultKmsKeyId`.
        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::ResetEbsDefaultKmsKeyId,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ResetEbsDefaultKmsKeyIdError>,
        > {
            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::ResetEbsDefaultKmsKeyIdOutput,
            aws_smithy_http::result::SdkError<crate::error::ResetEbsDefaultKmsKeyIdError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ResetFpgaImageAttribute`.
    ///
    /// <p>Resets the specified attribute of the specified Amazon FPGA Image (AFI) to its default value. You can only reset the load permission attribute.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ResetFpgaImageAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reset_fpga_image_attribute_input::Builder,
    }
    impl ResetFpgaImageAttribute {
        /// Creates a new `ResetFpgaImageAttribute`.
        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::ResetFpgaImageAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ResetFpgaImageAttributeError>,
        > {
            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::ResetFpgaImageAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ResetFpgaImageAttributeError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the AFI.</p>
        pub fn fpga_image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.fpga_image_id(input.into());
            self
        }
        /// <p>The ID of the AFI.</p>
        pub fn set_fpga_image_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_fpga_image_id(input);
            self
        }
        /// <p>The attribute.</p>
        pub fn attribute(mut self, input: crate::model::ResetFpgaImageAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The attribute.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::ResetFpgaImageAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ResetImageAttribute`.
    ///
    /// <p>Resets an attribute of an AMI to its default value.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ResetImageAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reset_image_attribute_input::Builder,
    }
    impl ResetImageAttribute {
        /// Creates a new `ResetImageAttribute`.
        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::ResetImageAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ResetImageAttributeError>,
        > {
            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::ResetImageAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ResetImageAttributeError>,
        > {
            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 attribute to reset (currently you can only reset the launch permission attribute).</p>
        pub fn attribute(mut self, input: crate::model::ResetImageAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The attribute to reset (currently you can only reset the launch permission attribute).</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::ResetImageAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ResetInstanceAttribute`.
    ///
    /// <p>Resets an attribute of an instance to its default value. To reset the <code>kernel</code> or <code>ramdisk</code>, the instance must be in a stopped state. To reset the <code>sourceDestCheck</code>, the instance can be either running or stopped.</p>
    /// <p>The <code>sourceDestCheck</code> attribute controls whether source/destination checking is enabled. The default value is <code>true</code>, which means checking is enabled. This value must be <code>false</code> for a NAT instance to perform NAT. For more information, see <a href="https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html">NAT Instances</a> in the <i>Amazon VPC User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ResetInstanceAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reset_instance_attribute_input::Builder,
    }
    impl ResetInstanceAttribute {
        /// Creates a new `ResetInstanceAttribute`.
        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::ResetInstanceAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ResetInstanceAttributeError>,
        > {
            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::ResetInstanceAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ResetInstanceAttributeError>,
        > {
            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 attribute to reset.</p> <important>
        /// <p>You can only reset the following attributes: <code>kernel</code> | <code>ramdisk</code> | <code>sourceDestCheck</code>.</p>
        /// </important>
        pub fn attribute(mut self, input: crate::model::InstanceAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The attribute to reset.</p> <important>
        /// <p>You can only reset the following attributes: <code>kernel</code> | <code>ramdisk</code> | <code>sourceDestCheck</code>.</p>
        /// </important>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::InstanceAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ResetNetworkInterfaceAttribute`.
    ///
    /// <p>Resets a network interface attribute. You can specify only one attribute at a time.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ResetNetworkInterfaceAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reset_network_interface_attribute_input::Builder,
    }
    impl ResetNetworkInterfaceAttribute {
        /// Creates a new `ResetNetworkInterfaceAttribute`.
        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::ResetNetworkInterfaceAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ResetNetworkInterfaceAttributeError>,
        > {
            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::ResetNetworkInterfaceAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ResetNetworkInterfaceAttributeError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// <p>The source/destination checking attribute. Resets the value to <code>true</code>.</p>
        pub fn source_dest_check(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_dest_check(input.into());
            self
        }
        /// <p>The source/destination checking attribute. Resets the value to <code>true</code>.</p>
        pub fn set_source_dest_check(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_dest_check(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ResetSnapshotAttribute`.
    ///
    /// <p>Resets permission settings for the specified snapshot.</p>
    /// <p>For more information about modifying snapshot permissions, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html">Share a snapshot</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ResetSnapshotAttribute {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::reset_snapshot_attribute_input::Builder,
    }
    impl ResetSnapshotAttribute {
        /// Creates a new `ResetSnapshotAttribute`.
        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::ResetSnapshotAttribute,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::ResetSnapshotAttributeError>,
        > {
            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::ResetSnapshotAttributeOutput,
            aws_smithy_http::result::SdkError<crate::error::ResetSnapshotAttributeError>,
        > {
            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 attribute to reset. Currently, only the attribute for permission to create volumes can be reset.</p>
        pub fn attribute(mut self, input: crate::model::SnapshotAttributeName) -> Self {
            self.inner = self.inner.attribute(input);
            self
        }
        /// <p>The attribute to reset. Currently, only the attribute for permission to create volumes can be reset.</p>
        pub fn set_attribute(
            mut self,
            input: std::option::Option<crate::model::SnapshotAttributeName>,
        ) -> Self {
            self.inner = self.inner.set_attribute(input);
            self
        }
        /// <p>The ID of the snapshot.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The ID of the snapshot.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RestoreAddressToClassic`.
    ///
    /// <p>Restores an Elastic IP address that was previously moved to the EC2-VPC platform back to the EC2-Classic platform. You cannot move an Elastic IP address that was originally allocated for use in EC2-VPC. The Elastic IP address must not be associated with an instance or network interface.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RestoreAddressToClassic {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::restore_address_to_classic_input::Builder,
    }
    impl RestoreAddressToClassic {
        /// Creates a new `RestoreAddressToClassic`.
        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::RestoreAddressToClassic,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RestoreAddressToClassicError>,
        > {
            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::RestoreAddressToClassicOutput,
            aws_smithy_http::result::SdkError<crate::error::RestoreAddressToClassicError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The Elastic IP address.</p>
        pub fn public_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.public_ip(input.into());
            self
        }
        /// <p>The Elastic IP address.</p>
        pub fn set_public_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_public_ip(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RestoreImageFromRecycleBin`.
    ///
    /// <p>Restores an AMI from the Recycle Bin. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html">Recycle Bin</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RestoreImageFromRecycleBin {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::restore_image_from_recycle_bin_input::Builder,
    }
    impl RestoreImageFromRecycleBin {
        /// Creates a new `RestoreImageFromRecycleBin`.
        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::RestoreImageFromRecycleBin,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RestoreImageFromRecycleBinError>,
        > {
            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::RestoreImageFromRecycleBinOutput,
            aws_smithy_http::result::SdkError<crate::error::RestoreImageFromRecycleBinError>,
        > {
            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 AMI to restore.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI to restore.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RestoreManagedPrefixListVersion`.
    ///
    /// <p>Restores the entries from a previous version of a managed prefix list to a new version of the prefix list.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RestoreManagedPrefixListVersion {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::restore_managed_prefix_list_version_input::Builder,
    }
    impl RestoreManagedPrefixListVersion {
        /// Creates a new `RestoreManagedPrefixListVersion`.
        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::RestoreManagedPrefixListVersion,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RestoreManagedPrefixListVersionError>,
        > {
            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::RestoreManagedPrefixListVersionOutput,
            aws_smithy_http::result::SdkError<crate::error::RestoreManagedPrefixListVersionError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn prefix_list_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.prefix_list_id(input.into());
            self
        }
        /// <p>The ID of the prefix list.</p>
        pub fn set_prefix_list_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_prefix_list_id(input);
            self
        }
        /// <p>The version to restore.</p>
        pub fn previous_version(mut self, input: i64) -> Self {
            self.inner = self.inner.previous_version(input);
            self
        }
        /// <p>The version to restore.</p>
        pub fn set_previous_version(mut self, input: std::option::Option<i64>) -> Self {
            self.inner = self.inner.set_previous_version(input);
            self
        }
        /// <p>The current version number for the prefix list.</p>
        pub fn current_version(mut self, input: i64) -> Self {
            self.inner = self.inner.current_version(input);
            self
        }
        /// <p>The current version number for the prefix list.</p>
        pub fn set_current_version(mut self, input: std::option::Option<i64>) -> Self {
            self.inner = self.inner.set_current_version(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RestoreSnapshotFromRecycleBin`.
    ///
    /// <p>Restores a snapshot from the Recycle Bin. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin-working-with-snaps.html#recycle-bin-restore-snaps">Restore snapshots from the Recycle Bin</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RestoreSnapshotFromRecycleBin {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::restore_snapshot_from_recycle_bin_input::Builder,
    }
    impl RestoreSnapshotFromRecycleBin {
        /// Creates a new `RestoreSnapshotFromRecycleBin`.
        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::RestoreSnapshotFromRecycleBin,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RestoreSnapshotFromRecycleBinError>,
        > {
            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::RestoreSnapshotFromRecycleBinOutput,
            aws_smithy_http::result::SdkError<crate::error::RestoreSnapshotFromRecycleBinError>,
        > {
            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 snapshot to restore.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The ID of the snapshot to restore.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RestoreSnapshotTier`.
    ///
    /// <p>Restores an archived Amazon EBS snapshot for use temporarily or permanently, or modifies the restore period or restore type for a snapshot that was previously temporarily restored.</p>
    /// <p>For more information see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-snapshot-archiving.html#restore-archived-snapshot"> Restore an archived snapshot</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-snapshot-archiving.html#modify-temp-restore-period"> modify the restore period or restore type for a temporarily restored snapshot</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RestoreSnapshotTier {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::restore_snapshot_tier_input::Builder,
    }
    impl RestoreSnapshotTier {
        /// Creates a new `RestoreSnapshotTier`.
        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::RestoreSnapshotTier,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RestoreSnapshotTierError>,
        > {
            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::RestoreSnapshotTierOutput,
            aws_smithy_http::result::SdkError<crate::error::RestoreSnapshotTierError>,
        > {
            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 snapshot to restore.</p>
        pub fn snapshot_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.snapshot_id(input.into());
            self
        }
        /// <p>The ID of the snapshot to restore.</p>
        pub fn set_snapshot_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_snapshot_id(input);
            self
        }
        /// <p>Specifies the number of days for which to temporarily restore an archived snapshot. Required for temporary restores only. The snapshot will be automatically re-archived after this period.</p>
        /// <p>To temporarily restore an archived snapshot, specify the number of days and omit the <b>PermanentRestore</b> parameter or set it to <code>false</code>.</p>
        pub fn temporary_restore_days(mut self, input: i32) -> Self {
            self.inner = self.inner.temporary_restore_days(input);
            self
        }
        /// <p>Specifies the number of days for which to temporarily restore an archived snapshot. Required for temporary restores only. The snapshot will be automatically re-archived after this period.</p>
        /// <p>To temporarily restore an archived snapshot, specify the number of days and omit the <b>PermanentRestore</b> parameter or set it to <code>false</code>.</p>
        pub fn set_temporary_restore_days(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_temporary_restore_days(input);
            self
        }
        /// <p>Indicates whether to permanently restore an archived snapshot. To permanently restore an archived snapshot, specify <code>true</code> and omit the <b>RestoreSnapshotTierRequest$TemporaryRestoreDays</b> parameter.</p>
        pub fn permanent_restore(mut self, input: bool) -> Self {
            self.inner = self.inner.permanent_restore(input);
            self
        }
        /// <p>Indicates whether to permanently restore an archived snapshot. To permanently restore an archived snapshot, specify <code>true</code> and omit the <b>RestoreSnapshotTierRequest$TemporaryRestoreDays</b> parameter.</p>
        pub fn set_permanent_restore(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_permanent_restore(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RevokeClientVpnIngress`.
    ///
    /// <p>Removes an ingress authorization rule from a Client VPN endpoint. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RevokeClientVpnIngress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::revoke_client_vpn_ingress_input::Builder,
    }
    impl RevokeClientVpnIngress {
        /// Creates a new `RevokeClientVpnIngress`.
        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::RevokeClientVpnIngress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RevokeClientVpnIngressError>,
        > {
            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::RevokeClientVpnIngressOutput,
            aws_smithy_http::result::SdkError<crate::error::RevokeClientVpnIngressError>,
        > {
            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 Client VPN endpoint with which the authorization rule is associated.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint with which the authorization rule is associated.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, of the network for which access is being removed.</p>
        pub fn target_network_cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.target_network_cidr(input.into());
            self
        }
        /// <p>The IPv4 address range, in CIDR notation, of the network for which access is being removed.</p>
        pub fn set_target_network_cidr(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_target_network_cidr(input);
            self
        }
        /// <p>The ID of the Active Directory group for which to revoke access. </p>
        pub fn access_group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.access_group_id(input.into());
            self
        }
        /// <p>The ID of the Active Directory group for which to revoke access. </p>
        pub fn set_access_group_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_access_group_id(input);
            self
        }
        /// <p>Indicates whether access should be revoked for all clients.</p>
        pub fn revoke_all_groups(mut self, input: bool) -> Self {
            self.inner = self.inner.revoke_all_groups(input);
            self
        }
        /// <p>Indicates whether access should be revoked for all clients.</p>
        pub fn set_revoke_all_groups(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_revoke_all_groups(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RevokeSecurityGroupEgress`.
    ///
    /// <p>[VPC only] Removes the specified outbound (egress) rules from a security group for EC2-VPC. This action does not apply to security groups for use in EC2-Classic.</p>
    /// <p>You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and destination (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule.</p>
    /// <p>[Default VPC] If the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked.</p>
    /// <p>Amazon Web Services recommends that you describe the security group to verify that the rules were removed.</p>
    /// <p>Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RevokeSecurityGroupEgress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::revoke_security_group_egress_input::Builder,
    }
    impl RevokeSecurityGroupEgress {
        /// Creates a new `RevokeSecurityGroupEgress`.
        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::RevokeSecurityGroupEgress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RevokeSecurityGroupEgressError>,
        > {
            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::RevokeSecurityGroupEgressOutput,
            aws_smithy_http::result::SdkError<crate::error::RevokeSecurityGroupEgressError>,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the security group.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The ID of the security group.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
        /// Appends an item to `IpPermissions`.
        ///
        /// To override the contents of this collection use [`set_ip_permissions`](Self::set_ip_permissions).
        ///
        /// <p>The sets of IP permissions. You can't specify a destination security group and a CIDR IP address range in the same set of permissions.</p>
        pub fn ip_permissions(mut self, input: crate::model::IpPermission) -> Self {
            self.inner = self.inner.ip_permissions(input);
            self
        }
        /// <p>The sets of IP permissions. You can't specify a destination security group and a CIDR IP address range in the same set of permissions.</p>
        pub fn set_ip_permissions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::IpPermission>>,
        ) -> Self {
            self.inner = self.inner.set_ip_permissions(input);
            self
        }
        /// Appends an item to `SecurityGroupRuleIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_rule_ids`](Self::set_security_group_rule_ids).
        ///
        /// <p>The IDs of the security group rules.</p>
        pub fn security_group_rule_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_rule_ids(input.into());
            self
        }
        /// <p>The IDs of the security group rules.</p>
        pub fn set_security_group_rule_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_rule_ids(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the CIDR.</p>
        pub fn cidr_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_ip(input.into());
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the CIDR.</p>
        pub fn set_cidr_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_ip(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the port.</p>
        pub fn from_port(mut self, input: i32) -> Self {
            self.inner = self.inner.from_port(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the port.</p>
        pub fn set_from_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_from_port(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the protocol name or number.</p>
        pub fn ip_protocol(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ip_protocol(input.into());
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the protocol name or number.</p>
        pub fn set_ip_protocol(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ip_protocol(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the port.</p>
        pub fn to_port(mut self, input: i32) -> Self {
            self.inner = self.inner.to_port(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify the port.</p>
        pub fn set_to_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_to_port(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
        pub fn source_security_group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_security_group_name(input.into());
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
        pub fn set_source_security_group_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_security_group_name(input);
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
        pub fn source_security_group_owner_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.source_security_group_owner_id(input.into());
            self
        }
        /// <p>Not supported. Use a set of IP permissions to specify a destination security group.</p>
        pub fn set_source_security_group_owner_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_security_group_owner_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RevokeSecurityGroupIngress`.
    ///
    /// <p>Removes the specified inbound (ingress) rules from a security group.</p>
    /// <p>You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and source (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule.</p>
    /// <p>[EC2-Classic, default VPC] If the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked.</p>
    /// <p>Amazon Web Services recommends that you describe the security group to verify that the rules were removed.</p>
    /// <p>Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RevokeSecurityGroupIngress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::revoke_security_group_ingress_input::Builder,
    }
    impl RevokeSecurityGroupIngress {
        /// Creates a new `RevokeSecurityGroupIngress`.
        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::RevokeSecurityGroupIngress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RevokeSecurityGroupIngressError>,
        > {
            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::RevokeSecurityGroupIngressOutput,
            aws_smithy_http::result::SdkError<crate::error::RevokeSecurityGroupIngressError>,
        > {
            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 CIDR IP address range. You can't specify this parameter when specifying a source security group.</p>
        pub fn cidr_ip(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr_ip(input.into());
            self
        }
        /// <p>The CIDR IP address range. You can't specify this parameter when specifying a source security group.</p>
        pub fn set_cidr_ip(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr_ip(input);
            self
        }
        /// <p>If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP, this is the type number. A value of -1 indicates all ICMP types.</p>
        pub fn from_port(mut self, input: i32) -> Self {
            self.inner = self.inner.from_port(input);
            self
        }
        /// <p>If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP, this is the type number. A value of -1 indicates all ICMP types.</p>
        pub fn set_from_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_from_port(input);
            self
        }
        /// <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// Appends an item to `IpPermissions`.
        ///
        /// To override the contents of this collection use [`set_ip_permissions`](Self::set_ip_permissions).
        ///
        /// <p>The sets of IP permissions. You can't specify a source security group and a CIDR IP address range in the same set of permissions.</p>
        pub fn ip_permissions(mut self, input: crate::model::IpPermission) -> Self {
            self.inner = self.inner.ip_permissions(input);
            self
        }
        /// <p>The sets of IP permissions. You can't specify a source security group and a CIDR IP address range in the same set of permissions.</p>
        pub fn set_ip_permissions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::IpPermission>>,
        ) -> Self {
            self.inner = self.inner.set_ip_permissions(input);
            self
        }
        /// <p>The IP protocol name (<code>tcp</code>, <code>udp</code>, <code>icmp</code>) or number (see <a href="http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a>). Use <code>-1</code> to specify all.</p>
        pub fn ip_protocol(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ip_protocol(input.into());
            self
        }
        /// <p>The IP protocol name (<code>tcp</code>, <code>udp</code>, <code>icmp</code>) or number (see <a href="http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml">Protocol Numbers</a>). Use <code>-1</code> to specify all.</p>
        pub fn set_ip_protocol(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ip_protocol(input);
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. For EC2-VPC, the source security group must be in the same VPC. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.</p>
        pub fn source_security_group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.source_security_group_name(input.into());
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. For EC2-VPC, the source security group must be in the same VPC. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.</p>
        pub fn set_source_security_group_name(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_security_group_name(input);
            self
        }
        /// <p>[EC2-Classic] The Amazon Web Services account ID of the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.</p>
        pub fn source_security_group_owner_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.source_security_group_owner_id(input.into());
            self
        }
        /// <p>[EC2-Classic] The Amazon Web Services account ID of the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.</p>
        pub fn set_source_security_group_owner_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_source_security_group_owner_id(input);
            self
        }
        /// <p>If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP, this is the code. A value of -1 indicates all ICMP codes.</p>
        pub fn to_port(mut self, input: i32) -> Self {
            self.inner = self.inner.to_port(input);
            self
        }
        /// <p>If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP, this is the code. A value of -1 indicates all ICMP codes.</p>
        pub fn set_to_port(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_to_port(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `SecurityGroupRuleIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_rule_ids`](Self::set_security_group_rule_ids).
        ///
        /// <p>The IDs of the security group rules.</p>
        pub fn security_group_rule_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_rule_ids(input.into());
            self
        }
        /// <p>The IDs of the security group rules.</p>
        pub fn set_security_group_rule_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_rule_ids(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RunInstances`.
    ///
    /// <p>Launches the specified number of instances using an AMI for which you have permissions.</p>
    /// <p>You can specify a number of options, or leave the default options. The following rules apply:</p>
    /// <ul>
    /// <li> <p>[EC2-VPC] If you don't specify a subnet ID, we choose a default subnet from your default VPC for you. If you don't have a default VPC, you must specify a subnet ID in the request.</p> </li>
    /// <li> <p>[EC2-Classic] If don't specify an Availability Zone, we choose one for you.</p> </li>
    /// <li> <p>Some instance types must be launched into a VPC. If you do not have a default VPC, or if you do not specify a subnet ID, the request fails. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html#vpc-only-instance-types">Instance types available only in a VPC</a>.</p> </li>
    /// <li> <p>[EC2-VPC] All instances have a network interface with a primary private IPv4 address. If you don't specify this address, we choose one from the IPv4 range of your subnet.</p> </li>
    /// <li> <p>Not all instance types support IPv6 addresses. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a>.</p> </li>
    /// <li> <p>If you don't specify a security group ID, we use the default security group. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">Security groups</a>.</p> </li>
    /// <li> <p>If any of the AMIs have a product code attached for which the user has not subscribed, the request fails.</p> </li>
    /// </ul>
    /// <p>You can create a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html">launch template</a>, which is a resource that contains the parameters to launch an instance. When you launch an instance using <code>RunInstances</code>, you can specify the launch template instead of specifying the launch parameters.</p>
    /// <p>To ensure faster instance launches, break up large requests into smaller batches. For example, create five separate launch requests for 100 instances each instead of one launch request for 500 instances.</p>
    /// <p>An instance is ready for you to use when it's in the <code>running</code> state. You can check the state of your instance using <code>DescribeInstances</code>. You can tag instances and EBS volumes during launch, after launch, or both. For more information, see <code>CreateTags</code> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html">Tagging your Amazon EC2 resources</a>.</p>
    /// <p>Linux instances have access to the public key of the key pair at boot. You can use this key to provide secure access to the instance. Amazon EC2 public images use this feature to provide secure access without passwords. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html">Key pairs</a>.</p>
    /// <p>For troubleshooting, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html">What to do if an instance immediately terminates</a>, and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html">Troubleshooting connecting to your instance</a>.</p> <note>
    /// <p>We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html">Migrate from EC2-Classic to a VPC</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// </note>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RunInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::run_instances_input::Builder,
    }
    impl RunInstances {
        /// Creates a new `RunInstances`.
        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::RunInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RunInstancesError>,
        > {
            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::RunInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::RunInstancesError>,
        > {
            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 `BlockDeviceMappings`.
        ///
        /// To override the contents of this collection use [`set_block_device_mappings`](Self::set_block_device_mappings).
        ///
        /// <p>The block device mapping, which defines the EBS volumes and instance store volumes to attach to the instance at launch. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html">Block device mappings</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn block_device_mappings(mut self, input: crate::model::BlockDeviceMapping) -> Self {
            self.inner = self.inner.block_device_mappings(input);
            self
        }
        /// <p>The block device mapping, which defines the EBS volumes and instance store volumes to attach to the instance at launch. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html">Block device mappings</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_block_device_mappings(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::BlockDeviceMapping>>,
        ) -> Self {
            self.inner = self.inner.set_block_device_mappings(input);
            self
        }
        /// <p>The ID of the AMI. An AMI ID is required to launch an instance and must be specified here or in a launch template.</p>
        pub fn image_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.image_id(input.into());
            self
        }
        /// <p>The ID of the AMI. An AMI ID is required to launch an instance and must be specified here or in a launch template.</p>
        pub fn set_image_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_image_id(input);
            self
        }
        /// <p>The instance type. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>Default: <code>m1.small</code> </p>
        pub fn instance_type(mut self, input: crate::model::InstanceType) -> Self {
            self.inner = self.inner.instance_type(input);
            self
        }
        /// <p>The instance type. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>Default: <code>m1.small</code> </p>
        pub fn set_instance_type(
            mut self,
            input: std::option::Option<crate::model::InstanceType>,
        ) -> Self {
            self.inner = self.inner.set_instance_type(input);
            self
        }
        /// <p>[EC2-VPC] The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch.</p>
        /// <p>You cannot specify this option and the network interfaces option in the same request.</p>
        pub fn ipv6_address_count(mut self, input: i32) -> Self {
            self.inner = self.inner.ipv6_address_count(input);
            self
        }
        /// <p>[EC2-VPC] The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch.</p>
        /// <p>You cannot specify this option and the network interfaces option in the same request.</p>
        pub fn set_ipv6_address_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_ipv6_address_count(input);
            self
        }
        /// Appends an item to `Ipv6Addresses`.
        ///
        /// To override the contents of this collection use [`set_ipv6_addresses`](Self::set_ipv6_addresses).
        ///
        /// <p>[EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface. You cannot specify this option and the option to assign a number of IPv6 addresses in the same request. You cannot specify this option if you've specified a minimum number of instances to launch.</p>
        /// <p>You cannot specify this option and the network interfaces option in the same request.</p>
        pub fn ipv6_addresses(mut self, input: crate::model::InstanceIpv6Address) -> Self {
            self.inner = self.inner.ipv6_addresses(input);
            self
        }
        /// <p>[EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface. You cannot specify this option and the option to assign a number of IPv6 addresses in the same request. You cannot specify this option if you've specified a minimum number of instances to launch.</p>
        /// <p>You cannot specify this option and the network interfaces option in the same request.</p>
        pub fn set_ipv6_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::InstanceIpv6Address>>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_addresses(input);
            self
        }
        /// <p>The ID of the kernel.</p> <important>
        /// <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html">PV-GRUB</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// </important>
        pub fn kernel_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.kernel_id(input.into());
            self
        }
        /// <p>The ID of the kernel.</p> <important>
        /// <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html">PV-GRUB</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// </important>
        pub fn set_kernel_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_kernel_id(input);
            self
        }
        /// <p>The name of the key pair. You can create a key pair using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html">CreateKeyPair</a> or <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html">ImportKeyPair</a>.</p> <important>
        /// <p>If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in.</p>
        /// </important>
        pub fn key_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.key_name(input.into());
            self
        }
        /// <p>The name of the key pair. You can create a key pair using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html">CreateKeyPair</a> or <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html">ImportKeyPair</a>.</p> <important>
        /// <p>If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in.</p>
        /// </important>
        pub fn set_key_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_key_name(input);
            self
        }
        /// <p>The maximum number of instances to launch. If you specify more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches the largest possible number of instances above <code>MinCount</code>.</p>
        /// <p>Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <a href="http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2">How many instances can I run in Amazon EC2</a> in the Amazon EC2 FAQ.</p>
        pub fn max_count(mut self, input: i32) -> Self {
            self.inner = self.inner.max_count(input);
            self
        }
        /// <p>The maximum number of instances to launch. If you specify more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches the largest possible number of instances above <code>MinCount</code>.</p>
        /// <p>Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <a href="http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2">How many instances can I run in Amazon EC2</a> in the Amazon EC2 FAQ.</p>
        pub fn set_max_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_max_count(input);
            self
        }
        /// <p>The minimum number of instances to launch. If you specify a minimum that is more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches no instances.</p>
        /// <p>Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <a href="http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2">How many instances can I run in Amazon EC2</a> in the Amazon EC2 General FAQ.</p>
        pub fn min_count(mut self, input: i32) -> Self {
            self.inner = self.inner.min_count(input);
            self
        }
        /// <p>The minimum number of instances to launch. If you specify a minimum that is more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches no instances.</p>
        /// <p>Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <a href="http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2">How many instances can I run in Amazon EC2</a> in the Amazon EC2 General FAQ.</p>
        pub fn set_min_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_min_count(input);
            self
        }
        /// <p>Specifies whether detailed monitoring is enabled for the instance.</p>
        pub fn monitoring(mut self, input: crate::model::RunInstancesMonitoringEnabled) -> Self {
            self.inner = self.inner.monitoring(input);
            self
        }
        /// <p>Specifies whether detailed monitoring is enabled for the instance.</p>
        pub fn set_monitoring(
            mut self,
            input: std::option::Option<crate::model::RunInstancesMonitoringEnabled>,
        ) -> Self {
            self.inner = self.inner.set_monitoring(input);
            self
        }
        /// <p>The placement for the instance.</p>
        pub fn placement(mut self, input: crate::model::Placement) -> Self {
            self.inner = self.inner.placement(input);
            self
        }
        /// <p>The placement for the instance.</p>
        pub fn set_placement(
            mut self,
            input: std::option::Option<crate::model::Placement>,
        ) -> Self {
            self.inner = self.inner.set_placement(input);
            self
        }
        /// <p>The ID of the RAM disk to select. Some kernels require additional drivers at launch. Check the kernel requirements for information about whether you need to specify a RAM disk. To find kernel requirements, go to the Amazon Web Services Resource Center and search for the kernel ID.</p> <important>
        /// <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html">PV-GRUB</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// </important>
        pub fn ramdisk_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ramdisk_id(input.into());
            self
        }
        /// <p>The ID of the RAM disk to select. Some kernels require additional drivers at launch. Check the kernel requirements for information about whether you need to specify a RAM disk. To find kernel requirements, go to the Amazon Web Services Resource Center and search for the kernel ID.</p> <important>
        /// <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html">PV-GRUB</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// </important>
        pub fn set_ramdisk_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_ramdisk_id(input);
            self
        }
        /// Appends an item to `SecurityGroupIds`.
        ///
        /// To override the contents of this collection use [`set_security_group_ids`](Self::set_security_group_ids).
        ///
        /// <p>The IDs of the security groups. You can create a security group using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html">CreateSecurityGroup</a>.</p>
        /// <p>If you specify a network interface, you must specify any security groups as part of the network interface.</p>
        pub fn security_group_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_group_ids(input.into());
            self
        }
        /// <p>The IDs of the security groups. You can create a security group using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html">CreateSecurityGroup</a>.</p>
        /// <p>If you specify a network interface, you must specify any security groups as part of the network interface.</p>
        pub fn set_security_group_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_ids(input);
            self
        }
        /// Appends an item to `SecurityGroups`.
        ///
        /// To override the contents of this collection use [`set_security_groups`](Self::set_security_groups).
        ///
        /// <p>[EC2-Classic, default VPC] The names of the security groups.</p>
        /// <p>If you specify a network interface, you must specify any security groups as part of the network interface.</p>
        /// <p>Default: Amazon EC2 uses the default security group.</p>
        pub fn security_groups(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.security_groups(input.into());
            self
        }
        /// <p>[EC2-Classic, default VPC] The names of the security groups.</p>
        /// <p>If you specify a network interface, you must specify any security groups as part of the network interface.</p>
        /// <p>Default: Amazon EC2 uses the default security group.</p>
        pub fn set_security_groups(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_security_groups(input);
            self
        }
        /// <p>[EC2-VPC] The ID of the subnet to launch the instance into.</p>
        /// <p>If you specify a network interface, you must specify any subnets as part of the network interface.</p>
        pub fn subnet_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.subnet_id(input.into());
            self
        }
        /// <p>[EC2-VPC] The ID of the subnet to launch the instance into.</p>
        /// <p>If you specify a network interface, you must specify any subnets as part of the network interface.</p>
        pub fn set_subnet_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_subnet_id(input);
            self
        }
        /// <p>The user data script to make available to the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html">Run commands on your Linux instance at launch</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html">Run commands on your Windows instance at launch</a>. If you are using a command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text. User data is limited to 16 KB.</p>
        pub fn user_data(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.user_data(input.into());
            self
        }
        /// <p>The user data script to make available to the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html">Run commands on your Linux instance at launch</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html">Run commands on your Windows instance at launch</a>. If you are using a command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text. User data is limited to 16 KB.</p>
        pub fn set_user_data(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_user_data(input);
            self
        }
        /// <p>Reserved.</p>
        pub fn additional_info(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.additional_info(input.into());
            self
        }
        /// <p>Reserved.</p>
        pub fn set_additional_info(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_additional_info(input);
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        /// <p>Constraints: Maximum 64 ASCII characters</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p>
        /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        /// <p>Constraints: Maximum 64 ASCII characters</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>If you set this parameter to <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute after launch, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html">ModifyInstanceAttribute</a>. Alternatively, if you set <code>InstanceInitiatedShutdownBehavior</code> to <code>terminate</code>, you can terminate the instance by running the shutdown command from the instance.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn disable_api_termination(mut self, input: bool) -> Self {
            self.inner = self.inner.disable_api_termination(input);
            self
        }
        /// <p>If you set this parameter to <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute after launch, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html">ModifyInstanceAttribute</a>. Alternatively, if you set <code>InstanceInitiatedShutdownBehavior</code> to <code>terminate</code>, you can terminate the instance by running the shutdown command from the instance.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn set_disable_api_termination(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_disable_api_termination(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Indicates whether the instance is optimized for Amazon EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal Amazon EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn ebs_optimized(mut self, input: bool) -> Self {
            self.inner = self.inner.ebs_optimized(input);
            self
        }
        /// <p>Indicates whether the instance is optimized for Amazon EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal Amazon EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn set_ebs_optimized(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_ebs_optimized(input);
            self
        }
        /// <p>The name or Amazon Resource Name (ARN) of an IAM instance profile.</p>
        pub fn iam_instance_profile(
            mut self,
            input: crate::model::IamInstanceProfileSpecification,
        ) -> Self {
            self.inner = self.inner.iam_instance_profile(input);
            self
        }
        /// <p>The name or Amazon Resource Name (ARN) of an IAM instance profile.</p>
        pub fn set_iam_instance_profile(
            mut self,
            input: std::option::Option<crate::model::IamInstanceProfileSpecification>,
        ) -> Self {
            self.inner = self.inner.set_iam_instance_profile(input);
            self
        }
        /// <p>Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).</p>
        /// <p>Default: <code>stop</code> </p>
        pub fn instance_initiated_shutdown_behavior(
            mut self,
            input: crate::model::ShutdownBehavior,
        ) -> Self {
            self.inner = self.inner.instance_initiated_shutdown_behavior(input);
            self
        }
        /// <p>Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).</p>
        /// <p>Default: <code>stop</code> </p>
        pub fn set_instance_initiated_shutdown_behavior(
            mut self,
            input: std::option::Option<crate::model::ShutdownBehavior>,
        ) -> Self {
            self.inner = self.inner.set_instance_initiated_shutdown_behavior(input);
            self
        }
        /// Appends an item to `NetworkInterfaces`.
        ///
        /// To override the contents of this collection use [`set_network_interfaces`](Self::set_network_interfaces).
        ///
        /// <p>The network interfaces to associate with the instance. If you specify a network interface, you must specify any security groups and subnets as part of the network interface.</p>
        pub fn network_interfaces(
            mut self,
            input: crate::model::InstanceNetworkInterfaceSpecification,
        ) -> Self {
            self.inner = self.inner.network_interfaces(input);
            self
        }
        /// <p>The network interfaces to associate with the instance. If you specify a network interface, you must specify any security groups and subnets as part of the network interface.</p>
        pub fn set_network_interfaces(
            mut self,
            input: std::option::Option<
                std::vec::Vec<crate::model::InstanceNetworkInterfaceSpecification>,
            >,
        ) -> Self {
            self.inner = self.inner.set_network_interfaces(input);
            self
        }
        /// <p>[EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet.</p>
        /// <p>Only one private IP address can be designated as primary. You can't specify this option if you've specified the option to designate a private IP address as the primary IP address in a network interface specification. You cannot specify this option if you're launching more than one instance in the request.</p>
        /// <p>You cannot specify this option and the network interfaces option in the same request.</p>
        pub fn private_ip_address(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.private_ip_address(input.into());
            self
        }
        /// <p>[EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet.</p>
        /// <p>Only one private IP address can be designated as primary. You can't specify this option if you've specified the option to designate a private IP address as the primary IP address in a network interface specification. You cannot specify this option if you're launching more than one instance in the request.</p>
        /// <p>You cannot specify this option and the network interfaces option in the same request.</p>
        pub fn set_private_ip_address(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_private_ip_address(input);
            self
        }
        /// Appends an item to `ElasticGpuSpecification`.
        ///
        /// To override the contents of this collection use [`set_elastic_gpu_specification`](Self::set_elastic_gpu_specification).
        ///
        /// <p>An elastic GPU to associate with the instance. An Elastic GPU is a GPU resource that you can attach to your Windows instance to accelerate the graphics performance of your applications. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html">Amazon EC2 Elastic GPUs</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn elastic_gpu_specification(
            mut self,
            input: crate::model::ElasticGpuSpecification,
        ) -> Self {
            self.inner = self.inner.elastic_gpu_specification(input);
            self
        }
        /// <p>An elastic GPU to associate with the instance. An Elastic GPU is a GPU resource that you can attach to your Windows instance to accelerate the graphics performance of your applications. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html">Amazon EC2 Elastic GPUs</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_elastic_gpu_specification(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ElasticGpuSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_elastic_gpu_specification(input);
            self
        }
        /// Appends an item to `ElasticInferenceAccelerators`.
        ///
        /// To override the contents of this collection use [`set_elastic_inference_accelerators`](Self::set_elastic_inference_accelerators).
        ///
        /// <p>An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads.</p>
        /// <p>You cannot specify accelerators from different generations in the same request.</p>
        pub fn elastic_inference_accelerators(
            mut self,
            input: crate::model::ElasticInferenceAccelerator,
        ) -> Self {
            self.inner = self.inner.elastic_inference_accelerators(input);
            self
        }
        /// <p>An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads.</p>
        /// <p>You cannot specify accelerators from different generations in the same request.</p>
        pub fn set_elastic_inference_accelerators(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::ElasticInferenceAccelerator>>,
        ) -> Self {
            self.inner = self.inner.set_elastic_inference_accelerators(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply to the resources that are created during instance launch.</p>
        /// <p>You can specify tags for the following resources only:</p>
        /// <ul>
        /// <li> <p>Instances</p> </li>
        /// <li> <p>Volumes</p> </li>
        /// <li> <p>Elastic graphics</p> </li>
        /// <li> <p>Spot Instance requests</p> </li>
        /// <li> <p>Network interfaces</p> </li>
        /// </ul>
        /// <p>To tag a resource after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply to the resources that are created during instance launch.</p>
        /// <p>You can specify tags for the following resources only:</p>
        /// <ul>
        /// <li> <p>Instances</p> </li>
        /// <li> <p>Volumes</p> </li>
        /// <li> <p>Elastic graphics</p> </li>
        /// <li> <p>Spot Instance requests</p> </li>
        /// <li> <p>Network interfaces</p> </li>
        /// </ul>
        /// <p>To tag a resource after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>The launch template to use to launch the instances. Any parameters that you specify in <code>RunInstances</code> override the same parameters in the launch template. You can specify either the name or ID of a launch template, but not both.</p>
        pub fn launch_template(mut self, input: crate::model::LaunchTemplateSpecification) -> Self {
            self.inner = self.inner.launch_template(input);
            self
        }
        /// <p>The launch template to use to launch the instances. Any parameters that you specify in <code>RunInstances</code> override the same parameters in the launch template. You can specify either the name or ID of a launch template, but not both.</p>
        pub fn set_launch_template(
            mut self,
            input: std::option::Option<crate::model::LaunchTemplateSpecification>,
        ) -> Self {
            self.inner = self.inner.set_launch_template(input);
            self
        }
        /// <p>The market (purchasing) option for the instances.</p>
        /// <p>For <code>RunInstances</code>, persistent Spot Instance requests are only supported when <b>InstanceInterruptionBehavior</b> is set to either <code>hibernate</code> or <code>stop</code>.</p>
        pub fn instance_market_options(
            mut self,
            input: crate::model::InstanceMarketOptionsRequest,
        ) -> Self {
            self.inner = self.inner.instance_market_options(input);
            self
        }
        /// <p>The market (purchasing) option for the instances.</p>
        /// <p>For <code>RunInstances</code>, persistent Spot Instance requests are only supported when <b>InstanceInterruptionBehavior</b> is set to either <code>hibernate</code> or <code>stop</code>.</p>
        pub fn set_instance_market_options(
            mut self,
            input: std::option::Option<crate::model::InstanceMarketOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_instance_market_options(input);
            self
        }
        /// <p>The credit option for CPU usage of the burstable performance instance. Valid values are <code>standard</code> and <code>unlimited</code>. To change this attribute after launch, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html"> ModifyInstanceCreditSpecification</a>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html">Burstable performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>Default: <code>standard</code> (T2 instances) or <code>unlimited</code> (T3/T3a/T4g instances)</p>
        /// <p>For T3 instances with <code>host</code> tenancy, only <code>standard</code> is supported.</p>
        pub fn credit_specification(
            mut self,
            input: crate::model::CreditSpecificationRequest,
        ) -> Self {
            self.inner = self.inner.credit_specification(input);
            self
        }
        /// <p>The credit option for CPU usage of the burstable performance instance. Valid values are <code>standard</code> and <code>unlimited</code>. To change this attribute after launch, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html"> ModifyInstanceCreditSpecification</a>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html">Burstable performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>Default: <code>standard</code> (T2 instances) or <code>unlimited</code> (T3/T3a/T4g instances)</p>
        /// <p>For T3 instances with <code>host</code> tenancy, only <code>standard</code> is supported.</p>
        pub fn set_credit_specification(
            mut self,
            input: std::option::Option<crate::model::CreditSpecificationRequest>,
        ) -> Self {
            self.inner = self.inner.set_credit_specification(input);
            self
        }
        /// <p>The CPU options for the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html">Optimize CPU options</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn cpu_options(mut self, input: crate::model::CpuOptionsRequest) -> Self {
            self.inner = self.inner.cpu_options(input);
            self
        }
        /// <p>The CPU options for the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html">Optimize CPU options</a> in the <i>Amazon EC2 User Guide</i>.</p>
        pub fn set_cpu_options(
            mut self,
            input: std::option::Option<crate::model::CpuOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_cpu_options(input);
            self
        }
        /// <p>Information about the Capacity Reservation targeting option. If you do not specify this parameter, the instance's Capacity Reservation preference defaults to <code>open</code>, which enables it to run in any open Capacity Reservation that has matching attributes (instance type, platform, Availability Zone).</p>
        pub fn capacity_reservation_specification(
            mut self,
            input: crate::model::CapacityReservationSpecification,
        ) -> Self {
            self.inner = self.inner.capacity_reservation_specification(input);
            self
        }
        /// <p>Information about the Capacity Reservation targeting option. If you do not specify this parameter, the instance's Capacity Reservation preference defaults to <code>open</code>, which enables it to run in any open Capacity Reservation that has matching attributes (instance type, platform, Availability Zone).</p>
        pub fn set_capacity_reservation_specification(
            mut self,
            input: std::option::Option<crate::model::CapacityReservationSpecification>,
        ) -> Self {
            self.inner = self.inner.set_capacity_reservation_specification(input);
            self
        }
        /// <p>Indicates whether an instance is enabled for hibernation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>You can't enable hibernation and Amazon Web Services Nitro Enclaves on the same instance.</p>
        pub fn hibernation_options(
            mut self,
            input: crate::model::HibernationOptionsRequest,
        ) -> Self {
            self.inner = self.inner.hibernation_options(input);
            self
        }
        /// <p>Indicates whether an instance is enabled for hibernation. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p>You can't enable hibernation and Amazon Web Services Nitro Enclaves on the same instance.</p>
        pub fn set_hibernation_options(
            mut self,
            input: std::option::Option<crate::model::HibernationOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_hibernation_options(input);
            self
        }
        /// Appends an item to `LicenseSpecifications`.
        ///
        /// To override the contents of this collection use [`set_license_specifications`](Self::set_license_specifications).
        ///
        /// <p>The license configurations.</p>
        pub fn license_specifications(
            mut self,
            input: crate::model::LicenseConfigurationRequest,
        ) -> Self {
            self.inner = self.inner.license_specifications(input);
            self
        }
        /// <p>The license configurations.</p>
        pub fn set_license_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::LicenseConfigurationRequest>>,
        ) -> Self {
            self.inner = self.inner.set_license_specifications(input);
            self
        }
        /// <p>The metadata options for the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">Instance metadata and user data</a>.</p>
        pub fn metadata_options(
            mut self,
            input: crate::model::InstanceMetadataOptionsRequest,
        ) -> Self {
            self.inner = self.inner.metadata_options(input);
            self
        }
        /// <p>The metadata options for the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">Instance metadata and user data</a>.</p>
        pub fn set_metadata_options(
            mut self,
            input: std::option::Option<crate::model::InstanceMetadataOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_metadata_options(input);
            self
        }
        /// <p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href="https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html"> What is Amazon Web Services Nitro Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p>
        /// <p>You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance.</p>
        pub fn enclave_options(mut self, input: crate::model::EnclaveOptionsRequest) -> Self {
            self.inner = self.inner.enclave_options(input);
            self
        }
        /// <p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href="https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html"> What is Amazon Web Services Nitro Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p>
        /// <p>You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance.</p>
        pub fn set_enclave_options(
            mut self,
            input: std::option::Option<crate::model::EnclaveOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_enclave_options(input);
            self
        }
        /// <p>The options for the instance hostname. The default values are inherited from the subnet.</p>
        pub fn private_dns_name_options(
            mut self,
            input: crate::model::PrivateDnsNameOptionsRequest,
        ) -> Self {
            self.inner = self.inner.private_dns_name_options(input);
            self
        }
        /// <p>The options for the instance hostname. The default values are inherited from the subnet.</p>
        pub fn set_private_dns_name_options(
            mut self,
            input: std::option::Option<crate::model::PrivateDnsNameOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_private_dns_name_options(input);
            self
        }
        /// <p>The maintenance and recovery options for the instance.</p>
        pub fn maintenance_options(
            mut self,
            input: crate::model::InstanceMaintenanceOptionsRequest,
        ) -> Self {
            self.inner = self.inner.maintenance_options(input);
            self
        }
        /// <p>The maintenance and recovery options for the instance.</p>
        pub fn set_maintenance_options(
            mut self,
            input: std::option::Option<crate::model::InstanceMaintenanceOptionsRequest>,
        ) -> Self {
            self.inner = self.inner.set_maintenance_options(input);
            self
        }
        /// <p>Indicates whether an instance is enabled for stop protection. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection">Stop protection</a>. </p>
        pub fn disable_api_stop(mut self, input: bool) -> Self {
            self.inner = self.inner.disable_api_stop(input);
            self
        }
        /// <p>Indicates whether an instance is enabled for stop protection. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection">Stop protection</a>. </p>
        pub fn set_disable_api_stop(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_disable_api_stop(input);
            self
        }
    }
    /// Fluent builder constructing a request to `RunScheduledInstances`.
    ///
    /// <p>Launches the specified Scheduled Instances.</p>
    /// <p>Before you can launch a Scheduled Instance, you must purchase it and obtain an identifier using <code>PurchaseScheduledInstances</code>.</p>
    /// <p>You must launch a Scheduled Instance during its scheduled time period. You can't stop or reboot a Scheduled Instance, but you can terminate it as needed. If you terminate a Scheduled Instance before the current scheduled time period ends, you can launch it again after a few minutes. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-scheduled-instances.html">Scheduled Instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct RunScheduledInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::run_scheduled_instances_input::Builder,
    }
    impl RunScheduledInstances {
        /// Creates a new `RunScheduledInstances`.
        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::RunScheduledInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::RunScheduledInstancesError>,
        > {
            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::RunScheduledInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::RunScheduledInstancesError>,
        > {
            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>Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The number of instances.</p>
        /// <p>Default: 1</p>
        pub fn instance_count(mut self, input: i32) -> Self {
            self.inner = self.inner.instance_count(input);
            self
        }
        /// <p>The number of instances.</p>
        /// <p>Default: 1</p>
        pub fn set_instance_count(mut self, input: std::option::Option<i32>) -> Self {
            self.inner = self.inner.set_instance_count(input);
            self
        }
        /// <p>The launch specification. You must match the instance type, Availability Zone, network, and platform of the schedule that you purchased.</p>
        pub fn launch_specification(
            mut self,
            input: crate::model::ScheduledInstancesLaunchSpecification,
        ) -> Self {
            self.inner = self.inner.launch_specification(input);
            self
        }
        /// <p>The launch specification. You must match the instance type, Availability Zone, network, and platform of the schedule that you purchased.</p>
        pub fn set_launch_specification(
            mut self,
            input: std::option::Option<crate::model::ScheduledInstancesLaunchSpecification>,
        ) -> Self {
            self.inner = self.inner.set_launch_specification(input);
            self
        }
        /// <p>The Scheduled Instance ID.</p>
        pub fn scheduled_instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.scheduled_instance_id(input.into());
            self
        }
        /// <p>The Scheduled Instance ID.</p>
        pub fn set_scheduled_instance_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_scheduled_instance_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `SearchLocalGatewayRoutes`.
    ///
    /// <p>Searches for routes in the specified local gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct SearchLocalGatewayRoutes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::search_local_gateway_routes_input::Builder,
    }
    impl SearchLocalGatewayRoutes {
        /// Creates a new `SearchLocalGatewayRoutes`.
        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::SearchLocalGatewayRoutes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::SearchLocalGatewayRoutesError>,
        > {
            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::SearchLocalGatewayRoutesOutput,
            aws_smithy_http::result::SdkError<crate::error::SearchLocalGatewayRoutesError>,
        > {
            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::SearchLocalGatewayRoutesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::SearchLocalGatewayRoutesPaginator {
            crate::paginator::SearchLocalGatewayRoutesPaginator::new(self.handle, self.inner)
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn local_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.local_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the local gateway route table.</p>
        pub fn set_local_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_local_gateway_route_table_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>
        /// <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>
        /// <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>
        /// <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify <code>supernet-of-match</code> as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>
        /// <li> <p> <code>state</code> - The state of the route.</p> </li>
        /// <li> <p> <code>type</code> - The route type.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters.</p>
        /// <ul>
        /// <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>
        /// <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>
        /// <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>
        /// <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify <code>supernet-of-match</code> as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>
        /// <li> <p> <code>state</code> - The state of the route.</p> </li>
        /// <li> <p> <code>type</code> - The route type.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `SearchTransitGatewayMulticastGroups`.
    ///
    /// <p>Searches one or more transit gateway multicast groups and returns the group membership information.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct SearchTransitGatewayMulticastGroups {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::search_transit_gateway_multicast_groups_input::Builder,
    }
    impl SearchTransitGatewayMulticastGroups {
        /// Creates a new `SearchTransitGatewayMulticastGroups`.
        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::SearchTransitGatewayMulticastGroups,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::SearchTransitGatewayMulticastGroupsError,
            >,
        > {
            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::SearchTransitGatewayMulticastGroupsOutput,
            aws_smithy_http::result::SdkError<
                crate::error::SearchTransitGatewayMulticastGroupsError,
            >,
        > {
            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::SearchTransitGatewayMulticastGroupsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(
            self,
        ) -> crate::paginator::SearchTransitGatewayMulticastGroupsPaginator {
            crate::paginator::SearchTransitGatewayMulticastGroupsPaginator::new(
                self.handle,
                self.inner,
            )
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn transit_gateway_multicast_domain_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_multicast_domain_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway multicast domain.</p>
        pub fn set_transit_gateway_multicast_domain_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_multicast_domain_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>group-ip-address</code> - The IP address of the transit gateway multicast group.</p> </li>
        /// <li> <p> <code>is-group-member</code> - The resource is a group member. Valid values are <code>true</code> | <code>false</code>.</p> </li>
        /// <li> <p> <code>is-group-source</code> - The resource is a group source. Valid values are <code>true</code> | <code>false</code>.</p> </li>
        /// <li> <p> <code>member-type</code> - The member type. Valid values are <code>igmp</code> | <code>static</code>.</p> </li>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The type of resource. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>tgw-peering</code>.</p> </li>
        /// <li> <p> <code>source-type</code> - The source type. Valid values are <code>igmp</code> | <code>static</code>.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>group-ip-address</code> - The IP address of the transit gateway multicast group.</p> </li>
        /// <li> <p> <code>is-group-member</code> - The resource is a group member. Valid values are <code>true</code> | <code>false</code>.</p> </li>
        /// <li> <p> <code>is-group-source</code> - The resource is a group source. Valid values are <code>true</code> | <code>false</code>.</p> </li>
        /// <li> <p> <code>member-type</code> - The member type. Valid values are <code>igmp</code> | <code>static</code>.</p> </li>
        /// <li> <p> <code>resource-id</code> - The ID of the resource.</p> </li>
        /// <li> <p> <code>resource-type</code> - The type of resource. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>tgw-peering</code>.</p> </li>
        /// <li> <p> <code>source-type</code> - The source type. Valid values are <code>igmp</code> | <code>static</code>.</p> </li>
        /// <li> <p> <code>subnet-id</code> - The ID of the subnet.</p> </li>
        /// <li> <p> <code>transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</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 token for the next page of results.</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 page of results.</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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `SearchTransitGatewayRoutes`.
    ///
    /// <p>Searches for routes in the specified transit gateway route table.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct SearchTransitGatewayRoutes {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::search_transit_gateway_routes_input::Builder,
    }
    impl SearchTransitGatewayRoutes {
        /// Creates a new `SearchTransitGatewayRoutes`.
        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::SearchTransitGatewayRoutes,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::SearchTransitGatewayRoutesError>,
        > {
            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::SearchTransitGatewayRoutesOutput,
            aws_smithy_http::result::SdkError<crate::error::SearchTransitGatewayRoutesError>,
        > {
            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 transit gateway route table.</p>
        pub fn transit_gateway_route_table_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.transit_gateway_route_table_id(input.into());
            self
        }
        /// <p>The ID of the transit gateway route table.</p>
        pub fn set_transit_gateway_route_table_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_transit_gateway_route_table_id(input);
            self
        }
        /// Appends an item to `Filters`.
        ///
        /// To override the contents of this collection use [`set_filters`](Self::set_filters).
        ///
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>attachment.transit-gateway-attachment-id</code>- The id of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>attachment.resource-id</code> - The resource id of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>attachment.resource-type</code> - The attachment resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>
        /// <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>
        /// <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>
        /// <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>
        /// <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>
        /// <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify supernet-of-match as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>
        /// <li> <p> <code>state</code> - The state of the route (<code>active</code> | <code>blackhole</code>).</p> </li>
        /// <li> <p> <code>type</code> - The type of route (<code>propagated</code> | <code>static</code>).</p> </li>
        /// </ul>
        pub fn filters(mut self, input: crate::model::Filter) -> Self {
            self.inner = self.inner.filters(input);
            self
        }
        /// <p>One or more filters. The possible values are:</p>
        /// <ul>
        /// <li> <p> <code>attachment.transit-gateway-attachment-id</code>- The id of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>attachment.resource-id</code> - The resource id of the transit gateway attachment.</p> </li>
        /// <li> <p> <code>attachment.resource-type</code> - The attachment resource type. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>peering</code> | <code>connect</code>.</p> </li>
        /// <li> <p> <code>prefix-list-id</code> - The ID of the prefix list.</p> </li>
        /// <li> <p> <code>route-search.exact-match</code> - The exact match of the specified filter.</p> </li>
        /// <li> <p> <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p> </li>
        /// <li> <p> <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p> </li>
        /// <li> <p> <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify supernet-of-match as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p> </li>
        /// <li> <p> <code>state</code> - The state of the route (<code>active</code> | <code>blackhole</code>).</p> </li>
        /// <li> <p> <code>type</code> - The type of route (<code>propagated</code> | <code>static</code>).</p> </li>
        /// </ul>
        pub fn set_filters(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::Filter>>,
        ) -> Self {
            self.inner = self.inner.set_filters(input);
            self
        }
        /// <p>The maximum number of routes 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 routes 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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `SendDiagnosticInterrupt`.
    ///
    /// <p>Sends a diagnostic interrupt to the specified Amazon EC2 instance to trigger a <i>kernel panic</i> (on Linux instances), or a <i>blue screen</i>/<i>stop error</i> (on Windows instances). For instances based on Intel and AMD processors, the interrupt is received as a <i>non-maskable interrupt</i> (NMI).</p>
    /// <p>In general, the operating system crashes and reboots when a kernel panic or stop error is triggered. The operating system can also be configured to perform diagnostic tasks, such as generating a memory dump file, loading a secondary kernel, or obtaining a call trace.</p>
    /// <p>Before sending a diagnostic interrupt to your instance, ensure that its operating system is configured to perform the required diagnostic tasks.</p>
    /// <p>For more information about configuring your operating system to generate a crash dump when a kernel panic or stop error occurs, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html">Send a diagnostic interrupt (for advanced users)</a> (Linux instances) or <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/diagnostic-interrupt.html">Send a diagnostic interrupt (for advanced users)</a> (Windows instances).</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct SendDiagnosticInterrupt {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::send_diagnostic_interrupt_input::Builder,
    }
    impl SendDiagnosticInterrupt {
        /// Creates a new `SendDiagnosticInterrupt`.
        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::SendDiagnosticInterrupt,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::SendDiagnosticInterruptError>,
        > {
            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::SendDiagnosticInterruptOutput,
            aws_smithy_http::result::SdkError<crate::error::SendDiagnosticInterruptError>,
        > {
            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 instance.</p>
        pub fn instance_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_id(input.into());
            self
        }
        /// <p>The ID of the instance.</p>
        pub fn set_instance_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_instance_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StartInstances`.
    ///
    /// <p>Starts an Amazon EBS-backed instance that you've previously stopped.</p>
    /// <p>Instances that use Amazon EBS volumes as their root devices can be quickly stopped and started. When an instance is stopped, the compute resources are released and you are not billed for instance usage. However, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. You can restart your instance at any time. Every time you start your instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage.</p>
    /// <p>Before stopping an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM.</p>
    /// <p>Performing this operation on an instance that uses an instance store as its root device returns an error.</p>
    /// <p>If you attempt to start a T3 instance with <code>host</code> tenancy and the <code>unlimted</code> CPU credit option, the request fails. The <code>unlimited</code> CPU credit option is not supported on Dedicated Hosts. Before you start the instance, either change its CPU credit option to <code>standard</code>, or change its tenancy to <code>default</code> or <code>dedicated</code>.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html">Stop and start your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_instances_input::Builder,
    }
    impl StartInstances {
        /// Creates a new `StartInstances`.
        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::StartInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StartInstancesError>,
        > {
            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::StartInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::StartInstancesError>,
        > {
            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 `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The IDs of the instances.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The IDs of the instances.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>Reserved.</p>
        pub fn additional_info(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.additional_info(input.into());
            self
        }
        /// <p>Reserved.</p>
        pub fn set_additional_info(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_additional_info(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StartNetworkInsightsAccessScopeAnalysis`.
    ///
    /// <p>Starts analyzing the specified Network Access Scope.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartNetworkInsightsAccessScopeAnalysis {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_network_insights_access_scope_analysis_input::Builder,
    }
    impl StartNetworkInsightsAccessScopeAnalysis {
        /// Creates a new `StartNetworkInsightsAccessScopeAnalysis`.
        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::StartNetworkInsightsAccessScopeAnalysis,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::StartNetworkInsightsAccessScopeAnalysisError,
            >,
        > {
            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::StartNetworkInsightsAccessScopeAnalysisOutput,
            aws_smithy_http::result::SdkError<
                crate::error::StartNetworkInsightsAccessScopeAnalysisError,
            >,
        > {
            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 Network Access Scope.</p>
        pub fn network_insights_access_scope_id(
            mut self,
            input: impl Into<std::string::String>,
        ) -> Self {
            self.inner = self.inner.network_insights_access_scope_id(input.into());
            self
        }
        /// <p>The ID of the Network Access Scope.</p>
        pub fn set_network_insights_access_scope_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_access_scope_id(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StartNetworkInsightsAnalysis`.
    ///
    /// <p>Starts analyzing the specified path. If the path is reachable, the operation returns the shortest feasible path.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartNetworkInsightsAnalysis {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_network_insights_analysis_input::Builder,
    }
    impl StartNetworkInsightsAnalysis {
        /// Creates a new `StartNetworkInsightsAnalysis`.
        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::StartNetworkInsightsAnalysis,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StartNetworkInsightsAnalysisError>,
        > {
            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::StartNetworkInsightsAnalysisOutput,
            aws_smithy_http::result::SdkError<crate::error::StartNetworkInsightsAnalysisError>,
        > {
            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 path.</p>
        pub fn network_insights_path_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_insights_path_id(input.into());
            self
        }
        /// <p>The ID of the path.</p>
        pub fn set_network_insights_path_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_insights_path_id(input);
            self
        }
        /// Appends an item to `AdditionalAccounts`.
        ///
        /// To override the contents of this collection use [`set_additional_accounts`](Self::set_additional_accounts).
        ///
        /// <p>The member accounts that contain resources that the path can traverse.</p>
        pub fn additional_accounts(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.additional_accounts(input.into());
            self
        }
        /// <p>The member accounts that contain resources that the path can traverse.</p>
        pub fn set_additional_accounts(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_additional_accounts(input);
            self
        }
        /// Appends an item to `FilterInArns`.
        ///
        /// To override the contents of this collection use [`set_filter_in_arns`](Self::set_filter_in_arns).
        ///
        /// <p>The Amazon Resource Names (ARN) of the resources that the path must traverse.</p>
        pub fn filter_in_arns(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.filter_in_arns(input.into());
            self
        }
        /// <p>The Amazon Resource Names (ARN) of the resources that the path must traverse.</p>
        pub fn set_filter_in_arns(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_filter_in_arns(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// Appends an item to `TagSpecifications`.
        ///
        /// To override the contents of this collection use [`set_tag_specifications`](Self::set_tag_specifications).
        ///
        /// <p>The tags to apply.</p>
        pub fn tag_specifications(mut self, input: crate::model::TagSpecification) -> Self {
            self.inner = self.inner.tag_specifications(input);
            self
        }
        /// <p>The tags to apply.</p>
        pub fn set_tag_specifications(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::TagSpecification>>,
        ) -> Self {
            self.inner = self.inner.set_tag_specifications(input);
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn client_token(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_token(input.into());
            self
        }
        /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
        pub fn set_client_token(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_client_token(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StartVpcEndpointServicePrivateDnsVerification`.
    ///
    /// <p>Initiates the verification process to prove that the service provider owns the private DNS name domain for the endpoint service.</p>
    /// <p>The service provider must successfully perform the verification before the consumer can use the name to access the service.</p>
    /// <p>Before the service provider runs this command, they must add a record to the DNS server.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartVpcEndpointServicePrivateDnsVerification {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_vpc_endpoint_service_private_dns_verification_input::Builder,
    }
    impl StartVpcEndpointServicePrivateDnsVerification {
        /// Creates a new `StartVpcEndpointServicePrivateDnsVerification`.
        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::StartVpcEndpointServicePrivateDnsVerification,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::StartVpcEndpointServicePrivateDnsVerificationError,
            >,
        > {
            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::StartVpcEndpointServicePrivateDnsVerificationOutput,
            aws_smithy_http::result::SdkError<
                crate::error::StartVpcEndpointServicePrivateDnsVerificationError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the endpoint service.</p>
        pub fn service_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.service_id(input.into());
            self
        }
        /// <p>The ID of the endpoint service.</p>
        pub fn set_service_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_service_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `StopInstances`.
    ///
    /// <p>Stops an Amazon EBS-backed instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html">Stop and start your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>You can use the Stop action to hibernate an instance if the instance is <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#enabling-hibernation">enabled for hibernation</a> and it meets the <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites">hibernation prerequisites</a>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>We don't charge usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. Every time you start your instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage.</p>
    /// <p>You can't stop or hibernate instance store-backed instances. You can't use the Stop action to hibernate Spot Instances, but you can specify that Amazon EC2 should hibernate Spot Instances when they are interrupted. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances">Hibernating interrupted Spot Instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>When you stop or hibernate an instance, we shut it down. You can restart your instance at any time. Before stopping or hibernating an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM, but hibernating an instance does preserve data stored in RAM. If an instance cannot hibernate successfully, a normal shutdown occurs.</p>
    /// <p>Stopping and hibernating an instance is different to rebooting or terminating it. For example, when you stop or hibernate an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, hibernating, and terminating instances, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html">Instance lifecycle</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>When you stop an instance, we attempt to shut it down forcibly after a short while. If your instance appears stuck in the stopping state after a period of time, there may be an issue with the underlying host computer. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html">Troubleshoot stopping your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StopInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::stop_instances_input::Builder,
    }
    impl StopInstances {
        /// Creates a new `StopInstances`.
        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::StopInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::StopInstancesError>,
        > {
            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::StopInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::StopInstancesError>,
        > {
            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 `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The IDs of the instances.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The IDs of the instances.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>Hibernates the instance if the instance was enabled for hibernation at launch. If the instance cannot hibernate successfully, a normal shutdown occurs. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p> Default: <code>false</code> </p>
        pub fn hibernate(mut self, input: bool) -> Self {
            self.inner = self.inner.hibernate(input);
            self
        }
        /// <p>Hibernates the instance if the instance was enabled for hibernation at launch. If the instance cannot hibernate successfully, a normal shutdown occurs. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
        /// <p> Default: <code>false</code> </p>
        pub fn set_hibernate(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_hibernate(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>Forces the instances to stop. The instances do not have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures. This option is not recommended for Windows instances.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn force(mut self, input: bool) -> Self {
            self.inner = self.inner.force(input);
            self
        }
        /// <p>Forces the instances to stop. The instances do not have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures. This option is not recommended for Windows instances.</p>
        /// <p>Default: <code>false</code> </p>
        pub fn set_force(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_force(input);
            self
        }
    }
    /// Fluent builder constructing a request to `TerminateClientVpnConnections`.
    ///
    /// <p>Terminates active Client VPN endpoint connections. This action can be used to terminate a specific client connection, or up to five connections established by a specific user.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct TerminateClientVpnConnections {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::terminate_client_vpn_connections_input::Builder,
    }
    impl TerminateClientVpnConnections {
        /// Creates a new `TerminateClientVpnConnections`.
        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::TerminateClientVpnConnections,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::TerminateClientVpnConnectionsError>,
        > {
            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::TerminateClientVpnConnectionsOutput,
            aws_smithy_http::result::SdkError<crate::error::TerminateClientVpnConnectionsError>,
        > {
            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 Client VPN endpoint to which the client is connected.</p>
        pub fn client_vpn_endpoint_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.client_vpn_endpoint_id(input.into());
            self
        }
        /// <p>The ID of the Client VPN endpoint to which the client is connected.</p>
        pub fn set_client_vpn_endpoint_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_client_vpn_endpoint_id(input);
            self
        }
        /// <p>The ID of the client connection to be terminated.</p>
        pub fn connection_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.connection_id(input.into());
            self
        }
        /// <p>The ID of the client connection to be terminated.</p>
        pub fn set_connection_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_connection_id(input);
            self
        }
        /// <p>The name of the user who initiated the connection. Use this option to terminate all active connections for the specified user. This option can only be used if the user has established up to five connections.</p>
        pub fn username(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.username(input.into());
            self
        }
        /// <p>The name of the user who initiated the connection. Use this option to terminate all active connections for the specified user. This option can only be used if the user has established up to five connections.</p>
        pub fn set_username(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_username(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `TerminateInstances`.
    ///
    /// <p>Shuts down the specified instances. This operation is idempotent; if you terminate an instance more than once, each call succeeds. </p>
    /// <p>If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated.</p>
    /// <p>If you terminate multiple instances across multiple Availability Zones, and one or more of the specified instances are enabled for termination protection, the request fails with the following results:</p>
    /// <ul>
    /// <li> <p>The specified instances that are in the same Availability Zone as the protected instance are not terminated.</p> </li>
    /// <li> <p>The specified instances that are in different Availability Zones, where no other specified instances are protected, are successfully terminated.</p> </li>
    /// </ul>
    /// <p>For example, say you have the following instances:</p>
    /// <ul>
    /// <li> <p>Instance A: <code>us-east-1a</code>; Not protected</p> </li>
    /// <li> <p>Instance B: <code>us-east-1a</code>; Not protected</p> </li>
    /// <li> <p>Instance C: <code>us-east-1b</code>; Protected</p> </li>
    /// <li> <p>Instance D: <code>us-east-1b</code>; not protected</p> </li>
    /// </ul>
    /// <p>If you attempt to terminate all of these instances in the same request, the request reports failure with the following results:</p>
    /// <ul>
    /// <li> <p>Instance A and Instance B are successfully terminated because none of the specified instances in <code>us-east-1a</code> are enabled for termination protection.</p> </li>
    /// <li> <p>Instance C and Instance D fail to terminate because at least one of the specified instances in <code>us-east-1b</code> (Instance C) is enabled for termination protection.</p> </li>
    /// </ul>
    /// <p>Terminated instances remain visible after termination (for approximately one hour).</p>
    /// <p>By default, Amazon EC2 deletes all EBS volumes that were attached when the instance launched. Volumes attached after instance launch continue running.</p>
    /// <p>You can stop, start, and terminate EBS-backed instances. You can only terminate instance store-backed instances. What happens to an instance differs if you stop it or terminate it. For example, when you stop an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, any attached EBS volumes with the <code>DeleteOnTermination</code> block device mapping parameter set to <code>true</code> are automatically deleted. For more information about the differences between stopping and terminating instances, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html">Instance lifecycle</a> in the <i>Amazon EC2 User Guide</i>.</p>
    /// <p>For more information about troubleshooting, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html">Troubleshooting terminating your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct TerminateInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::terminate_instances_input::Builder,
    }
    impl TerminateInstances {
        /// Creates a new `TerminateInstances`.
        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::TerminateInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::TerminateInstancesError>,
        > {
            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::TerminateInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::TerminateInstancesError>,
        > {
            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 `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The IDs of the instances.</p>
        /// <p>Constraints: Up to 1000 instance IDs. We recommend breaking up this request into smaller batches.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The IDs of the instances.</p>
        /// <p>Constraints: Up to 1000 instance IDs. We recommend breaking up this request into smaller batches.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UnassignIpv6Addresses`.
    ///
    /// <p>Unassigns one or more IPv6 addresses IPv4 Prefix Delegation prefixes from a network interface.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UnassignIpv6Addresses {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::unassign_ipv6_addresses_input::Builder,
    }
    impl UnassignIpv6Addresses {
        /// Creates a new `UnassignIpv6Addresses`.
        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::UnassignIpv6Addresses,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UnassignIpv6AddressesError>,
        > {
            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::UnassignIpv6AddressesOutput,
            aws_smithy_http::result::SdkError<crate::error::UnassignIpv6AddressesError>,
        > {
            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 `Ipv6Addresses`.
        ///
        /// To override the contents of this collection use [`set_ipv6_addresses`](Self::set_ipv6_addresses).
        ///
        /// <p>The IPv6 addresses to unassign from the network interface.</p>
        pub fn ipv6_addresses(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_addresses(input.into());
            self
        }
        /// <p>The IPv6 addresses to unassign from the network interface.</p>
        pub fn set_ipv6_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_addresses(input);
            self
        }
        /// Appends an item to `Ipv6Prefixes`.
        ///
        /// To override the contents of this collection use [`set_ipv6_prefixes`](Self::set_ipv6_prefixes).
        ///
        /// <p>The IPv6 prefixes to unassign from the network interface.</p>
        pub fn ipv6_prefixes(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv6_prefixes(input.into());
            self
        }
        /// <p>The IPv6 prefixes to unassign from the network interface.</p>
        pub fn set_ipv6_prefixes(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipv6_prefixes(input);
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UnassignPrivateIpAddresses`.
    ///
    /// <p>Unassigns one or more secondary private IP addresses, or IPv4 Prefix Delegation prefixes from a network interface.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UnassignPrivateIpAddresses {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::unassign_private_ip_addresses_input::Builder,
    }
    impl UnassignPrivateIpAddresses {
        /// Creates a new `UnassignPrivateIpAddresses`.
        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::UnassignPrivateIpAddresses,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UnassignPrivateIpAddressesError>,
        > {
            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::UnassignPrivateIpAddressesOutput,
            aws_smithy_http::result::SdkError<crate::error::UnassignPrivateIpAddressesError>,
        > {
            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 network interface.</p>
        pub fn network_interface_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.network_interface_id(input.into());
            self
        }
        /// <p>The ID of the network interface.</p>
        pub fn set_network_interface_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_network_interface_id(input);
            self
        }
        /// Appends an item to `PrivateIpAddresses`.
        ///
        /// To override the contents of this collection use [`set_private_ip_addresses`](Self::set_private_ip_addresses).
        ///
        /// <p>The secondary private IP addresses to unassign from the network interface. You can specify this option multiple times to unassign more than one IP address.</p>
        pub fn private_ip_addresses(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.private_ip_addresses(input.into());
            self
        }
        /// <p>The secondary private IP addresses to unassign from the network interface. You can specify this option multiple times to unassign more than one IP address.</p>
        pub fn set_private_ip_addresses(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_private_ip_addresses(input);
            self
        }
        /// Appends an item to `Ipv4Prefixes`.
        ///
        /// To override the contents of this collection use [`set_ipv4_prefixes`](Self::set_ipv4_prefixes).
        ///
        /// <p>The IPv4 prefixes to unassign from the network interface.</p>
        pub fn ipv4_prefixes(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.ipv4_prefixes(input.into());
            self
        }
        /// <p>The IPv4 prefixes to unassign from the network interface.</p>
        pub fn set_ipv4_prefixes(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_ipv4_prefixes(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UnmonitorInstances`.
    ///
    /// <p>Disables detailed monitoring for a running instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html">Monitoring your instances and volumes</a> in the <i>Amazon EC2 User Guide</i>.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UnmonitorInstances {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::unmonitor_instances_input::Builder,
    }
    impl UnmonitorInstances {
        /// Creates a new `UnmonitorInstances`.
        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::UnmonitorInstances,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::UnmonitorInstancesError>,
        > {
            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::UnmonitorInstancesOutput,
            aws_smithy_http::result::SdkError<crate::error::UnmonitorInstancesError>,
        > {
            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 `InstanceIds`.
        ///
        /// To override the contents of this collection use [`set_instance_ids`](Self::set_instance_ids).
        ///
        /// <p>The IDs of the instances.</p>
        pub fn instance_ids(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.instance_ids(input.into());
            self
        }
        /// <p>The IDs of the instances.</p>
        pub fn set_instance_ids(
            mut self,
            input: std::option::Option<std::vec::Vec<std::string::String>>,
        ) -> Self {
            self.inner = self.inner.set_instance_ids(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateSecurityGroupRuleDescriptionsEgress`.
    ///
    /// <p>[VPC only] Updates the description of an egress (outbound) security group rule. You can replace an existing description, or add a description to a rule that did not have one previously. You can remove a description for a security group rule by omitting the description parameter in the request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateSecurityGroupRuleDescriptionsEgress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_security_group_rule_descriptions_egress_input::Builder,
    }
    impl UpdateSecurityGroupRuleDescriptionsEgress {
        /// Creates a new `UpdateSecurityGroupRuleDescriptionsEgress`.
        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::UpdateSecurityGroupRuleDescriptionsEgress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::UpdateSecurityGroupRuleDescriptionsEgressError,
            >,
        > {
            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::UpdateSecurityGroupRuleDescriptionsEgressOutput,
            aws_smithy_http::result::SdkError<
                crate::error::UpdateSecurityGroupRuleDescriptionsEgressError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
        /// <p>[Default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request.</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>[Default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request.</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// Appends an item to `IpPermissions`.
        ///
        /// To override the contents of this collection use [`set_ip_permissions`](Self::set_ip_permissions).
        ///
        /// <p>The IP permissions for the security group rule. You must specify either the IP permissions or the description.</p>
        pub fn ip_permissions(mut self, input: crate::model::IpPermission) -> Self {
            self.inner = self.inner.ip_permissions(input);
            self
        }
        /// <p>The IP permissions for the security group rule. You must specify either the IP permissions or the description.</p>
        pub fn set_ip_permissions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::IpPermission>>,
        ) -> Self {
            self.inner = self.inner.set_ip_permissions(input);
            self
        }
        /// Appends an item to `SecurityGroupRuleDescriptions`.
        ///
        /// To override the contents of this collection use [`set_security_group_rule_descriptions`](Self::set_security_group_rule_descriptions).
        ///
        /// <p>The description for the egress security group rules. You must specify either the description or the IP permissions.</p>
        pub fn security_group_rule_descriptions(
            mut self,
            input: crate::model::SecurityGroupRuleDescription,
        ) -> Self {
            self.inner = self.inner.security_group_rule_descriptions(input);
            self
        }
        /// <p>The description for the egress security group rules. You must specify either the description or the IP permissions.</p>
        pub fn set_security_group_rule_descriptions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::SecurityGroupRuleDescription>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_rule_descriptions(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateSecurityGroupRuleDescriptionsIngress`.
    ///
    /// <p>Updates the description of an ingress (inbound) security group rule. You can replace an existing description, or add a description to a rule that did not have one previously. You can remove a description for a security group rule by omitting the description parameter in the request.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateSecurityGroupRuleDescriptionsIngress {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_security_group_rule_descriptions_ingress_input::Builder,
    }
    impl UpdateSecurityGroupRuleDescriptionsIngress {
        /// Creates a new `UpdateSecurityGroupRuleDescriptionsIngress`.
        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::UpdateSecurityGroupRuleDescriptionsIngress,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<
                crate::error::UpdateSecurityGroupRuleDescriptionsIngressError,
            >,
        > {
            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::UpdateSecurityGroupRuleDescriptionsIngressOutput,
            aws_smithy_http::result::SdkError<
                crate::error::UpdateSecurityGroupRuleDescriptionsIngressError,
            >,
        > {
            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>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(input);
            self
        }
        /// <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn group_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_id(input.into());
            self
        }
        /// <p>The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn set_group_id(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_id(input);
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn group_name(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.group_name(input.into());
            self
        }
        /// <p>[EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.</p>
        pub fn set_group_name(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_group_name(input);
            self
        }
        /// Appends an item to `IpPermissions`.
        ///
        /// To override the contents of this collection use [`set_ip_permissions`](Self::set_ip_permissions).
        ///
        /// <p>The IP permissions for the security group rule. You must specify either IP permissions or a description.</p>
        pub fn ip_permissions(mut self, input: crate::model::IpPermission) -> Self {
            self.inner = self.inner.ip_permissions(input);
            self
        }
        /// <p>The IP permissions for the security group rule. You must specify either IP permissions or a description.</p>
        pub fn set_ip_permissions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::IpPermission>>,
        ) -> Self {
            self.inner = self.inner.set_ip_permissions(input);
            self
        }
        /// Appends an item to `SecurityGroupRuleDescriptions`.
        ///
        /// To override the contents of this collection use [`set_security_group_rule_descriptions`](Self::set_security_group_rule_descriptions).
        ///
        /// <p>[VPC only] The description for the ingress security group rules. You must specify either a description or IP permissions.</p>
        pub fn security_group_rule_descriptions(
            mut self,
            input: crate::model::SecurityGroupRuleDescription,
        ) -> Self {
            self.inner = self.inner.security_group_rule_descriptions(input);
            self
        }
        /// <p>[VPC only] The description for the ingress security group rules. You must specify either a description or IP permissions.</p>
        pub fn set_security_group_rule_descriptions(
            mut self,
            input: std::option::Option<std::vec::Vec<crate::model::SecurityGroupRuleDescription>>,
        ) -> Self {
            self.inner = self.inner.set_security_group_rule_descriptions(input);
            self
        }
    }
    /// Fluent builder constructing a request to `WithdrawByoipCidr`.
    ///
    /// <p>Stops advertising an address range that is provisioned as an address pool.</p>
    /// <p>You can perform this operation at most once every 10 seconds, even if you specify different address ranges each time.</p>
    /// <p>It can take a few minutes before traffic to the specified addresses stops routing to Amazon Web Services because of BGP propagation delays.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct WithdrawByoipCidr {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::withdraw_byoip_cidr_input::Builder,
    }
    impl WithdrawByoipCidr {
        /// Creates a new `WithdrawByoipCidr`.
        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::WithdrawByoipCidr,
                aws_http::retry::AwsResponseRetryClassifier,
            >,
            aws_smithy_http::result::SdkError<crate::error::WithdrawByoipCidrError>,
        > {
            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::WithdrawByoipCidrOutput,
            aws_smithy_http::result::SdkError<crate::error::WithdrawByoipCidrError>,
        > {
            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 address range, in CIDR notation.</p>
        pub fn cidr(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.cidr(input.into());
            self
        }
        /// <p>The address range, in CIDR notation.</p>
        pub fn set_cidr(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_cidr(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn dry_run(mut self, input: bool) -> Self {
            self.inner = self.inner.dry_run(input);
            self
        }
        /// <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
        pub fn set_dry_run(mut self, input: std::option::Option<bool>) -> Self {
            self.inner = self.inner.set_dry_run(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 }),
        }
    }
}