{-# 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.UpdateServiceAccessPolicies
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Configures the access rules that control access to the domain\'s
-- document and search endpoints. For more information, see
-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-access.html Configuring Access for an Amazon CloudSearch Domain>.
module Amazonka.CloudSearch.UpdateServiceAccessPolicies
  ( -- * Creating a Request
    UpdateServiceAccessPolicies (..),
    newUpdateServiceAccessPolicies,

    -- * Request Lenses
    updateServiceAccessPolicies_domainName,
    updateServiceAccessPolicies_accessPolicies,

    -- * Destructuring the Response
    UpdateServiceAccessPoliciesResponse (..),
    newUpdateServiceAccessPoliciesResponse,

    -- * Response Lenses
    updateServiceAccessPoliciesResponse_httpStatus,
    updateServiceAccessPoliciesResponse_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 @UpdateServiceAccessPolicies@
-- operation. Specifies the name of the domain you want to update and the
-- access rules you want to configure.
--
-- /See:/ 'newUpdateServiceAccessPolicies' smart constructor.
data UpdateServiceAccessPolicies = UpdateServiceAccessPolicies'
  { UpdateServiceAccessPolicies -> Text
domainName :: Prelude.Text,
    -- | The access rules you want to configure. These rules replace any existing
    -- rules.
    UpdateServiceAccessPolicies -> Text
accessPolicies :: Prelude.Text
  }
  deriving (UpdateServiceAccessPolicies -> UpdateServiceAccessPolicies -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateServiceAccessPolicies -> UpdateServiceAccessPolicies -> Bool
$c/= :: UpdateServiceAccessPolicies -> UpdateServiceAccessPolicies -> Bool
== :: UpdateServiceAccessPolicies -> UpdateServiceAccessPolicies -> Bool
$c== :: UpdateServiceAccessPolicies -> UpdateServiceAccessPolicies -> Bool
Prelude.Eq, ReadPrec [UpdateServiceAccessPolicies]
ReadPrec UpdateServiceAccessPolicies
Int -> ReadS UpdateServiceAccessPolicies
ReadS [UpdateServiceAccessPolicies]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateServiceAccessPolicies]
$creadListPrec :: ReadPrec [UpdateServiceAccessPolicies]
readPrec :: ReadPrec UpdateServiceAccessPolicies
$creadPrec :: ReadPrec UpdateServiceAccessPolicies
readList :: ReadS [UpdateServiceAccessPolicies]
$creadList :: ReadS [UpdateServiceAccessPolicies]
readsPrec :: Int -> ReadS UpdateServiceAccessPolicies
$creadsPrec :: Int -> ReadS UpdateServiceAccessPolicies
Prelude.Read, Int -> UpdateServiceAccessPolicies -> ShowS
[UpdateServiceAccessPolicies] -> ShowS
UpdateServiceAccessPolicies -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateServiceAccessPolicies] -> ShowS
$cshowList :: [UpdateServiceAccessPolicies] -> ShowS
show :: UpdateServiceAccessPolicies -> String
$cshow :: UpdateServiceAccessPolicies -> String
showsPrec :: Int -> UpdateServiceAccessPolicies -> ShowS
$cshowsPrec :: Int -> UpdateServiceAccessPolicies -> ShowS
Prelude.Show, forall x.
Rep UpdateServiceAccessPolicies x -> UpdateServiceAccessPolicies
forall x.
UpdateServiceAccessPolicies -> Rep UpdateServiceAccessPolicies x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateServiceAccessPolicies x -> UpdateServiceAccessPolicies
$cfrom :: forall x.
UpdateServiceAccessPolicies -> Rep UpdateServiceAccessPolicies x
Prelude.Generic)

-- |
-- Create a value of 'UpdateServiceAccessPolicies' 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:
--
-- 'domainName', 'updateServiceAccessPolicies_domainName' - Undocumented member.
--
-- 'accessPolicies', 'updateServiceAccessPolicies_accessPolicies' - The access rules you want to configure. These rules replace any existing
-- rules.
newUpdateServiceAccessPolicies ::
  -- | 'domainName'
  Prelude.Text ->
  -- | 'accessPolicies'
  Prelude.Text ->
  UpdateServiceAccessPolicies
newUpdateServiceAccessPolicies :: Text -> Text -> UpdateServiceAccessPolicies
newUpdateServiceAccessPolicies
  Text
pDomainName_
  Text
pAccessPolicies_ =
    UpdateServiceAccessPolicies'
      { $sel:domainName:UpdateServiceAccessPolicies' :: Text
domainName =
          Text
pDomainName_,
        $sel:accessPolicies:UpdateServiceAccessPolicies' :: Text
accessPolicies = Text
pAccessPolicies_
      }

-- | Undocumented member.
updateServiceAccessPolicies_domainName :: Lens.Lens' UpdateServiceAccessPolicies Prelude.Text
updateServiceAccessPolicies_domainName :: Lens' UpdateServiceAccessPolicies Text
updateServiceAccessPolicies_domainName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateServiceAccessPolicies' {Text
domainName :: Text
$sel:domainName:UpdateServiceAccessPolicies' :: UpdateServiceAccessPolicies -> Text
domainName} -> Text
domainName) (\s :: UpdateServiceAccessPolicies
s@UpdateServiceAccessPolicies' {} Text
a -> UpdateServiceAccessPolicies
s {$sel:domainName:UpdateServiceAccessPolicies' :: Text
domainName = Text
a} :: UpdateServiceAccessPolicies)

-- | The access rules you want to configure. These rules replace any existing
-- rules.
updateServiceAccessPolicies_accessPolicies :: Lens.Lens' UpdateServiceAccessPolicies Prelude.Text
updateServiceAccessPolicies_accessPolicies :: Lens' UpdateServiceAccessPolicies Text
updateServiceAccessPolicies_accessPolicies = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateServiceAccessPolicies' {Text
accessPolicies :: Text
$sel:accessPolicies:UpdateServiceAccessPolicies' :: UpdateServiceAccessPolicies -> Text
accessPolicies} -> Text
accessPolicies) (\s :: UpdateServiceAccessPolicies
s@UpdateServiceAccessPolicies' {} Text
a -> UpdateServiceAccessPolicies
s {$sel:accessPolicies:UpdateServiceAccessPolicies' :: Text
accessPolicies = Text
a} :: UpdateServiceAccessPolicies)

instance Core.AWSRequest UpdateServiceAccessPolicies where
  type
    AWSResponse UpdateServiceAccessPolicies =
      UpdateServiceAccessPoliciesResponse
  request :: (Service -> Service)
-> UpdateServiceAccessPolicies
-> Request UpdateServiceAccessPolicies
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 UpdateServiceAccessPolicies
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateServiceAccessPolicies)))
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
"UpdateServiceAccessPoliciesResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Int -> AccessPoliciesStatus -> UpdateServiceAccessPoliciesResponse
UpdateServiceAccessPoliciesResponse'
            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 UpdateServiceAccessPolicies where
  hashWithSalt :: Int -> UpdateServiceAccessPolicies -> Int
hashWithSalt Int
_salt UpdateServiceAccessPolicies' {Text
accessPolicies :: Text
domainName :: Text
$sel:accessPolicies:UpdateServiceAccessPolicies' :: UpdateServiceAccessPolicies -> Text
$sel:domainName:UpdateServiceAccessPolicies' :: UpdateServiceAccessPolicies -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
domainName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
accessPolicies

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

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

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

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

-- | The result of an @UpdateServiceAccessPolicies@ request. Contains the new
-- access policies.
--
-- /See:/ 'newUpdateServiceAccessPoliciesResponse' smart constructor.
data UpdateServiceAccessPoliciesResponse = UpdateServiceAccessPoliciesResponse'
  { -- | The response's http status code.
    UpdateServiceAccessPoliciesResponse -> Int
httpStatus :: Prelude.Int,
    -- | The access rules configured for the domain.
    UpdateServiceAccessPoliciesResponse -> AccessPoliciesStatus
accessPolicies :: AccessPoliciesStatus
  }
  deriving (UpdateServiceAccessPoliciesResponse
-> UpdateServiceAccessPoliciesResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateServiceAccessPoliciesResponse
-> UpdateServiceAccessPoliciesResponse -> Bool
$c/= :: UpdateServiceAccessPoliciesResponse
-> UpdateServiceAccessPoliciesResponse -> Bool
== :: UpdateServiceAccessPoliciesResponse
-> UpdateServiceAccessPoliciesResponse -> Bool
$c== :: UpdateServiceAccessPoliciesResponse
-> UpdateServiceAccessPoliciesResponse -> Bool
Prelude.Eq, ReadPrec [UpdateServiceAccessPoliciesResponse]
ReadPrec UpdateServiceAccessPoliciesResponse
Int -> ReadS UpdateServiceAccessPoliciesResponse
ReadS [UpdateServiceAccessPoliciesResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateServiceAccessPoliciesResponse]
$creadListPrec :: ReadPrec [UpdateServiceAccessPoliciesResponse]
readPrec :: ReadPrec UpdateServiceAccessPoliciesResponse
$creadPrec :: ReadPrec UpdateServiceAccessPoliciesResponse
readList :: ReadS [UpdateServiceAccessPoliciesResponse]
$creadList :: ReadS [UpdateServiceAccessPoliciesResponse]
readsPrec :: Int -> ReadS UpdateServiceAccessPoliciesResponse
$creadsPrec :: Int -> ReadS UpdateServiceAccessPoliciesResponse
Prelude.Read, Int -> UpdateServiceAccessPoliciesResponse -> ShowS
[UpdateServiceAccessPoliciesResponse] -> ShowS
UpdateServiceAccessPoliciesResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateServiceAccessPoliciesResponse] -> ShowS
$cshowList :: [UpdateServiceAccessPoliciesResponse] -> ShowS
show :: UpdateServiceAccessPoliciesResponse -> String
$cshow :: UpdateServiceAccessPoliciesResponse -> String
showsPrec :: Int -> UpdateServiceAccessPoliciesResponse -> ShowS
$cshowsPrec :: Int -> UpdateServiceAccessPoliciesResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateServiceAccessPoliciesResponse x
-> UpdateServiceAccessPoliciesResponse
forall x.
UpdateServiceAccessPoliciesResponse
-> Rep UpdateServiceAccessPoliciesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateServiceAccessPoliciesResponse x
-> UpdateServiceAccessPoliciesResponse
$cfrom :: forall x.
UpdateServiceAccessPoliciesResponse
-> Rep UpdateServiceAccessPoliciesResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateServiceAccessPoliciesResponse' 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', 'updateServiceAccessPoliciesResponse_httpStatus' - The response's http status code.
--
-- 'accessPolicies', 'updateServiceAccessPoliciesResponse_accessPolicies' - The access rules configured for the domain.
newUpdateServiceAccessPoliciesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'accessPolicies'
  AccessPoliciesStatus ->
  UpdateServiceAccessPoliciesResponse
newUpdateServiceAccessPoliciesResponse :: Int -> AccessPoliciesStatus -> UpdateServiceAccessPoliciesResponse
newUpdateServiceAccessPoliciesResponse
  Int
pHttpStatus_
  AccessPoliciesStatus
pAccessPolicies_ =
    UpdateServiceAccessPoliciesResponse'
      { $sel:httpStatus:UpdateServiceAccessPoliciesResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:accessPolicies:UpdateServiceAccessPoliciesResponse' :: AccessPoliciesStatus
accessPolicies = AccessPoliciesStatus
pAccessPolicies_
      }

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

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

instance
  Prelude.NFData
    UpdateServiceAccessPoliciesResponse
  where
  rnf :: UpdateServiceAccessPoliciesResponse -> ()
rnf UpdateServiceAccessPoliciesResponse' {Int
AccessPoliciesStatus
accessPolicies :: AccessPoliciesStatus
httpStatus :: Int
$sel:accessPolicies:UpdateServiceAccessPoliciesResponse' :: UpdateServiceAccessPoliciesResponse -> AccessPoliciesStatus
$sel:httpStatus:UpdateServiceAccessPoliciesResponse' :: UpdateServiceAccessPoliciesResponse -> 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