{-# 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.EMR.ListSecurityConfigurations
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Lists all the security configurations visible to this account, providing
-- their creation dates and times, and their names. This call returns a
-- maximum of 50 clusters per call, but returns a marker to track the
-- paging of the cluster list across multiple ListSecurityConfigurations
-- calls.
--
-- This operation returns paginated results.
module Amazonka.EMR.ListSecurityConfigurations
  ( -- * Creating a Request
    ListSecurityConfigurations (..),
    newListSecurityConfigurations,

    -- * Request Lenses
    listSecurityConfigurations_marker,

    -- * Destructuring the Response
    ListSecurityConfigurationsResponse (..),
    newListSecurityConfigurationsResponse,

    -- * Response Lenses
    listSecurityConfigurationsResponse_marker,
    listSecurityConfigurationsResponse_securityConfigurations,
    listSecurityConfigurationsResponse_httpStatus,
  )
where

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

-- | /See:/ 'newListSecurityConfigurations' smart constructor.
data ListSecurityConfigurations = ListSecurityConfigurations'
  { -- | The pagination token that indicates the set of results to retrieve.
    ListSecurityConfigurations -> Maybe Text
marker :: Prelude.Maybe Prelude.Text
  }
  deriving (ListSecurityConfigurations -> ListSecurityConfigurations -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListSecurityConfigurations -> ListSecurityConfigurations -> Bool
$c/= :: ListSecurityConfigurations -> ListSecurityConfigurations -> Bool
== :: ListSecurityConfigurations -> ListSecurityConfigurations -> Bool
$c== :: ListSecurityConfigurations -> ListSecurityConfigurations -> Bool
Prelude.Eq, ReadPrec [ListSecurityConfigurations]
ReadPrec ListSecurityConfigurations
Int -> ReadS ListSecurityConfigurations
ReadS [ListSecurityConfigurations]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListSecurityConfigurations]
$creadListPrec :: ReadPrec [ListSecurityConfigurations]
readPrec :: ReadPrec ListSecurityConfigurations
$creadPrec :: ReadPrec ListSecurityConfigurations
readList :: ReadS [ListSecurityConfigurations]
$creadList :: ReadS [ListSecurityConfigurations]
readsPrec :: Int -> ReadS ListSecurityConfigurations
$creadsPrec :: Int -> ReadS ListSecurityConfigurations
Prelude.Read, Int -> ListSecurityConfigurations -> ShowS
[ListSecurityConfigurations] -> ShowS
ListSecurityConfigurations -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListSecurityConfigurations] -> ShowS
$cshowList :: [ListSecurityConfigurations] -> ShowS
show :: ListSecurityConfigurations -> String
$cshow :: ListSecurityConfigurations -> String
showsPrec :: Int -> ListSecurityConfigurations -> ShowS
$cshowsPrec :: Int -> ListSecurityConfigurations -> ShowS
Prelude.Show, forall x.
Rep ListSecurityConfigurations x -> ListSecurityConfigurations
forall x.
ListSecurityConfigurations -> Rep ListSecurityConfigurations x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ListSecurityConfigurations x -> ListSecurityConfigurations
$cfrom :: forall x.
ListSecurityConfigurations -> Rep ListSecurityConfigurations x
Prelude.Generic)

-- |
-- Create a value of 'ListSecurityConfigurations' 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:
--
-- 'marker', 'listSecurityConfigurations_marker' - The pagination token that indicates the set of results to retrieve.
newListSecurityConfigurations ::
  ListSecurityConfigurations
newListSecurityConfigurations :: ListSecurityConfigurations
newListSecurityConfigurations =
  ListSecurityConfigurations'
    { $sel:marker:ListSecurityConfigurations' :: Maybe Text
marker =
        forall a. Maybe a
Prelude.Nothing
    }

-- | The pagination token that indicates the set of results to retrieve.
listSecurityConfigurations_marker :: Lens.Lens' ListSecurityConfigurations (Prelude.Maybe Prelude.Text)
listSecurityConfigurations_marker :: Lens' ListSecurityConfigurations (Maybe Text)
listSecurityConfigurations_marker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListSecurityConfigurations' {Maybe Text
marker :: Maybe Text
$sel:marker:ListSecurityConfigurations' :: ListSecurityConfigurations -> Maybe Text
marker} -> Maybe Text
marker) (\s :: ListSecurityConfigurations
s@ListSecurityConfigurations' {} Maybe Text
a -> ListSecurityConfigurations
s {$sel:marker:ListSecurityConfigurations' :: Maybe Text
marker = Maybe Text
a} :: ListSecurityConfigurations)

instance Core.AWSPager ListSecurityConfigurations where
  page :: ListSecurityConfigurations
-> AWSResponse ListSecurityConfigurations
-> Maybe ListSecurityConfigurations
page ListSecurityConfigurations
rq AWSResponse ListSecurityConfigurations
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse ListSecurityConfigurations
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' ListSecurityConfigurationsResponse (Maybe Text)
listSecurityConfigurationsResponse_marker
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse ListSecurityConfigurations
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens'
  ListSecurityConfigurationsResponse
  (Maybe [SecurityConfigurationSummary])
listSecurityConfigurationsResponse_securityConfigurations
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
        forall a. a -> Maybe a
Prelude.Just
          forall a b. (a -> b) -> a -> b
Prelude.$ ListSecurityConfigurations
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' ListSecurityConfigurations (Maybe Text)
listSecurityConfigurations_marker
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse ListSecurityConfigurations
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' ListSecurityConfigurationsResponse (Maybe Text)
listSecurityConfigurationsResponse_marker
          forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance Core.AWSRequest ListSecurityConfigurations where
  type
    AWSResponse ListSecurityConfigurations =
      ListSecurityConfigurationsResponse
  request :: (Service -> Service)
-> ListSecurityConfigurations -> Request ListSecurityConfigurations
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 ListSecurityConfigurations
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse ListSecurityConfigurations)))
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 [SecurityConfigurationSummary]
-> Int
-> ListSecurityConfigurationsResponse
ListSecurityConfigurationsResponse'
            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
"Marker")
            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
"SecurityConfigurations"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            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 ListSecurityConfigurations where
  hashWithSalt :: Int -> ListSecurityConfigurations -> Int
hashWithSalt Int
_salt ListSecurityConfigurations' {Maybe Text
marker :: Maybe Text
$sel:marker:ListSecurityConfigurations' :: ListSecurityConfigurations -> Maybe Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
marker

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

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

instance Data.ToJSON ListSecurityConfigurations where
  toJSON :: ListSecurityConfigurations -> Value
toJSON ListSecurityConfigurations' {Maybe Text
marker :: Maybe Text
$sel:marker:ListSecurityConfigurations' :: ListSecurityConfigurations -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [(Key
"Marker" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
marker]
      )

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

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

-- | /See:/ 'newListSecurityConfigurationsResponse' smart constructor.
data ListSecurityConfigurationsResponse = ListSecurityConfigurationsResponse'
  { -- | A pagination token that indicates the next set of results to retrieve.
    -- Include the marker in the next ListSecurityConfiguration call to
    -- retrieve the next page of results, if required.
    ListSecurityConfigurationsResponse -> Maybe Text
marker :: Prelude.Maybe Prelude.Text,
    -- | The creation date and time, and name, of each security configuration.
    ListSecurityConfigurationsResponse
-> Maybe [SecurityConfigurationSummary]
securityConfigurations :: Prelude.Maybe [SecurityConfigurationSummary],
    -- | The response's http status code.
    ListSecurityConfigurationsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (ListSecurityConfigurationsResponse
-> ListSecurityConfigurationsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListSecurityConfigurationsResponse
-> ListSecurityConfigurationsResponse -> Bool
$c/= :: ListSecurityConfigurationsResponse
-> ListSecurityConfigurationsResponse -> Bool
== :: ListSecurityConfigurationsResponse
-> ListSecurityConfigurationsResponse -> Bool
$c== :: ListSecurityConfigurationsResponse
-> ListSecurityConfigurationsResponse -> Bool
Prelude.Eq, ReadPrec [ListSecurityConfigurationsResponse]
ReadPrec ListSecurityConfigurationsResponse
Int -> ReadS ListSecurityConfigurationsResponse
ReadS [ListSecurityConfigurationsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListSecurityConfigurationsResponse]
$creadListPrec :: ReadPrec [ListSecurityConfigurationsResponse]
readPrec :: ReadPrec ListSecurityConfigurationsResponse
$creadPrec :: ReadPrec ListSecurityConfigurationsResponse
readList :: ReadS [ListSecurityConfigurationsResponse]
$creadList :: ReadS [ListSecurityConfigurationsResponse]
readsPrec :: Int -> ReadS ListSecurityConfigurationsResponse
$creadsPrec :: Int -> ReadS ListSecurityConfigurationsResponse
Prelude.Read, Int -> ListSecurityConfigurationsResponse -> ShowS
[ListSecurityConfigurationsResponse] -> ShowS
ListSecurityConfigurationsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListSecurityConfigurationsResponse] -> ShowS
$cshowList :: [ListSecurityConfigurationsResponse] -> ShowS
show :: ListSecurityConfigurationsResponse -> String
$cshow :: ListSecurityConfigurationsResponse -> String
showsPrec :: Int -> ListSecurityConfigurationsResponse -> ShowS
$cshowsPrec :: Int -> ListSecurityConfigurationsResponse -> ShowS
Prelude.Show, forall x.
Rep ListSecurityConfigurationsResponse x
-> ListSecurityConfigurationsResponse
forall x.
ListSecurityConfigurationsResponse
-> Rep ListSecurityConfigurationsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ListSecurityConfigurationsResponse x
-> ListSecurityConfigurationsResponse
$cfrom :: forall x.
ListSecurityConfigurationsResponse
-> Rep ListSecurityConfigurationsResponse x
Prelude.Generic)

-- |
-- Create a value of 'ListSecurityConfigurationsResponse' 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:
--
-- 'marker', 'listSecurityConfigurationsResponse_marker' - A pagination token that indicates the next set of results to retrieve.
-- Include the marker in the next ListSecurityConfiguration call to
-- retrieve the next page of results, if required.
--
-- 'securityConfigurations', 'listSecurityConfigurationsResponse_securityConfigurations' - The creation date and time, and name, of each security configuration.
--
-- 'httpStatus', 'listSecurityConfigurationsResponse_httpStatus' - The response's http status code.
newListSecurityConfigurationsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ListSecurityConfigurationsResponse
newListSecurityConfigurationsResponse :: Int -> ListSecurityConfigurationsResponse
newListSecurityConfigurationsResponse Int
pHttpStatus_ =
  ListSecurityConfigurationsResponse'
    { $sel:marker:ListSecurityConfigurationsResponse' :: Maybe Text
marker =
        forall a. Maybe a
Prelude.Nothing,
      $sel:securityConfigurations:ListSecurityConfigurationsResponse' :: Maybe [SecurityConfigurationSummary]
securityConfigurations =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:ListSecurityConfigurationsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A pagination token that indicates the next set of results to retrieve.
-- Include the marker in the next ListSecurityConfiguration call to
-- retrieve the next page of results, if required.
listSecurityConfigurationsResponse_marker :: Lens.Lens' ListSecurityConfigurationsResponse (Prelude.Maybe Prelude.Text)
listSecurityConfigurationsResponse_marker :: Lens' ListSecurityConfigurationsResponse (Maybe Text)
listSecurityConfigurationsResponse_marker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListSecurityConfigurationsResponse' {Maybe Text
marker :: Maybe Text
$sel:marker:ListSecurityConfigurationsResponse' :: ListSecurityConfigurationsResponse -> Maybe Text
marker} -> Maybe Text
marker) (\s :: ListSecurityConfigurationsResponse
s@ListSecurityConfigurationsResponse' {} Maybe Text
a -> ListSecurityConfigurationsResponse
s {$sel:marker:ListSecurityConfigurationsResponse' :: Maybe Text
marker = Maybe Text
a} :: ListSecurityConfigurationsResponse)

-- | The creation date and time, and name, of each security configuration.
listSecurityConfigurationsResponse_securityConfigurations :: Lens.Lens' ListSecurityConfigurationsResponse (Prelude.Maybe [SecurityConfigurationSummary])
listSecurityConfigurationsResponse_securityConfigurations :: Lens'
  ListSecurityConfigurationsResponse
  (Maybe [SecurityConfigurationSummary])
listSecurityConfigurationsResponse_securityConfigurations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListSecurityConfigurationsResponse' {Maybe [SecurityConfigurationSummary]
securityConfigurations :: Maybe [SecurityConfigurationSummary]
$sel:securityConfigurations:ListSecurityConfigurationsResponse' :: ListSecurityConfigurationsResponse
-> Maybe [SecurityConfigurationSummary]
securityConfigurations} -> Maybe [SecurityConfigurationSummary]
securityConfigurations) (\s :: ListSecurityConfigurationsResponse
s@ListSecurityConfigurationsResponse' {} Maybe [SecurityConfigurationSummary]
a -> ListSecurityConfigurationsResponse
s {$sel:securityConfigurations:ListSecurityConfigurationsResponse' :: Maybe [SecurityConfigurationSummary]
securityConfigurations = Maybe [SecurityConfigurationSummary]
a} :: ListSecurityConfigurationsResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

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

instance
  Prelude.NFData
    ListSecurityConfigurationsResponse
  where
  rnf :: ListSecurityConfigurationsResponse -> ()
rnf ListSecurityConfigurationsResponse' {Int
Maybe [SecurityConfigurationSummary]
Maybe Text
httpStatus :: Int
securityConfigurations :: Maybe [SecurityConfigurationSummary]
marker :: Maybe Text
$sel:httpStatus:ListSecurityConfigurationsResponse' :: ListSecurityConfigurationsResponse -> Int
$sel:securityConfigurations:ListSecurityConfigurationsResponse' :: ListSecurityConfigurationsResponse
-> Maybe [SecurityConfigurationSummary]
$sel:marker:ListSecurityConfigurationsResponse' :: ListSecurityConfigurationsResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
marker
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [SecurityConfigurationSummary]
securityConfigurations
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus