{-# 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.CloudFront.GetFieldLevelEncryptionConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Get the field-level encryption configuration information.
module Amazonka.CloudFront.GetFieldLevelEncryptionConfig
  ( -- * Creating a Request
    GetFieldLevelEncryptionConfig (..),
    newGetFieldLevelEncryptionConfig,

    -- * Request Lenses
    getFieldLevelEncryptionConfig_id,

    -- * Destructuring the Response
    GetFieldLevelEncryptionConfigResponse (..),
    newGetFieldLevelEncryptionConfigResponse,

    -- * Response Lenses
    getFieldLevelEncryptionConfigResponse_eTag,
    getFieldLevelEncryptionConfigResponse_fieldLevelEncryptionConfig,
    getFieldLevelEncryptionConfigResponse_httpStatus,
  )
where

import Amazonka.CloudFront.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

-- | /See:/ 'newGetFieldLevelEncryptionConfig' smart constructor.
data GetFieldLevelEncryptionConfig = GetFieldLevelEncryptionConfig'
  { -- | Request the ID for the field-level encryption configuration information.
    GetFieldLevelEncryptionConfig -> Text
id :: Prelude.Text
  }
  deriving (GetFieldLevelEncryptionConfig
-> GetFieldLevelEncryptionConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetFieldLevelEncryptionConfig
-> GetFieldLevelEncryptionConfig -> Bool
$c/= :: GetFieldLevelEncryptionConfig
-> GetFieldLevelEncryptionConfig -> Bool
== :: GetFieldLevelEncryptionConfig
-> GetFieldLevelEncryptionConfig -> Bool
$c== :: GetFieldLevelEncryptionConfig
-> GetFieldLevelEncryptionConfig -> Bool
Prelude.Eq, ReadPrec [GetFieldLevelEncryptionConfig]
ReadPrec GetFieldLevelEncryptionConfig
Int -> ReadS GetFieldLevelEncryptionConfig
ReadS [GetFieldLevelEncryptionConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetFieldLevelEncryptionConfig]
$creadListPrec :: ReadPrec [GetFieldLevelEncryptionConfig]
readPrec :: ReadPrec GetFieldLevelEncryptionConfig
$creadPrec :: ReadPrec GetFieldLevelEncryptionConfig
readList :: ReadS [GetFieldLevelEncryptionConfig]
$creadList :: ReadS [GetFieldLevelEncryptionConfig]
readsPrec :: Int -> ReadS GetFieldLevelEncryptionConfig
$creadsPrec :: Int -> ReadS GetFieldLevelEncryptionConfig
Prelude.Read, Int -> GetFieldLevelEncryptionConfig -> ShowS
[GetFieldLevelEncryptionConfig] -> ShowS
GetFieldLevelEncryptionConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetFieldLevelEncryptionConfig] -> ShowS
$cshowList :: [GetFieldLevelEncryptionConfig] -> ShowS
show :: GetFieldLevelEncryptionConfig -> String
$cshow :: GetFieldLevelEncryptionConfig -> String
showsPrec :: Int -> GetFieldLevelEncryptionConfig -> ShowS
$cshowsPrec :: Int -> GetFieldLevelEncryptionConfig -> ShowS
Prelude.Show, forall x.
Rep GetFieldLevelEncryptionConfig x
-> GetFieldLevelEncryptionConfig
forall x.
GetFieldLevelEncryptionConfig
-> Rep GetFieldLevelEncryptionConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetFieldLevelEncryptionConfig x
-> GetFieldLevelEncryptionConfig
$cfrom :: forall x.
GetFieldLevelEncryptionConfig
-> Rep GetFieldLevelEncryptionConfig x
Prelude.Generic)

-- |
-- Create a value of 'GetFieldLevelEncryptionConfig' 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:
--
-- 'id', 'getFieldLevelEncryptionConfig_id' - Request the ID for the field-level encryption configuration information.
newGetFieldLevelEncryptionConfig ::
  -- | 'id'
  Prelude.Text ->
  GetFieldLevelEncryptionConfig
newGetFieldLevelEncryptionConfig :: Text -> GetFieldLevelEncryptionConfig
newGetFieldLevelEncryptionConfig Text
pId_ =
  GetFieldLevelEncryptionConfig' {$sel:id:GetFieldLevelEncryptionConfig' :: Text
id = Text
pId_}

-- | Request the ID for the field-level encryption configuration information.
getFieldLevelEncryptionConfig_id :: Lens.Lens' GetFieldLevelEncryptionConfig Prelude.Text
getFieldLevelEncryptionConfig_id :: Lens' GetFieldLevelEncryptionConfig Text
getFieldLevelEncryptionConfig_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetFieldLevelEncryptionConfig' {Text
id :: Text
$sel:id:GetFieldLevelEncryptionConfig' :: GetFieldLevelEncryptionConfig -> Text
id} -> Text
id) (\s :: GetFieldLevelEncryptionConfig
s@GetFieldLevelEncryptionConfig' {} Text
a -> GetFieldLevelEncryptionConfig
s {$sel:id:GetFieldLevelEncryptionConfig' :: Text
id = Text
a} :: GetFieldLevelEncryptionConfig)

instance
  Core.AWSRequest
    GetFieldLevelEncryptionConfig
  where
  type
    AWSResponse GetFieldLevelEncryptionConfig =
      GetFieldLevelEncryptionConfigResponse
  request :: (Service -> Service)
-> GetFieldLevelEncryptionConfig
-> Request GetFieldLevelEncryptionConfig
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetFieldLevelEncryptionConfig
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetFieldLevelEncryptionConfig)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Text
-> Maybe FieldLevelEncryptionConfig
-> Int
-> GetFieldLevelEncryptionConfigResponse
GetFieldLevelEncryptionConfigResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (ResponseHeaders
h forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Data..#? HeaderName
"ETag")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall a. FromXML a => [Node] -> Either String a
Data.parseXML [Node]
x)
            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
    GetFieldLevelEncryptionConfig
  where
  hashWithSalt :: Int -> GetFieldLevelEncryptionConfig -> Int
hashWithSalt Int
_salt GetFieldLevelEncryptionConfig' {Text
id :: Text
$sel:id:GetFieldLevelEncryptionConfig' :: GetFieldLevelEncryptionConfig -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
id

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

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

instance Data.ToPath GetFieldLevelEncryptionConfig where
  toPath :: GetFieldLevelEncryptionConfig -> ByteString
toPath GetFieldLevelEncryptionConfig' {Text
id :: Text
$sel:id:GetFieldLevelEncryptionConfig' :: GetFieldLevelEncryptionConfig -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/2020-05-31/field-level-encryption/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
id,
        ByteString
"/config"
      ]

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

-- | /See:/ 'newGetFieldLevelEncryptionConfigResponse' smart constructor.
data GetFieldLevelEncryptionConfigResponse = GetFieldLevelEncryptionConfigResponse'
  { -- | The current version of the field level encryption configuration. For
    -- example: @E2QWRUHAPOMQZL@.
    GetFieldLevelEncryptionConfigResponse -> Maybe Text
eTag :: Prelude.Maybe Prelude.Text,
    -- | Return the field-level encryption configuration information.
    GetFieldLevelEncryptionConfigResponse
-> Maybe FieldLevelEncryptionConfig
fieldLevelEncryptionConfig :: Prelude.Maybe FieldLevelEncryptionConfig,
    -- | The response's http status code.
    GetFieldLevelEncryptionConfigResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetFieldLevelEncryptionConfigResponse
-> GetFieldLevelEncryptionConfigResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetFieldLevelEncryptionConfigResponse
-> GetFieldLevelEncryptionConfigResponse -> Bool
$c/= :: GetFieldLevelEncryptionConfigResponse
-> GetFieldLevelEncryptionConfigResponse -> Bool
== :: GetFieldLevelEncryptionConfigResponse
-> GetFieldLevelEncryptionConfigResponse -> Bool
$c== :: GetFieldLevelEncryptionConfigResponse
-> GetFieldLevelEncryptionConfigResponse -> Bool
Prelude.Eq, ReadPrec [GetFieldLevelEncryptionConfigResponse]
ReadPrec GetFieldLevelEncryptionConfigResponse
Int -> ReadS GetFieldLevelEncryptionConfigResponse
ReadS [GetFieldLevelEncryptionConfigResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetFieldLevelEncryptionConfigResponse]
$creadListPrec :: ReadPrec [GetFieldLevelEncryptionConfigResponse]
readPrec :: ReadPrec GetFieldLevelEncryptionConfigResponse
$creadPrec :: ReadPrec GetFieldLevelEncryptionConfigResponse
readList :: ReadS [GetFieldLevelEncryptionConfigResponse]
$creadList :: ReadS [GetFieldLevelEncryptionConfigResponse]
readsPrec :: Int -> ReadS GetFieldLevelEncryptionConfigResponse
$creadsPrec :: Int -> ReadS GetFieldLevelEncryptionConfigResponse
Prelude.Read, Int -> GetFieldLevelEncryptionConfigResponse -> ShowS
[GetFieldLevelEncryptionConfigResponse] -> ShowS
GetFieldLevelEncryptionConfigResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetFieldLevelEncryptionConfigResponse] -> ShowS
$cshowList :: [GetFieldLevelEncryptionConfigResponse] -> ShowS
show :: GetFieldLevelEncryptionConfigResponse -> String
$cshow :: GetFieldLevelEncryptionConfigResponse -> String
showsPrec :: Int -> GetFieldLevelEncryptionConfigResponse -> ShowS
$cshowsPrec :: Int -> GetFieldLevelEncryptionConfigResponse -> ShowS
Prelude.Show, forall x.
Rep GetFieldLevelEncryptionConfigResponse x
-> GetFieldLevelEncryptionConfigResponse
forall x.
GetFieldLevelEncryptionConfigResponse
-> Rep GetFieldLevelEncryptionConfigResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetFieldLevelEncryptionConfigResponse x
-> GetFieldLevelEncryptionConfigResponse
$cfrom :: forall x.
GetFieldLevelEncryptionConfigResponse
-> Rep GetFieldLevelEncryptionConfigResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetFieldLevelEncryptionConfigResponse' 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:
--
-- 'eTag', 'getFieldLevelEncryptionConfigResponse_eTag' - The current version of the field level encryption configuration. For
-- example: @E2QWRUHAPOMQZL@.
--
-- 'fieldLevelEncryptionConfig', 'getFieldLevelEncryptionConfigResponse_fieldLevelEncryptionConfig' - Return the field-level encryption configuration information.
--
-- 'httpStatus', 'getFieldLevelEncryptionConfigResponse_httpStatus' - The response's http status code.
newGetFieldLevelEncryptionConfigResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetFieldLevelEncryptionConfigResponse
newGetFieldLevelEncryptionConfigResponse :: Int -> GetFieldLevelEncryptionConfigResponse
newGetFieldLevelEncryptionConfigResponse Int
pHttpStatus_ =
  GetFieldLevelEncryptionConfigResponse'
    { $sel:eTag:GetFieldLevelEncryptionConfigResponse' :: Maybe Text
eTag =
        forall a. Maybe a
Prelude.Nothing,
      $sel:fieldLevelEncryptionConfig:GetFieldLevelEncryptionConfigResponse' :: Maybe FieldLevelEncryptionConfig
fieldLevelEncryptionConfig =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetFieldLevelEncryptionConfigResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The current version of the field level encryption configuration. For
-- example: @E2QWRUHAPOMQZL@.
getFieldLevelEncryptionConfigResponse_eTag :: Lens.Lens' GetFieldLevelEncryptionConfigResponse (Prelude.Maybe Prelude.Text)
getFieldLevelEncryptionConfigResponse_eTag :: Lens' GetFieldLevelEncryptionConfigResponse (Maybe Text)
getFieldLevelEncryptionConfigResponse_eTag = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetFieldLevelEncryptionConfigResponse' {Maybe Text
eTag :: Maybe Text
$sel:eTag:GetFieldLevelEncryptionConfigResponse' :: GetFieldLevelEncryptionConfigResponse -> Maybe Text
eTag} -> Maybe Text
eTag) (\s :: GetFieldLevelEncryptionConfigResponse
s@GetFieldLevelEncryptionConfigResponse' {} Maybe Text
a -> GetFieldLevelEncryptionConfigResponse
s {$sel:eTag:GetFieldLevelEncryptionConfigResponse' :: Maybe Text
eTag = Maybe Text
a} :: GetFieldLevelEncryptionConfigResponse)

-- | Return the field-level encryption configuration information.
getFieldLevelEncryptionConfigResponse_fieldLevelEncryptionConfig :: Lens.Lens' GetFieldLevelEncryptionConfigResponse (Prelude.Maybe FieldLevelEncryptionConfig)
getFieldLevelEncryptionConfigResponse_fieldLevelEncryptionConfig :: Lens'
  GetFieldLevelEncryptionConfigResponse
  (Maybe FieldLevelEncryptionConfig)
getFieldLevelEncryptionConfigResponse_fieldLevelEncryptionConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetFieldLevelEncryptionConfigResponse' {Maybe FieldLevelEncryptionConfig
fieldLevelEncryptionConfig :: Maybe FieldLevelEncryptionConfig
$sel:fieldLevelEncryptionConfig:GetFieldLevelEncryptionConfigResponse' :: GetFieldLevelEncryptionConfigResponse
-> Maybe FieldLevelEncryptionConfig
fieldLevelEncryptionConfig} -> Maybe FieldLevelEncryptionConfig
fieldLevelEncryptionConfig) (\s :: GetFieldLevelEncryptionConfigResponse
s@GetFieldLevelEncryptionConfigResponse' {} Maybe FieldLevelEncryptionConfig
a -> GetFieldLevelEncryptionConfigResponse
s {$sel:fieldLevelEncryptionConfig:GetFieldLevelEncryptionConfigResponse' :: Maybe FieldLevelEncryptionConfig
fieldLevelEncryptionConfig = Maybe FieldLevelEncryptionConfig
a} :: GetFieldLevelEncryptionConfigResponse)

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

instance
  Prelude.NFData
    GetFieldLevelEncryptionConfigResponse
  where
  rnf :: GetFieldLevelEncryptionConfigResponse -> ()
rnf GetFieldLevelEncryptionConfigResponse' {Int
Maybe Text
Maybe FieldLevelEncryptionConfig
httpStatus :: Int
fieldLevelEncryptionConfig :: Maybe FieldLevelEncryptionConfig
eTag :: Maybe Text
$sel:httpStatus:GetFieldLevelEncryptionConfigResponse' :: GetFieldLevelEncryptionConfigResponse -> Int
$sel:fieldLevelEncryptionConfig:GetFieldLevelEncryptionConfigResponse' :: GetFieldLevelEncryptionConfigResponse
-> Maybe FieldLevelEncryptionConfig
$sel:eTag:GetFieldLevelEncryptionConfigResponse' :: GetFieldLevelEncryptionConfigResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
eTag
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FieldLevelEncryptionConfig
fieldLevelEncryptionConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus