{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.CloudSearch.DescribeAvailabilityOptions
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets the availability options configured for a domain. By default, shows
-- the configuration with any pending changes. Set the @Deployed@ option to
-- @true@ to show the active configuration and exclude pending changes. For
-- more information, see
-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-availability-options.html Configuring Availability Options>
-- in the /Amazon CloudSearch Developer Guide/.
module Amazonka.CloudSearch.DescribeAvailabilityOptions
  ( -- * Creating a Request
    DescribeAvailabilityOptions (..),
    newDescribeAvailabilityOptions,

    -- * Request Lenses
    describeAvailabilityOptions_deployed,
    describeAvailabilityOptions_domainName,

    -- * Destructuring the Response
    DescribeAvailabilityOptionsResponse (..),
    newDescribeAvailabilityOptionsResponse,

    -- * Response Lenses
    describeAvailabilityOptionsResponse_availabilityOptions,
    describeAvailabilityOptionsResponse_httpStatus,
  )
where

import Amazonka.CloudSearch.Types
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | Container for the parameters to the @DescribeAvailabilityOptions@
-- operation. Specifies the name of the domain you want to describe. To
-- show the active configuration and exclude any pending changes, set the
-- Deployed option to @true@.
--
-- /See:/ 'newDescribeAvailabilityOptions' smart constructor.
data DescribeAvailabilityOptions = DescribeAvailabilityOptions'
  { -- | Whether to display the deployed configuration (@true@) or include any
    -- pending changes (@false@). Defaults to @false@.
    DescribeAvailabilityOptions -> Maybe Bool
deployed :: Prelude.Maybe Prelude.Bool,
    -- | The name of the domain you want to describe.
    DescribeAvailabilityOptions -> Text
domainName :: Prelude.Text
  }
  deriving (DescribeAvailabilityOptions -> DescribeAvailabilityOptions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAvailabilityOptions -> DescribeAvailabilityOptions -> Bool
$c/= :: DescribeAvailabilityOptions -> DescribeAvailabilityOptions -> Bool
== :: DescribeAvailabilityOptions -> DescribeAvailabilityOptions -> Bool
$c== :: DescribeAvailabilityOptions -> DescribeAvailabilityOptions -> Bool
Prelude.Eq, ReadPrec [DescribeAvailabilityOptions]
ReadPrec DescribeAvailabilityOptions
Int -> ReadS DescribeAvailabilityOptions
ReadS [DescribeAvailabilityOptions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAvailabilityOptions]
$creadListPrec :: ReadPrec [DescribeAvailabilityOptions]
readPrec :: ReadPrec DescribeAvailabilityOptions
$creadPrec :: ReadPrec DescribeAvailabilityOptions
readList :: ReadS [DescribeAvailabilityOptions]
$creadList :: ReadS [DescribeAvailabilityOptions]
readsPrec :: Int -> ReadS DescribeAvailabilityOptions
$creadsPrec :: Int -> ReadS DescribeAvailabilityOptions
Prelude.Read, Int -> DescribeAvailabilityOptions -> ShowS
[DescribeAvailabilityOptions] -> ShowS
DescribeAvailabilityOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAvailabilityOptions] -> ShowS
$cshowList :: [DescribeAvailabilityOptions] -> ShowS
show :: DescribeAvailabilityOptions -> String
$cshow :: DescribeAvailabilityOptions -> String
showsPrec :: Int -> DescribeAvailabilityOptions -> ShowS
$cshowsPrec :: Int -> DescribeAvailabilityOptions -> ShowS
Prelude.Show, forall x.
Rep DescribeAvailabilityOptions x -> DescribeAvailabilityOptions
forall x.
DescribeAvailabilityOptions -> Rep DescribeAvailabilityOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeAvailabilityOptions x -> DescribeAvailabilityOptions
$cfrom :: forall x.
DescribeAvailabilityOptions -> Rep DescribeAvailabilityOptions x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAvailabilityOptions' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'deployed', 'describeAvailabilityOptions_deployed' - Whether to display the deployed configuration (@true@) or include any
-- pending changes (@false@). Defaults to @false@.
--
-- 'domainName', 'describeAvailabilityOptions_domainName' - The name of the domain you want to describe.
newDescribeAvailabilityOptions ::
  -- | 'domainName'
  Prelude.Text ->
  DescribeAvailabilityOptions
newDescribeAvailabilityOptions :: Text -> DescribeAvailabilityOptions
newDescribeAvailabilityOptions Text
pDomainName_ =
  DescribeAvailabilityOptions'
    { $sel:deployed:DescribeAvailabilityOptions' :: Maybe Bool
deployed =
        forall a. Maybe a
Prelude.Nothing,
      $sel:domainName:DescribeAvailabilityOptions' :: Text
domainName = Text
pDomainName_
    }

-- | Whether to display the deployed configuration (@true@) or include any
-- pending changes (@false@). Defaults to @false@.
describeAvailabilityOptions_deployed :: Lens.Lens' DescribeAvailabilityOptions (Prelude.Maybe Prelude.Bool)
describeAvailabilityOptions_deployed :: Lens' DescribeAvailabilityOptions (Maybe Bool)
describeAvailabilityOptions_deployed = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAvailabilityOptions' {Maybe Bool
deployed :: Maybe Bool
$sel:deployed:DescribeAvailabilityOptions' :: DescribeAvailabilityOptions -> Maybe Bool
deployed} -> Maybe Bool
deployed) (\s :: DescribeAvailabilityOptions
s@DescribeAvailabilityOptions' {} Maybe Bool
a -> DescribeAvailabilityOptions
s {$sel:deployed:DescribeAvailabilityOptions' :: Maybe Bool
deployed = Maybe Bool
a} :: DescribeAvailabilityOptions)

-- | The name of the domain you want to describe.
describeAvailabilityOptions_domainName :: Lens.Lens' DescribeAvailabilityOptions Prelude.Text
describeAvailabilityOptions_domainName :: Lens' DescribeAvailabilityOptions Text
describeAvailabilityOptions_domainName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAvailabilityOptions' {Text
domainName :: Text
$sel:domainName:DescribeAvailabilityOptions' :: DescribeAvailabilityOptions -> Text
domainName} -> Text
domainName) (\s :: DescribeAvailabilityOptions
s@DescribeAvailabilityOptions' {} Text
a -> DescribeAvailabilityOptions
s {$sel:domainName:DescribeAvailabilityOptions' :: Text
domainName = Text
a} :: DescribeAvailabilityOptions)

instance Core.AWSRequest DescribeAvailabilityOptions where
  type
    AWSResponse DescribeAvailabilityOptions =
      DescribeAvailabilityOptionsResponse
  request :: (Service -> Service)
-> DescribeAvailabilityOptions
-> Request DescribeAvailabilityOptions
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeAvailabilityOptions
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeAvailabilityOptions)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"DescribeAvailabilityOptionsResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe AvailabilityOptionsStatus
-> Int -> DescribeAvailabilityOptionsResponse
DescribeAvailabilityOptionsResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AvailabilityOptions")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable DescribeAvailabilityOptions where
  hashWithSalt :: Int -> DescribeAvailabilityOptions -> Int
hashWithSalt Int
_salt DescribeAvailabilityOptions' {Maybe Bool
Text
domainName :: Text
deployed :: Maybe Bool
$sel:domainName:DescribeAvailabilityOptions' :: DescribeAvailabilityOptions -> Text
$sel:deployed:DescribeAvailabilityOptions' :: DescribeAvailabilityOptions -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
deployed
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
domainName

instance Prelude.NFData DescribeAvailabilityOptions where
  rnf :: DescribeAvailabilityOptions -> ()
rnf DescribeAvailabilityOptions' {Maybe Bool
Text
domainName :: Text
deployed :: Maybe Bool
$sel:domainName:DescribeAvailabilityOptions' :: DescribeAvailabilityOptions -> Text
$sel:deployed:DescribeAvailabilityOptions' :: DescribeAvailabilityOptions -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
deployed
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
domainName

instance Data.ToHeaders DescribeAvailabilityOptions where
  toHeaders :: DescribeAvailabilityOptions -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath DescribeAvailabilityOptions where
  toPath :: DescribeAvailabilityOptions -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery DescribeAvailabilityOptions where
  toQuery :: DescribeAvailabilityOptions -> QueryString
toQuery DescribeAvailabilityOptions' {Maybe Bool
Text
domainName :: Text
deployed :: Maybe Bool
$sel:domainName:DescribeAvailabilityOptions' :: DescribeAvailabilityOptions -> Text
$sel:deployed:DescribeAvailabilityOptions' :: DescribeAvailabilityOptions -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"DescribeAvailabilityOptions" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2013-01-01" :: Prelude.ByteString),
        ByteString
"Deployed" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
deployed,
        ByteString
"DomainName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
domainName
      ]

-- | The result of a @DescribeAvailabilityOptions@ request. Indicates whether
-- or not the Multi-AZ option is enabled for the domain specified in the
-- request.
--
-- /See:/ 'newDescribeAvailabilityOptionsResponse' smart constructor.
data DescribeAvailabilityOptionsResponse = DescribeAvailabilityOptionsResponse'
  { -- | The availability options configured for the domain. Indicates whether
    -- Multi-AZ is enabled for the domain.
    DescribeAvailabilityOptionsResponse
-> Maybe AvailabilityOptionsStatus
availabilityOptions :: Prelude.Maybe AvailabilityOptionsStatus,
    -- | The response's http status code.
    DescribeAvailabilityOptionsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeAvailabilityOptionsResponse
-> DescribeAvailabilityOptionsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAvailabilityOptionsResponse
-> DescribeAvailabilityOptionsResponse -> Bool
$c/= :: DescribeAvailabilityOptionsResponse
-> DescribeAvailabilityOptionsResponse -> Bool
== :: DescribeAvailabilityOptionsResponse
-> DescribeAvailabilityOptionsResponse -> Bool
$c== :: DescribeAvailabilityOptionsResponse
-> DescribeAvailabilityOptionsResponse -> Bool
Prelude.Eq, ReadPrec [DescribeAvailabilityOptionsResponse]
ReadPrec DescribeAvailabilityOptionsResponse
Int -> ReadS DescribeAvailabilityOptionsResponse
ReadS [DescribeAvailabilityOptionsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAvailabilityOptionsResponse]
$creadListPrec :: ReadPrec [DescribeAvailabilityOptionsResponse]
readPrec :: ReadPrec DescribeAvailabilityOptionsResponse
$creadPrec :: ReadPrec DescribeAvailabilityOptionsResponse
readList :: ReadS [DescribeAvailabilityOptionsResponse]
$creadList :: ReadS [DescribeAvailabilityOptionsResponse]
readsPrec :: Int -> ReadS DescribeAvailabilityOptionsResponse
$creadsPrec :: Int -> ReadS DescribeAvailabilityOptionsResponse
Prelude.Read, Int -> DescribeAvailabilityOptionsResponse -> ShowS
[DescribeAvailabilityOptionsResponse] -> ShowS
DescribeAvailabilityOptionsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAvailabilityOptionsResponse] -> ShowS
$cshowList :: [DescribeAvailabilityOptionsResponse] -> ShowS
show :: DescribeAvailabilityOptionsResponse -> String
$cshow :: DescribeAvailabilityOptionsResponse -> String
showsPrec :: Int -> DescribeAvailabilityOptionsResponse -> ShowS
$cshowsPrec :: Int -> DescribeAvailabilityOptionsResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeAvailabilityOptionsResponse x
-> DescribeAvailabilityOptionsResponse
forall x.
DescribeAvailabilityOptionsResponse
-> Rep DescribeAvailabilityOptionsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeAvailabilityOptionsResponse x
-> DescribeAvailabilityOptionsResponse
$cfrom :: forall x.
DescribeAvailabilityOptionsResponse
-> Rep DescribeAvailabilityOptionsResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAvailabilityOptionsResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'availabilityOptions', 'describeAvailabilityOptionsResponse_availabilityOptions' - The availability options configured for the domain. Indicates whether
-- Multi-AZ is enabled for the domain.
--
-- 'httpStatus', 'describeAvailabilityOptionsResponse_httpStatus' - The response's http status code.
newDescribeAvailabilityOptionsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeAvailabilityOptionsResponse
newDescribeAvailabilityOptionsResponse :: Int -> DescribeAvailabilityOptionsResponse
newDescribeAvailabilityOptionsResponse Int
pHttpStatus_ =
  DescribeAvailabilityOptionsResponse'
    { $sel:availabilityOptions:DescribeAvailabilityOptionsResponse' :: Maybe AvailabilityOptionsStatus
availabilityOptions =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeAvailabilityOptionsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The availability options configured for the domain. Indicates whether
-- Multi-AZ is enabled for the domain.
describeAvailabilityOptionsResponse_availabilityOptions :: Lens.Lens' DescribeAvailabilityOptionsResponse (Prelude.Maybe AvailabilityOptionsStatus)
describeAvailabilityOptionsResponse_availabilityOptions :: Lens'
  DescribeAvailabilityOptionsResponse
  (Maybe AvailabilityOptionsStatus)
describeAvailabilityOptionsResponse_availabilityOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAvailabilityOptionsResponse' {Maybe AvailabilityOptionsStatus
availabilityOptions :: Maybe AvailabilityOptionsStatus
$sel:availabilityOptions:DescribeAvailabilityOptionsResponse' :: DescribeAvailabilityOptionsResponse
-> Maybe AvailabilityOptionsStatus
availabilityOptions} -> Maybe AvailabilityOptionsStatus
availabilityOptions) (\s :: DescribeAvailabilityOptionsResponse
s@DescribeAvailabilityOptionsResponse' {} Maybe AvailabilityOptionsStatus
a -> DescribeAvailabilityOptionsResponse
s {$sel:availabilityOptions:DescribeAvailabilityOptionsResponse' :: Maybe AvailabilityOptionsStatus
availabilityOptions = Maybe AvailabilityOptionsStatus
a} :: DescribeAvailabilityOptionsResponse)

-- | The response's http status code.
describeAvailabilityOptionsResponse_httpStatus :: Lens.Lens' DescribeAvailabilityOptionsResponse Prelude.Int
describeAvailabilityOptionsResponse_httpStatus :: Lens' DescribeAvailabilityOptionsResponse Int
describeAvailabilityOptionsResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAvailabilityOptionsResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeAvailabilityOptionsResponse' :: DescribeAvailabilityOptionsResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeAvailabilityOptionsResponse
s@DescribeAvailabilityOptionsResponse' {} Int
a -> DescribeAvailabilityOptionsResponse
s {$sel:httpStatus:DescribeAvailabilityOptionsResponse' :: Int
httpStatus = Int
a} :: DescribeAvailabilityOptionsResponse)

instance
  Prelude.NFData
    DescribeAvailabilityOptionsResponse
  where
  rnf :: DescribeAvailabilityOptionsResponse -> ()
rnf DescribeAvailabilityOptionsResponse' {Int
Maybe AvailabilityOptionsStatus
httpStatus :: Int
availabilityOptions :: Maybe AvailabilityOptionsStatus
$sel:httpStatus:DescribeAvailabilityOptionsResponse' :: DescribeAvailabilityOptionsResponse -> Int
$sel:availabilityOptions:DescribeAvailabilityOptionsResponse' :: DescribeAvailabilityOptionsResponse
-> Maybe AvailabilityOptionsStatus
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AvailabilityOptionsStatus
availabilityOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus