aws-sdk-arczonalshift 0.2.0

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

/// Client for AWS ARC - Zonal Shift
///
/// Client for invoking operations on AWS ARC - Zonal Shift. Each operation on AWS ARC - Zonal Shift 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_arczonalshift::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_arczonalshift::config::Builder::from(&shared_config)
///   .retry_config(RetryConfig::disabled())
///   .build();
/// let client = aws_sdk_arczonalshift::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 [`CancelZonalShift`](crate::client::fluent_builders::CancelZonalShift) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`zonal_shift_id(impl Into<String>)`](crate::client::fluent_builders::CancelZonalShift::zonal_shift_id) / [`set_zonal_shift_id(Option<String>)`](crate::client::fluent_builders::CancelZonalShift::set_zonal_shift_id): <p>The internally-generated identifier of a zonal shift.</p>
    /// - On success, responds with [`CancelZonalShiftOutput`](crate::output::CancelZonalShiftOutput) with field(s):
    ///   - [`zonal_shift_id(Option<String>)`](crate::output::CancelZonalShiftOutput::zonal_shift_id): <p>The identifier of a zonal shift.</p>
    ///   - [`resource_identifier(Option<String>)`](crate::output::CancelZonalShiftOutput::resource_identifier): <p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>  <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
    ///   - [`away_from(Option<String>)`](crate::output::CancelZonalShiftOutput::away_from): <p>The Availability Zone that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the AWS Region.</p>
    ///   - [`expiry_time(Option<DateTime>)`](crate::output::CancelZonalShiftOutput::expiry_time): <p>The expiry time (expiration time) for the zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p>  <p>When you start a zonal shift, you specify how long you want it to be active, which Route 53 ARC converts to an expiry time (expiration time). You can cancel a zonal shift, for example, if you're ready to restore traffic to the Availability Zone. Or you can update the zonal shift to specify another length of time to expire in.</p>
    ///   - [`start_time(Option<DateTime>)`](crate::output::CancelZonalShiftOutput::start_time): <p>The time (UTC) when the zonal shift is started.</p>
    ///   - [`status(Option<ZonalShiftStatus>)`](crate::output::CancelZonalShiftOutput::status): <p>A status for a zonal shift.</p>  <p>The <code>Status</code> for a zonal shift can have one of the following values:</p>  <ul>   <li> <p> <b>ACTIVE:</b> The zonal shift is started and active.</p> </li>   <li> <p> <b>EXPIRED:</b> The zonal shift has expired (the expiry time was exceeded).</p> </li>   <li> <p> <b>CANCELED:</b> The zonal shift was canceled.</p> </li>  </ul>
    ///   - [`comment(Option<String>)`](crate::output::CancelZonalShiftOutput::comment): <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
    /// - On failure, responds with [`SdkError<CancelZonalShiftError>`](crate::error::CancelZonalShiftError)
    pub fn cancel_zonal_shift(&self) -> fluent_builders::CancelZonalShift {
        fluent_builders::CancelZonalShift::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`GetManagedResource`](crate::client::fluent_builders::GetManagedResource) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`resource_identifier(impl Into<String>)`](crate::client::fluent_builders::GetManagedResource::resource_identifier) / [`set_resource_identifier(Option<String>)`](crate::client::fluent_builders::GetManagedResource::set_resource_identifier): <p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>  <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
    /// - On success, responds with [`GetManagedResourceOutput`](crate::output::GetManagedResourceOutput) with field(s):
    ///   - [`arn(Option<String>)`](crate::output::GetManagedResourceOutput::arn): <p>The Amazon Resource Name (ARN) for the resource.</p>
    ///   - [`name(Option<String>)`](crate::output::GetManagedResourceOutput::name): <p>The name of the resource.</p>
    ///   - [`applied_weights(Option<HashMap<String, f32>>)`](crate::output::GetManagedResourceOutput::applied_weights): <p>A collection of key-value pairs that indicate whether resources are active in Availability Zones or not. The key name is the Availability Zone where the resource is deployed. The value is 1 or 0.</p>
    ///   - [`zonal_shifts(Option<Vec<ZonalShiftInResource>>)`](crate::output::GetManagedResourceOutput::zonal_shifts): <p>The zonal shifts that are currently active for a resource. </p>
    /// - On failure, responds with [`SdkError<GetManagedResourceError>`](crate::error::GetManagedResourceError)
    pub fn get_managed_resource(&self) -> fluent_builders::GetManagedResource {
        fluent_builders::GetManagedResource::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListManagedResources`](crate::client::fluent_builders::ListManagedResources) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListManagedResources::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListManagedResources::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListManagedResources::set_next_token): <p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListManagedResources::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListManagedResources::set_max_results): <p>The number of objects that you want to return with this call.</p>
    /// - On success, responds with [`ListManagedResourcesOutput`](crate::output::ListManagedResourcesOutput) with field(s):
    ///   - [`items(Option<Vec<ManagedResourceSummary>>)`](crate::output::ListManagedResourcesOutput::items): <p>The items in the response list.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListManagedResourcesOutput::next_token): <p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>
    /// - On failure, responds with [`SdkError<ListManagedResourcesError>`](crate::error::ListManagedResourcesError)
    pub fn list_managed_resources(&self) -> fluent_builders::ListManagedResources {
        fluent_builders::ListManagedResources::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`ListZonalShifts`](crate::client::fluent_builders::ListZonalShifts) operation.
    /// This operation supports pagination; See [`into_paginator()`](crate::client::fluent_builders::ListZonalShifts::into_paginator).
    ///
    /// - The fluent builder is configurable:
    ///   - [`next_token(impl Into<String>)`](crate::client::fluent_builders::ListZonalShifts::next_token) / [`set_next_token(Option<String>)`](crate::client::fluent_builders::ListZonalShifts::set_next_token): <p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>
    ///   - [`status(ZonalShiftStatus)`](crate::client::fluent_builders::ListZonalShifts::status) / [`set_status(Option<ZonalShiftStatus>)`](crate::client::fluent_builders::ListZonalShifts::set_status): <p>A status for a zonal shift.</p>  <p>The <code>Status</code> for a zonal shift can have one of the following values:</p>  <ul>   <li> <p> <b>ACTIVE</b>: The zonal shift is started and active.</p> </li>   <li> <p> <b>EXPIRED</b>: The zonal shift has expired (the expiry time was exceeded).</p> </li>   <li> <p> <b>CANCELED</b>: The zonal shift was canceled.</p> </li>  </ul>
    ///   - [`max_results(i32)`](crate::client::fluent_builders::ListZonalShifts::max_results) / [`set_max_results(Option<i32>)`](crate::client::fluent_builders::ListZonalShifts::set_max_results): <p>The number of objects that you want to return with this call.</p>
    /// - On success, responds with [`ListZonalShiftsOutput`](crate::output::ListZonalShiftsOutput) with field(s):
    ///   - [`items(Option<Vec<ZonalShiftSummary>>)`](crate::output::ListZonalShiftsOutput::items): <p>The items in the response list.</p>
    ///   - [`next_token(Option<String>)`](crate::output::ListZonalShiftsOutput::next_token): <p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>
    /// - On failure, responds with [`SdkError<ListZonalShiftsError>`](crate::error::ListZonalShiftsError)
    pub fn list_zonal_shifts(&self) -> fluent_builders::ListZonalShifts {
        fluent_builders::ListZonalShifts::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`StartZonalShift`](crate::client::fluent_builders::StartZonalShift) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`resource_identifier(impl Into<String>)`](crate::client::fluent_builders::StartZonalShift::resource_identifier) / [`set_resource_identifier(Option<String>)`](crate::client::fluent_builders::StartZonalShift::set_resource_identifier): <p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>  <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
    ///   - [`away_from(impl Into<String>)`](crate::client::fluent_builders::StartZonalShift::away_from) / [`set_away_from(Option<String>)`](crate::client::fluent_builders::StartZonalShift::set_away_from): <p>The Availability Zone that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the AWS Region.</p>
    ///   - [`expires_in(impl Into<String>)`](crate::client::fluent_builders::StartZonalShift::expires_in) / [`set_expires_in(Option<String>)`](crate::client::fluent_builders::StartZonalShift::set_expires_in): <p>The length of time that you want a zonal shift to be active, which Route 53 ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p>  <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p>  <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p>  <ul>   <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li>   <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li>  </ul>  <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>
    ///   - [`comment(impl Into<String>)`](crate::client::fluent_builders::StartZonalShift::comment) / [`set_comment(Option<String>)`](crate::client::fluent_builders::StartZonalShift::set_comment): <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
    /// - On success, responds with [`StartZonalShiftOutput`](crate::output::StartZonalShiftOutput) with field(s):
    ///   - [`zonal_shift_id(Option<String>)`](crate::output::StartZonalShiftOutput::zonal_shift_id): <p>The identifier of a zonal shift.</p>
    ///   - [`resource_identifier(Option<String>)`](crate::output::StartZonalShiftOutput::resource_identifier): <p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>  <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
    ///   - [`away_from(Option<String>)`](crate::output::StartZonalShiftOutput::away_from): <p>The Availability Zone that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the AWS Region.</p>
    ///   - [`expiry_time(Option<DateTime>)`](crate::output::StartZonalShiftOutput::expiry_time): <p>The expiry time (expiration time) for the zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p>  <p>When you start a zonal shift, you specify how long you want it to be active, which Route 53 ARC converts to an expiry time (expiration time). You can cancel a zonal shift, for example, if you're ready to restore traffic to the Availability Zone. Or you can update the zonal shift to specify another length of time to expire in.</p>
    ///   - [`start_time(Option<DateTime>)`](crate::output::StartZonalShiftOutput::start_time): <p>The time (UTC) when the zonal shift is started.</p>
    ///   - [`status(Option<ZonalShiftStatus>)`](crate::output::StartZonalShiftOutput::status): <p>A status for a zonal shift.</p>  <p>The <code>Status</code> for a zonal shift can have one of the following values:</p>  <ul>   <li> <p> <b>ACTIVE:</b> The zonal shift is started and active.</p> </li>   <li> <p> <b>EXPIRED:</b> The zonal shift has expired (the expiry time was exceeded).</p> </li>   <li> <p> <b>CANCELED:</b> The zonal shift was canceled.</p> </li>  </ul>
    ///   - [`comment(Option<String>)`](crate::output::StartZonalShiftOutput::comment): <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
    /// - On failure, responds with [`SdkError<StartZonalShiftError>`](crate::error::StartZonalShiftError)
    pub fn start_zonal_shift(&self) -> fluent_builders::StartZonalShift {
        fluent_builders::StartZonalShift::new(self.handle.clone())
    }
    /// Constructs a fluent builder for the [`UpdateZonalShift`](crate::client::fluent_builders::UpdateZonalShift) operation.
    ///
    /// - The fluent builder is configurable:
    ///   - [`zonal_shift_id(impl Into<String>)`](crate::client::fluent_builders::UpdateZonalShift::zonal_shift_id) / [`set_zonal_shift_id(Option<String>)`](crate::client::fluent_builders::UpdateZonalShift::set_zonal_shift_id): <p>The identifier of a zonal shift.</p>
    ///   - [`comment(impl Into<String>)`](crate::client::fluent_builders::UpdateZonalShift::comment) / [`set_comment(Option<String>)`](crate::client::fluent_builders::UpdateZonalShift::set_comment): <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
    ///   - [`expires_in(impl Into<String>)`](crate::client::fluent_builders::UpdateZonalShift::expires_in) / [`set_expires_in(Option<String>)`](crate::client::fluent_builders::UpdateZonalShift::set_expires_in): <p>The length of time that you want a zonal shift to be active, which Route 53 ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p>  <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p>  <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p>  <ul>   <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li>   <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li>  </ul>  <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>
    /// - On success, responds with [`UpdateZonalShiftOutput`](crate::output::UpdateZonalShiftOutput) with field(s):
    ///   - [`zonal_shift_id(Option<String>)`](crate::output::UpdateZonalShiftOutput::zonal_shift_id): <p>The identifier of a zonal shift.</p>
    ///   - [`resource_identifier(Option<String>)`](crate::output::UpdateZonalShiftOutput::resource_identifier): <p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>  <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
    ///   - [`away_from(Option<String>)`](crate::output::UpdateZonalShiftOutput::away_from): <p>The Availability Zone that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the AWS Region.</p>
    ///   - [`expiry_time(Option<DateTime>)`](crate::output::UpdateZonalShiftOutput::expiry_time): <p>The expiry time (expiration time) for the zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p>  <p>When you start a zonal shift, you specify how long you want it to be active, which Route 53 ARC converts to an expiry time (expiration time). You can cancel a zonal shift, for example, if you're ready to restore traffic to the Availability Zone. Or you can update the zonal shift to specify another length of time to expire in.</p>
    ///   - [`start_time(Option<DateTime>)`](crate::output::UpdateZonalShiftOutput::start_time): <p>The time (UTC) when the zonal shift is started.</p>
    ///   - [`status(Option<ZonalShiftStatus>)`](crate::output::UpdateZonalShiftOutput::status): <p>A status for a zonal shift.</p>  <p>The <code>Status</code> for a zonal shift can have one of the following values:</p>  <ul>   <li> <p> <b>ACTIVE:</b> The zonal shift is started and active.</p> </li>   <li> <p> <b>EXPIRED:</b> The zonal shift has expired (the expiry time was exceeded).</p> </li>   <li> <p> <b>CANCELED:</b> The zonal shift was canceled.</p> </li>  </ul>
    ///   - [`comment(Option<String>)`](crate::output::UpdateZonalShiftOutput::comment): <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
    /// - On failure, responds with [`SdkError<UpdateZonalShiftError>`](crate::error::UpdateZonalShiftError)
    pub fn update_zonal_shift(&self) -> fluent_builders::UpdateZonalShift {
        fluent_builders::UpdateZonalShift::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 `CancelZonalShift`.
    ///
    /// <p>Cancel a zonal shift in Amazon Route 53 Application Recovery Controller that you've started for a resource in your AWS account in an AWS Region. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct CancelZonalShift {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::cancel_zonal_shift_input::Builder,
    }
    impl CancelZonalShift {
        /// Creates a new `CancelZonalShift`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

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

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::CancelZonalShiftOutput,
            aws_smithy_http::result::SdkError<crate::error::CancelZonalShiftError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?
                .make_operation(&self.handle.conf)
                .await
                .map_err(aws_smithy_http::result::SdkError::construction_failure)?;
            self.handle.client.call(op).await
        }
        /// <p>The internally-generated identifier of a zonal shift.</p>
        pub fn zonal_shift_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.zonal_shift_id(input.into());
            self
        }
        /// <p>The internally-generated identifier of a zonal shift.</p>
        pub fn set_zonal_shift_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_zonal_shift_id(input);
            self
        }
    }
    /// Fluent builder constructing a request to `GetManagedResource`.
    ///
    /// <p>Get information about a resource that's been registered for zonal shifts with Amazon Route 53 Application Recovery Controller in this AWS Region. Resources that are registered for zonal shifts are managed resources in Route 53 ARC.</p>
    /// <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct GetManagedResource {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::get_managed_resource_input::Builder,
    }
    impl GetManagedResource {
        /// Creates a new `GetManagedResource`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

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

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::GetManagedResourceOutput,
            aws_smithy_http::result::SdkError<crate::error::GetManagedResourceError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_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 for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>
        /// <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
        pub fn resource_identifier(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_identifier(input.into());
            self
        }
        /// <p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>
        /// <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
        pub fn set_resource_identifier(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_resource_identifier(input);
            self
        }
    }
    /// Fluent builder constructing a request to `ListManagedResources`.
    ///
    /// <p>Lists all the resources in your AWS account in this AWS Region that are managed for zonal shifts in Amazon Route 53 Application Recovery Controller, and information about them. The information includes their Amazon Resource Names (ARNs), the Availability Zones the resources are deployed in, and the resource name.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListManagedResources {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_managed_resources_input::Builder,
    }
    impl ListManagedResources {
        /// Creates a new `ListManagedResources`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

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

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListManagedResourcesOutput,
            aws_smithy_http::result::SdkError<crate::error::ListManagedResourcesError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::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::ListManagedResourcesPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListManagedResourcesPaginator {
            crate::paginator::ListManagedResourcesPaginator::new(self.handle, self.inner)
        }
        /// <p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response 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>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response 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 number of objects that you want to return with this call.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The number of objects that you want to return with this 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 `ListZonalShifts`.
    ///
    /// <p>Lists all the active zonal shifts in Amazon Route 53 Application Recovery Controller in your AWS account in this AWS Region.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct ListZonalShifts {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::list_zonal_shifts_input::Builder,
    }
    impl ListZonalShifts {
        /// Creates a new `ListZonalShifts`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

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

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::ListZonalShiftsOutput,
            aws_smithy_http::result::SdkError<crate::error::ListZonalShiftsError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::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::ListZonalShiftsPaginator::send) which returns a [`Stream`](tokio_stream::Stream).
        pub fn into_paginator(self) -> crate::paginator::ListZonalShiftsPaginator {
            crate::paginator::ListZonalShiftsPaginator::new(self.handle, self.inner)
        }
        /// <p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response 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>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response 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>A status for a zonal shift.</p>
        /// <p>The <code>Status</code> for a zonal shift can have one of the following values:</p>
        /// <ul>
        /// <li> <p> <b>ACTIVE</b>: The zonal shift is started and active.</p> </li>
        /// <li> <p> <b>EXPIRED</b>: The zonal shift has expired (the expiry time was exceeded).</p> </li>
        /// <li> <p> <b>CANCELED</b>: The zonal shift was canceled.</p> </li>
        /// </ul>
        pub fn status(mut self, input: crate::model::ZonalShiftStatus) -> Self {
            self.inner = self.inner.status(input);
            self
        }
        /// <p>A status for a zonal shift.</p>
        /// <p>The <code>Status</code> for a zonal shift can have one of the following values:</p>
        /// <ul>
        /// <li> <p> <b>ACTIVE</b>: The zonal shift is started and active.</p> </li>
        /// <li> <p> <b>EXPIRED</b>: The zonal shift has expired (the expiry time was exceeded).</p> </li>
        /// <li> <p> <b>CANCELED</b>: The zonal shift was canceled.</p> </li>
        /// </ul>
        pub fn set_status(
            mut self,
            input: std::option::Option<crate::model::ZonalShiftStatus>,
        ) -> Self {
            self.inner = self.inner.set_status(input);
            self
        }
        /// <p>The number of objects that you want to return with this call.</p>
        pub fn max_results(mut self, input: i32) -> Self {
            self.inner = self.inner.max_results(input);
            self
        }
        /// <p>The number of objects that you want to return with this 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 `StartZonalShift`.
    ///
    /// <p>You start a zonal shift to temporarily move load balancer traffic away from an Availability Zone in a AWS Region, to help your application recover immediately, for example, from a developer's bad code deployment or from an AWS infrastructure failure in a single Availability Zone. You can start a zonal shift in Route 53 ARC only for managed resources in your account in an AWS Region. Resources are automatically registered with Route 53 ARC by AWS services.</p>
    /// <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
    /// <p>When you start a zonal shift, traffic for the resource is no longer routed to the Availability Zone. The zonal shift is created immediately in Route 53 ARC. However, it can take a short time, typically up to a few minutes, for existing, in-progress connections in the Availability Zone to complete.</p>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html">Zonal shift</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct StartZonalShift {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::start_zonal_shift_input::Builder,
    }
    impl StartZonalShift {
        /// Creates a new `StartZonalShift`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

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

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::StartZonalShiftOutput,
            aws_smithy_http::result::SdkError<crate::error::StartZonalShiftError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_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 for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>
        /// <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
        pub fn resource_identifier(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.resource_identifier(input.into());
            self
        }
        /// <p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p>
        /// <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>
        pub fn set_resource_identifier(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_resource_identifier(input);
            self
        }
        /// <p>The Availability Zone that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the AWS Region.</p>
        pub fn away_from(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.away_from(input.into());
            self
        }
        /// <p>The Availability Zone that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the AWS Region.</p>
        pub fn set_away_from(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_away_from(input);
            self
        }
        /// <p>The length of time that you want a zonal shift to be active, which Route 53 ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p>
        /// <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p>
        /// <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p>
        /// <ul>
        /// <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li>
        /// <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li>
        /// </ul>
        /// <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>
        pub fn expires_in(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.expires_in(input.into());
            self
        }
        /// <p>The length of time that you want a zonal shift to be active, which Route 53 ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p>
        /// <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p>
        /// <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p>
        /// <ul>
        /// <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li>
        /// <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li>
        /// </ul>
        /// <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>
        pub fn set_expires_in(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_expires_in(input);
            self
        }
        /// <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
        pub fn comment(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.comment(input.into());
            self
        }
        /// <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
        pub fn set_comment(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_comment(input);
            self
        }
    }
    /// Fluent builder constructing a request to `UpdateZonalShift`.
    ///
    /// <p>Update an active zonal shift in Amazon Route 53 Application Recovery Controller in your AWS account. You can update a zonal shift to set a new expiration, or edit or replace the comment for the zonal shift. </p>
    #[derive(std::clone::Clone, std::fmt::Debug)]
    pub struct UpdateZonalShift {
        handle: std::sync::Arc<super::Handle>,
        inner: crate::input::update_zonal_shift_input::Builder,
    }
    impl UpdateZonalShift {
        /// Creates a new `UpdateZonalShift`.
        pub(crate) fn new(handle: std::sync::Arc<super::Handle>) -> Self {
            Self {
                handle,
                inner: Default::default(),
            }
        }

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

        /// Sends the request and returns the response.
        ///
        /// If an error occurs, an `SdkError` will be returned with additional details that
        /// can be matched against.
        ///
        /// By default, any retryable failures will be retried twice. Retry behavior
        /// is configurable with the [RetryConfig](aws_smithy_types::retry::RetryConfig), which can be
        /// set when configuring the client.
        pub async fn send(
            self,
        ) -> std::result::Result<
            crate::output::UpdateZonalShiftOutput,
            aws_smithy_http::result::SdkError<crate::error::UpdateZonalShiftError>,
        > {
            let op = self
                .inner
                .build()
                .map_err(aws_smithy_http::result::SdkError::construction_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 a zonal shift.</p>
        pub fn zonal_shift_id(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.zonal_shift_id(input.into());
            self
        }
        /// <p>The identifier of a zonal shift.</p>
        pub fn set_zonal_shift_id(
            mut self,
            input: std::option::Option<std::string::String>,
        ) -> Self {
            self.inner = self.inner.set_zonal_shift_id(input);
            self
        }
        /// <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
        pub fn comment(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.comment(input.into());
            self
        }
        /// <p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>
        pub fn set_comment(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_comment(input);
            self
        }
        /// <p>The length of time that you want a zonal shift to be active, which Route 53 ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p>
        /// <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p>
        /// <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p>
        /// <ul>
        /// <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li>
        /// <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li>
        /// </ul>
        /// <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>
        pub fn expires_in(mut self, input: impl Into<std::string::String>) -> Self {
            self.inner = self.inner.expires_in(input.into());
            self
        }
        /// <p>The length of time that you want a zonal shift to be active, which Route 53 ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p>
        /// <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p>
        /// <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p>
        /// <ul>
        /// <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li>
        /// <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li>
        /// </ul>
        /// <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>
        pub fn set_expires_in(mut self, input: std::option::Option<std::string::String>) -> Self {
            self.inner = self.inner.set_expires_in(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 }),
        }
    }
}