{-# 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.OAM.GetSinkPolicy
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns the current sink policy attached to this sink. The sink policy
-- specifies what accounts can attach to this sink as source accounts, and
-- what types of data they can share.
module Amazonka.OAM.GetSinkPolicy
  ( -- * Creating a Request
    GetSinkPolicy (..),
    newGetSinkPolicy,

    -- * Request Lenses
    getSinkPolicy_sinkIdentifier,

    -- * Destructuring the Response
    GetSinkPolicyResponse (..),
    newGetSinkPolicyResponse,

    -- * Response Lenses
    getSinkPolicyResponse_policy,
    getSinkPolicyResponse_sinkArn,
    getSinkPolicyResponse_sinkId,
    getSinkPolicyResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetSinkPolicy' smart constructor.
data GetSinkPolicy = GetSinkPolicy'
  { -- | The ARN of the sink to retrieve the policy of.
    GetSinkPolicy -> Text
sinkIdentifier :: Prelude.Text
  }
  deriving (GetSinkPolicy -> GetSinkPolicy -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetSinkPolicy -> GetSinkPolicy -> Bool
$c/= :: GetSinkPolicy -> GetSinkPolicy -> Bool
== :: GetSinkPolicy -> GetSinkPolicy -> Bool
$c== :: GetSinkPolicy -> GetSinkPolicy -> Bool
Prelude.Eq, ReadPrec [GetSinkPolicy]
ReadPrec GetSinkPolicy
Int -> ReadS GetSinkPolicy
ReadS [GetSinkPolicy]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetSinkPolicy]
$creadListPrec :: ReadPrec [GetSinkPolicy]
readPrec :: ReadPrec GetSinkPolicy
$creadPrec :: ReadPrec GetSinkPolicy
readList :: ReadS [GetSinkPolicy]
$creadList :: ReadS [GetSinkPolicy]
readsPrec :: Int -> ReadS GetSinkPolicy
$creadsPrec :: Int -> ReadS GetSinkPolicy
Prelude.Read, Int -> GetSinkPolicy -> ShowS
[GetSinkPolicy] -> ShowS
GetSinkPolicy -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetSinkPolicy] -> ShowS
$cshowList :: [GetSinkPolicy] -> ShowS
show :: GetSinkPolicy -> String
$cshow :: GetSinkPolicy -> String
showsPrec :: Int -> GetSinkPolicy -> ShowS
$cshowsPrec :: Int -> GetSinkPolicy -> ShowS
Prelude.Show, forall x. Rep GetSinkPolicy x -> GetSinkPolicy
forall x. GetSinkPolicy -> Rep GetSinkPolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetSinkPolicy x -> GetSinkPolicy
$cfrom :: forall x. GetSinkPolicy -> Rep GetSinkPolicy x
Prelude.Generic)

-- |
-- Create a value of 'GetSinkPolicy' 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:
--
-- 'sinkIdentifier', 'getSinkPolicy_sinkIdentifier' - The ARN of the sink to retrieve the policy of.
newGetSinkPolicy ::
  -- | 'sinkIdentifier'
  Prelude.Text ->
  GetSinkPolicy
newGetSinkPolicy :: Text -> GetSinkPolicy
newGetSinkPolicy Text
pSinkIdentifier_ =
  GetSinkPolicy' {$sel:sinkIdentifier:GetSinkPolicy' :: Text
sinkIdentifier = Text
pSinkIdentifier_}

-- | The ARN of the sink to retrieve the policy of.
getSinkPolicy_sinkIdentifier :: Lens.Lens' GetSinkPolicy Prelude.Text
getSinkPolicy_sinkIdentifier :: Lens' GetSinkPolicy Text
getSinkPolicy_sinkIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSinkPolicy' {Text
sinkIdentifier :: Text
$sel:sinkIdentifier:GetSinkPolicy' :: GetSinkPolicy -> Text
sinkIdentifier} -> Text
sinkIdentifier) (\s :: GetSinkPolicy
s@GetSinkPolicy' {} Text
a -> GetSinkPolicy
s {$sel:sinkIdentifier:GetSinkPolicy' :: Text
sinkIdentifier = Text
a} :: GetSinkPolicy)

instance Core.AWSRequest GetSinkPolicy where
  type
    AWSResponse GetSinkPolicy =
      GetSinkPolicyResponse
  request :: (Service -> Service) -> GetSinkPolicy -> Request GetSinkPolicy
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetSinkPolicy
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetSinkPolicy)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text
-> Maybe Text -> Maybe Text -> Int -> GetSinkPolicyResponse
GetSinkPolicyResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Policy")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"SinkArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"SinkId")
            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 GetSinkPolicy where
  hashWithSalt :: Int -> GetSinkPolicy -> Int
hashWithSalt Int
_salt GetSinkPolicy' {Text
sinkIdentifier :: Text
$sel:sinkIdentifier:GetSinkPolicy' :: GetSinkPolicy -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sinkIdentifier

instance Prelude.NFData GetSinkPolicy where
  rnf :: GetSinkPolicy -> ()
rnf GetSinkPolicy' {Text
sinkIdentifier :: Text
$sel:sinkIdentifier:GetSinkPolicy' :: GetSinkPolicy -> Text
..} = forall a. NFData a => a -> ()
Prelude.rnf Text
sinkIdentifier

instance Data.ToHeaders GetSinkPolicy where
  toHeaders :: GetSinkPolicy -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON GetSinkPolicy where
  toJSON :: GetSinkPolicy -> Value
toJSON GetSinkPolicy' {Text
sinkIdentifier :: Text
$sel:sinkIdentifier:GetSinkPolicy' :: GetSinkPolicy -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"SinkIdentifier" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
sinkIdentifier)
          ]
      )

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

instance Data.ToQuery GetSinkPolicy where
  toQuery :: GetSinkPolicy -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newGetSinkPolicyResponse' smart constructor.
data GetSinkPolicyResponse = GetSinkPolicyResponse'
  { -- | The policy that you specified, in JSON format.
    GetSinkPolicyResponse -> Maybe Text
policy :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the sink.
    GetSinkPolicyResponse -> Maybe Text
sinkArn :: Prelude.Maybe Prelude.Text,
    -- | The random ID string that Amazon Web Services generated as part of the
    -- sink ARN.
    GetSinkPolicyResponse -> Maybe Text
sinkId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetSinkPolicyResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetSinkPolicyResponse -> GetSinkPolicyResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetSinkPolicyResponse -> GetSinkPolicyResponse -> Bool
$c/= :: GetSinkPolicyResponse -> GetSinkPolicyResponse -> Bool
== :: GetSinkPolicyResponse -> GetSinkPolicyResponse -> Bool
$c== :: GetSinkPolicyResponse -> GetSinkPolicyResponse -> Bool
Prelude.Eq, ReadPrec [GetSinkPolicyResponse]
ReadPrec GetSinkPolicyResponse
Int -> ReadS GetSinkPolicyResponse
ReadS [GetSinkPolicyResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetSinkPolicyResponse]
$creadListPrec :: ReadPrec [GetSinkPolicyResponse]
readPrec :: ReadPrec GetSinkPolicyResponse
$creadPrec :: ReadPrec GetSinkPolicyResponse
readList :: ReadS [GetSinkPolicyResponse]
$creadList :: ReadS [GetSinkPolicyResponse]
readsPrec :: Int -> ReadS GetSinkPolicyResponse
$creadsPrec :: Int -> ReadS GetSinkPolicyResponse
Prelude.Read, Int -> GetSinkPolicyResponse -> ShowS
[GetSinkPolicyResponse] -> ShowS
GetSinkPolicyResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetSinkPolicyResponse] -> ShowS
$cshowList :: [GetSinkPolicyResponse] -> ShowS
show :: GetSinkPolicyResponse -> String
$cshow :: GetSinkPolicyResponse -> String
showsPrec :: Int -> GetSinkPolicyResponse -> ShowS
$cshowsPrec :: Int -> GetSinkPolicyResponse -> ShowS
Prelude.Show, forall x. Rep GetSinkPolicyResponse x -> GetSinkPolicyResponse
forall x. GetSinkPolicyResponse -> Rep GetSinkPolicyResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetSinkPolicyResponse x -> GetSinkPolicyResponse
$cfrom :: forall x. GetSinkPolicyResponse -> Rep GetSinkPolicyResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetSinkPolicyResponse' 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:
--
-- 'policy', 'getSinkPolicyResponse_policy' - The policy that you specified, in JSON format.
--
-- 'sinkArn', 'getSinkPolicyResponse_sinkArn' - The ARN of the sink.
--
-- 'sinkId', 'getSinkPolicyResponse_sinkId' - The random ID string that Amazon Web Services generated as part of the
-- sink ARN.
--
-- 'httpStatus', 'getSinkPolicyResponse_httpStatus' - The response's http status code.
newGetSinkPolicyResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetSinkPolicyResponse
newGetSinkPolicyResponse :: Int -> GetSinkPolicyResponse
newGetSinkPolicyResponse Int
pHttpStatus_ =
  GetSinkPolicyResponse'
    { $sel:policy:GetSinkPolicyResponse' :: Maybe Text
policy = forall a. Maybe a
Prelude.Nothing,
      $sel:sinkArn:GetSinkPolicyResponse' :: Maybe Text
sinkArn = forall a. Maybe a
Prelude.Nothing,
      $sel:sinkId:GetSinkPolicyResponse' :: Maybe Text
sinkId = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetSinkPolicyResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The policy that you specified, in JSON format.
getSinkPolicyResponse_policy :: Lens.Lens' GetSinkPolicyResponse (Prelude.Maybe Prelude.Text)
getSinkPolicyResponse_policy :: Lens' GetSinkPolicyResponse (Maybe Text)
getSinkPolicyResponse_policy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSinkPolicyResponse' {Maybe Text
policy :: Maybe Text
$sel:policy:GetSinkPolicyResponse' :: GetSinkPolicyResponse -> Maybe Text
policy} -> Maybe Text
policy) (\s :: GetSinkPolicyResponse
s@GetSinkPolicyResponse' {} Maybe Text
a -> GetSinkPolicyResponse
s {$sel:policy:GetSinkPolicyResponse' :: Maybe Text
policy = Maybe Text
a} :: GetSinkPolicyResponse)

-- | The ARN of the sink.
getSinkPolicyResponse_sinkArn :: Lens.Lens' GetSinkPolicyResponse (Prelude.Maybe Prelude.Text)
getSinkPolicyResponse_sinkArn :: Lens' GetSinkPolicyResponse (Maybe Text)
getSinkPolicyResponse_sinkArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSinkPolicyResponse' {Maybe Text
sinkArn :: Maybe Text
$sel:sinkArn:GetSinkPolicyResponse' :: GetSinkPolicyResponse -> Maybe Text
sinkArn} -> Maybe Text
sinkArn) (\s :: GetSinkPolicyResponse
s@GetSinkPolicyResponse' {} Maybe Text
a -> GetSinkPolicyResponse
s {$sel:sinkArn:GetSinkPolicyResponse' :: Maybe Text
sinkArn = Maybe Text
a} :: GetSinkPolicyResponse)

-- | The random ID string that Amazon Web Services generated as part of the
-- sink ARN.
getSinkPolicyResponse_sinkId :: Lens.Lens' GetSinkPolicyResponse (Prelude.Maybe Prelude.Text)
getSinkPolicyResponse_sinkId :: Lens' GetSinkPolicyResponse (Maybe Text)
getSinkPolicyResponse_sinkId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSinkPolicyResponse' {Maybe Text
sinkId :: Maybe Text
$sel:sinkId:GetSinkPolicyResponse' :: GetSinkPolicyResponse -> Maybe Text
sinkId} -> Maybe Text
sinkId) (\s :: GetSinkPolicyResponse
s@GetSinkPolicyResponse' {} Maybe Text
a -> GetSinkPolicyResponse
s {$sel:sinkId:GetSinkPolicyResponse' :: Maybe Text
sinkId = Maybe Text
a} :: GetSinkPolicyResponse)

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

instance Prelude.NFData GetSinkPolicyResponse where
  rnf :: GetSinkPolicyResponse -> ()
rnf GetSinkPolicyResponse' {Int
Maybe Text
httpStatus :: Int
sinkId :: Maybe Text
sinkArn :: Maybe Text
policy :: Maybe Text
$sel:httpStatus:GetSinkPolicyResponse' :: GetSinkPolicyResponse -> Int
$sel:sinkId:GetSinkPolicyResponse' :: GetSinkPolicyResponse -> Maybe Text
$sel:sinkArn:GetSinkPolicyResponse' :: GetSinkPolicyResponse -> Maybe Text
$sel:policy:GetSinkPolicyResponse' :: GetSinkPolicyResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
policy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
sinkArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
sinkId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus