{-# 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.DescribeServiceAccessPolicies
-- 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 information about the access policies that control access to the
-- domain\'s document and search endpoints. 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-access.html Configuring Access for a Search Domain>
-- in the /Amazon CloudSearch Developer Guide/.
module Amazonka.CloudSearch.DescribeServiceAccessPolicies
  ( -- * Creating a Request
    DescribeServiceAccessPolicies (..),
    newDescribeServiceAccessPolicies,

    -- * Request Lenses
    describeServiceAccessPolicies_deployed,
    describeServiceAccessPolicies_domainName,

    -- * Destructuring the Response
    DescribeServiceAccessPoliciesResponse (..),
    newDescribeServiceAccessPoliciesResponse,

    -- * Response Lenses
    describeServiceAccessPoliciesResponse_httpStatus,
    describeServiceAccessPoliciesResponse_accessPolicies,
  )
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 @DescribeServiceAccessPolicies@
-- 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:/ 'newDescribeServiceAccessPolicies' smart constructor.
data DescribeServiceAccessPolicies = DescribeServiceAccessPolicies'
  { -- | Whether to display the deployed configuration (@true@) or include any
    -- pending changes (@false@). Defaults to @false@.
    DescribeServiceAccessPolicies -> Maybe Bool
deployed :: Prelude.Maybe Prelude.Bool,
    -- | The name of the domain you want to describe.
    DescribeServiceAccessPolicies -> Text
domainName :: Prelude.Text
  }
  deriving (DescribeServiceAccessPolicies
-> DescribeServiceAccessPolicies -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeServiceAccessPolicies
-> DescribeServiceAccessPolicies -> Bool
$c/= :: DescribeServiceAccessPolicies
-> DescribeServiceAccessPolicies -> Bool
== :: DescribeServiceAccessPolicies
-> DescribeServiceAccessPolicies -> Bool
$c== :: DescribeServiceAccessPolicies
-> DescribeServiceAccessPolicies -> Bool
Prelude.Eq, ReadPrec [DescribeServiceAccessPolicies]
ReadPrec DescribeServiceAccessPolicies
Int -> ReadS DescribeServiceAccessPolicies
ReadS [DescribeServiceAccessPolicies]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeServiceAccessPolicies]
$creadListPrec :: ReadPrec [DescribeServiceAccessPolicies]
readPrec :: ReadPrec DescribeServiceAccessPolicies
$creadPrec :: ReadPrec DescribeServiceAccessPolicies
readList :: ReadS [DescribeServiceAccessPolicies]
$creadList :: ReadS [DescribeServiceAccessPolicies]
readsPrec :: Int -> ReadS DescribeServiceAccessPolicies
$creadsPrec :: Int -> ReadS DescribeServiceAccessPolicies
Prelude.Read, Int -> DescribeServiceAccessPolicies -> ShowS
[DescribeServiceAccessPolicies] -> ShowS
DescribeServiceAccessPolicies -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeServiceAccessPolicies] -> ShowS
$cshowList :: [DescribeServiceAccessPolicies] -> ShowS
show :: DescribeServiceAccessPolicies -> String
$cshow :: DescribeServiceAccessPolicies -> String
showsPrec :: Int -> DescribeServiceAccessPolicies -> ShowS
$cshowsPrec :: Int -> DescribeServiceAccessPolicies -> ShowS
Prelude.Show, forall x.
Rep DescribeServiceAccessPolicies x
-> DescribeServiceAccessPolicies
forall x.
DescribeServiceAccessPolicies
-> Rep DescribeServiceAccessPolicies x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeServiceAccessPolicies x
-> DescribeServiceAccessPolicies
$cfrom :: forall x.
DescribeServiceAccessPolicies
-> Rep DescribeServiceAccessPolicies x
Prelude.Generic)

-- |
-- Create a value of 'DescribeServiceAccessPolicies' 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', 'describeServiceAccessPolicies_deployed' - Whether to display the deployed configuration (@true@) or include any
-- pending changes (@false@). Defaults to @false@.
--
-- 'domainName', 'describeServiceAccessPolicies_domainName' - The name of the domain you want to describe.
newDescribeServiceAccessPolicies ::
  -- | 'domainName'
  Prelude.Text ->
  DescribeServiceAccessPolicies
newDescribeServiceAccessPolicies :: Text -> DescribeServiceAccessPolicies
newDescribeServiceAccessPolicies Text
pDomainName_ =
  DescribeServiceAccessPolicies'
    { $sel:deployed:DescribeServiceAccessPolicies' :: Maybe Bool
deployed =
        forall a. Maybe a
Prelude.Nothing,
      $sel:domainName:DescribeServiceAccessPolicies' :: Text
domainName = Text
pDomainName_
    }

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

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

instance
  Core.AWSRequest
    DescribeServiceAccessPolicies
  where
  type
    AWSResponse DescribeServiceAccessPolicies =
      DescribeServiceAccessPoliciesResponse
  request :: (Service -> Service)
-> DescribeServiceAccessPolicies
-> Request DescribeServiceAccessPolicies
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 DescribeServiceAccessPolicies
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeServiceAccessPolicies)))
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
"DescribeServiceAccessPoliciesResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Int
-> AccessPoliciesStatus -> DescribeServiceAccessPoliciesResponse
DescribeServiceAccessPoliciesResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"AccessPolicies")
      )

instance
  Prelude.Hashable
    DescribeServiceAccessPolicies
  where
  hashWithSalt :: Int -> DescribeServiceAccessPolicies -> Int
hashWithSalt Int
_salt DescribeServiceAccessPolicies' {Maybe Bool
Text
domainName :: Text
deployed :: Maybe Bool
$sel:domainName:DescribeServiceAccessPolicies' :: DescribeServiceAccessPolicies -> Text
$sel:deployed:DescribeServiceAccessPolicies' :: DescribeServiceAccessPolicies -> 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 DescribeServiceAccessPolicies where
  rnf :: DescribeServiceAccessPolicies -> ()
rnf DescribeServiceAccessPolicies' {Maybe Bool
Text
domainName :: Text
deployed :: Maybe Bool
$sel:domainName:DescribeServiceAccessPolicies' :: DescribeServiceAccessPolicies -> Text
$sel:deployed:DescribeServiceAccessPolicies' :: DescribeServiceAccessPolicies -> 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 DescribeServiceAccessPolicies where
  toHeaders :: DescribeServiceAccessPolicies -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery DescribeServiceAccessPolicies where
  toQuery :: DescribeServiceAccessPolicies -> QueryString
toQuery DescribeServiceAccessPolicies' {Maybe Bool
Text
domainName :: Text
deployed :: Maybe Bool
$sel:domainName:DescribeServiceAccessPolicies' :: DescribeServiceAccessPolicies -> Text
$sel:deployed:DescribeServiceAccessPolicies' :: DescribeServiceAccessPolicies -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"DescribeServiceAccessPolicies" ::
                      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 @DescribeServiceAccessPolicies@ request.
--
-- /See:/ 'newDescribeServiceAccessPoliciesResponse' smart constructor.
data DescribeServiceAccessPoliciesResponse = DescribeServiceAccessPoliciesResponse'
  { -- | The response's http status code.
    DescribeServiceAccessPoliciesResponse -> Int
httpStatus :: Prelude.Int,
    -- | The access rules configured for the domain specified in the request.
    DescribeServiceAccessPoliciesResponse -> AccessPoliciesStatus
accessPolicies :: AccessPoliciesStatus
  }
  deriving (DescribeServiceAccessPoliciesResponse
-> DescribeServiceAccessPoliciesResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeServiceAccessPoliciesResponse
-> DescribeServiceAccessPoliciesResponse -> Bool
$c/= :: DescribeServiceAccessPoliciesResponse
-> DescribeServiceAccessPoliciesResponse -> Bool
== :: DescribeServiceAccessPoliciesResponse
-> DescribeServiceAccessPoliciesResponse -> Bool
$c== :: DescribeServiceAccessPoliciesResponse
-> DescribeServiceAccessPoliciesResponse -> Bool
Prelude.Eq, ReadPrec [DescribeServiceAccessPoliciesResponse]
ReadPrec DescribeServiceAccessPoliciesResponse
Int -> ReadS DescribeServiceAccessPoliciesResponse
ReadS [DescribeServiceAccessPoliciesResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeServiceAccessPoliciesResponse]
$creadListPrec :: ReadPrec [DescribeServiceAccessPoliciesResponse]
readPrec :: ReadPrec DescribeServiceAccessPoliciesResponse
$creadPrec :: ReadPrec DescribeServiceAccessPoliciesResponse
readList :: ReadS [DescribeServiceAccessPoliciesResponse]
$creadList :: ReadS [DescribeServiceAccessPoliciesResponse]
readsPrec :: Int -> ReadS DescribeServiceAccessPoliciesResponse
$creadsPrec :: Int -> ReadS DescribeServiceAccessPoliciesResponse
Prelude.Read, Int -> DescribeServiceAccessPoliciesResponse -> ShowS
[DescribeServiceAccessPoliciesResponse] -> ShowS
DescribeServiceAccessPoliciesResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeServiceAccessPoliciesResponse] -> ShowS
$cshowList :: [DescribeServiceAccessPoliciesResponse] -> ShowS
show :: DescribeServiceAccessPoliciesResponse -> String
$cshow :: DescribeServiceAccessPoliciesResponse -> String
showsPrec :: Int -> DescribeServiceAccessPoliciesResponse -> ShowS
$cshowsPrec :: Int -> DescribeServiceAccessPoliciesResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeServiceAccessPoliciesResponse x
-> DescribeServiceAccessPoliciesResponse
forall x.
DescribeServiceAccessPoliciesResponse
-> Rep DescribeServiceAccessPoliciesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeServiceAccessPoliciesResponse x
-> DescribeServiceAccessPoliciesResponse
$cfrom :: forall x.
DescribeServiceAccessPoliciesResponse
-> Rep DescribeServiceAccessPoliciesResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeServiceAccessPoliciesResponse' 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:
--
-- 'httpStatus', 'describeServiceAccessPoliciesResponse_httpStatus' - The response's http status code.
--
-- 'accessPolicies', 'describeServiceAccessPoliciesResponse_accessPolicies' - The access rules configured for the domain specified in the request.
newDescribeServiceAccessPoliciesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'accessPolicies'
  AccessPoliciesStatus ->
  DescribeServiceAccessPoliciesResponse
newDescribeServiceAccessPoliciesResponse :: Int
-> AccessPoliciesStatus -> DescribeServiceAccessPoliciesResponse
newDescribeServiceAccessPoliciesResponse
  Int
pHttpStatus_
  AccessPoliciesStatus
pAccessPolicies_ =
    DescribeServiceAccessPoliciesResponse'
      { $sel:httpStatus:DescribeServiceAccessPoliciesResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:accessPolicies:DescribeServiceAccessPoliciesResponse' :: AccessPoliciesStatus
accessPolicies = AccessPoliciesStatus
pAccessPolicies_
      }

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

-- | The access rules configured for the domain specified in the request.
describeServiceAccessPoliciesResponse_accessPolicies :: Lens.Lens' DescribeServiceAccessPoliciesResponse AccessPoliciesStatus
describeServiceAccessPoliciesResponse_accessPolicies :: Lens' DescribeServiceAccessPoliciesResponse AccessPoliciesStatus
describeServiceAccessPoliciesResponse_accessPolicies = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeServiceAccessPoliciesResponse' {AccessPoliciesStatus
accessPolicies :: AccessPoliciesStatus
$sel:accessPolicies:DescribeServiceAccessPoliciesResponse' :: DescribeServiceAccessPoliciesResponse -> AccessPoliciesStatus
accessPolicies} -> AccessPoliciesStatus
accessPolicies) (\s :: DescribeServiceAccessPoliciesResponse
s@DescribeServiceAccessPoliciesResponse' {} AccessPoliciesStatus
a -> DescribeServiceAccessPoliciesResponse
s {$sel:accessPolicies:DescribeServiceAccessPoliciesResponse' :: AccessPoliciesStatus
accessPolicies = AccessPoliciesStatus
a} :: DescribeServiceAccessPoliciesResponse)

instance
  Prelude.NFData
    DescribeServiceAccessPoliciesResponse
  where
  rnf :: DescribeServiceAccessPoliciesResponse -> ()
rnf DescribeServiceAccessPoliciesResponse' {Int
AccessPoliciesStatus
accessPolicies :: AccessPoliciesStatus
httpStatus :: Int
$sel:accessPolicies:DescribeServiceAccessPoliciesResponse' :: DescribeServiceAccessPoliciesResponse -> AccessPoliciesStatus
$sel:httpStatus:DescribeServiceAccessPoliciesResponse' :: DescribeServiceAccessPoliciesResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AccessPoliciesStatus
accessPolicies