{-# 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.DirectoryService.DescribeCertificate
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Displays information about the certificate registered for secure LDAP or
-- client certificate authentication.
module Amazonka.DirectoryService.DescribeCertificate
  ( -- * Creating a Request
    DescribeCertificate (..),
    newDescribeCertificate,

    -- * Request Lenses
    describeCertificate_directoryId,
    describeCertificate_certificateId,

    -- * Destructuring the Response
    DescribeCertificateResponse (..),
    newDescribeCertificateResponse,

    -- * Response Lenses
    describeCertificateResponse_certificate,
    describeCertificateResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeCertificate' smart constructor.
data DescribeCertificate = DescribeCertificate'
  { -- | The identifier of the directory.
    DescribeCertificate -> Text
directoryId :: Prelude.Text,
    -- | The identifier of the certificate.
    DescribeCertificate -> Text
certificateId :: Prelude.Text
  }
  deriving (DescribeCertificate -> DescribeCertificate -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeCertificate -> DescribeCertificate -> Bool
$c/= :: DescribeCertificate -> DescribeCertificate -> Bool
== :: DescribeCertificate -> DescribeCertificate -> Bool
$c== :: DescribeCertificate -> DescribeCertificate -> Bool
Prelude.Eq, ReadPrec [DescribeCertificate]
ReadPrec DescribeCertificate
Int -> ReadS DescribeCertificate
ReadS [DescribeCertificate]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeCertificate]
$creadListPrec :: ReadPrec [DescribeCertificate]
readPrec :: ReadPrec DescribeCertificate
$creadPrec :: ReadPrec DescribeCertificate
readList :: ReadS [DescribeCertificate]
$creadList :: ReadS [DescribeCertificate]
readsPrec :: Int -> ReadS DescribeCertificate
$creadsPrec :: Int -> ReadS DescribeCertificate
Prelude.Read, Int -> DescribeCertificate -> ShowS
[DescribeCertificate] -> ShowS
DescribeCertificate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeCertificate] -> ShowS
$cshowList :: [DescribeCertificate] -> ShowS
show :: DescribeCertificate -> String
$cshow :: DescribeCertificate -> String
showsPrec :: Int -> DescribeCertificate -> ShowS
$cshowsPrec :: Int -> DescribeCertificate -> ShowS
Prelude.Show, forall x. Rep DescribeCertificate x -> DescribeCertificate
forall x. DescribeCertificate -> Rep DescribeCertificate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeCertificate x -> DescribeCertificate
$cfrom :: forall x. DescribeCertificate -> Rep DescribeCertificate x
Prelude.Generic)

-- |
-- Create a value of 'DescribeCertificate' 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:
--
-- 'directoryId', 'describeCertificate_directoryId' - The identifier of the directory.
--
-- 'certificateId', 'describeCertificate_certificateId' - The identifier of the certificate.
newDescribeCertificate ::
  -- | 'directoryId'
  Prelude.Text ->
  -- | 'certificateId'
  Prelude.Text ->
  DescribeCertificate
newDescribeCertificate :: Text -> Text -> DescribeCertificate
newDescribeCertificate Text
pDirectoryId_ Text
pCertificateId_ =
  DescribeCertificate'
    { $sel:directoryId:DescribeCertificate' :: Text
directoryId = Text
pDirectoryId_,
      $sel:certificateId:DescribeCertificate' :: Text
certificateId = Text
pCertificateId_
    }

-- | The identifier of the directory.
describeCertificate_directoryId :: Lens.Lens' DescribeCertificate Prelude.Text
describeCertificate_directoryId :: Lens' DescribeCertificate Text
describeCertificate_directoryId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeCertificate' {Text
directoryId :: Text
$sel:directoryId:DescribeCertificate' :: DescribeCertificate -> Text
directoryId} -> Text
directoryId) (\s :: DescribeCertificate
s@DescribeCertificate' {} Text
a -> DescribeCertificate
s {$sel:directoryId:DescribeCertificate' :: Text
directoryId = Text
a} :: DescribeCertificate)

-- | The identifier of the certificate.
describeCertificate_certificateId :: Lens.Lens' DescribeCertificate Prelude.Text
describeCertificate_certificateId :: Lens' DescribeCertificate Text
describeCertificate_certificateId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeCertificate' {Text
certificateId :: Text
$sel:certificateId:DescribeCertificate' :: DescribeCertificate -> Text
certificateId} -> Text
certificateId) (\s :: DescribeCertificate
s@DescribeCertificate' {} Text
a -> DescribeCertificate
s {$sel:certificateId:DescribeCertificate' :: Text
certificateId = Text
a} :: DescribeCertificate)

instance Core.AWSRequest DescribeCertificate where
  type
    AWSResponse DescribeCertificate =
      DescribeCertificateResponse
  request :: (Service -> Service)
-> DescribeCertificate -> Request DescribeCertificate
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 DescribeCertificate
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeCertificate)))
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 Certificate -> Int -> DescribeCertificateResponse
DescribeCertificateResponse'
            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
"Certificate")
            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 DescribeCertificate where
  hashWithSalt :: Int -> DescribeCertificate -> Int
hashWithSalt Int
_salt DescribeCertificate' {Text
certificateId :: Text
directoryId :: Text
$sel:certificateId:DescribeCertificate' :: DescribeCertificate -> Text
$sel:directoryId:DescribeCertificate' :: DescribeCertificate -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
directoryId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
certificateId

instance Prelude.NFData DescribeCertificate where
  rnf :: DescribeCertificate -> ()
rnf DescribeCertificate' {Text
certificateId :: Text
directoryId :: Text
$sel:certificateId:DescribeCertificate' :: DescribeCertificate -> Text
$sel:directoryId:DescribeCertificate' :: DescribeCertificate -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
directoryId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
certificateId

instance Data.ToHeaders DescribeCertificate where
  toHeaders :: DescribeCertificate -> 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
"DirectoryService_20150416.DescribeCertificate" ::
                          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 DescribeCertificate where
  toJSON :: DescribeCertificate -> Value
toJSON DescribeCertificate' {Text
certificateId :: Text
directoryId :: Text
$sel:certificateId:DescribeCertificate' :: DescribeCertificate -> Text
$sel:directoryId:DescribeCertificate' :: DescribeCertificate -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"DirectoryId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
directoryId),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"CertificateId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
certificateId)
          ]
      )

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

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

-- | /See:/ 'newDescribeCertificateResponse' smart constructor.
data DescribeCertificateResponse = DescribeCertificateResponse'
  { -- | Information about the certificate, including registered date time,
    -- certificate state, the reason for the state, expiration date time, and
    -- certificate common name.
    DescribeCertificateResponse -> Maybe Certificate
certificate :: Prelude.Maybe Certificate,
    -- | The response's http status code.
    DescribeCertificateResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeCertificateResponse -> DescribeCertificateResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeCertificateResponse -> DescribeCertificateResponse -> Bool
$c/= :: DescribeCertificateResponse -> DescribeCertificateResponse -> Bool
== :: DescribeCertificateResponse -> DescribeCertificateResponse -> Bool
$c== :: DescribeCertificateResponse -> DescribeCertificateResponse -> Bool
Prelude.Eq, ReadPrec [DescribeCertificateResponse]
ReadPrec DescribeCertificateResponse
Int -> ReadS DescribeCertificateResponse
ReadS [DescribeCertificateResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeCertificateResponse]
$creadListPrec :: ReadPrec [DescribeCertificateResponse]
readPrec :: ReadPrec DescribeCertificateResponse
$creadPrec :: ReadPrec DescribeCertificateResponse
readList :: ReadS [DescribeCertificateResponse]
$creadList :: ReadS [DescribeCertificateResponse]
readsPrec :: Int -> ReadS DescribeCertificateResponse
$creadsPrec :: Int -> ReadS DescribeCertificateResponse
Prelude.Read, Int -> DescribeCertificateResponse -> ShowS
[DescribeCertificateResponse] -> ShowS
DescribeCertificateResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeCertificateResponse] -> ShowS
$cshowList :: [DescribeCertificateResponse] -> ShowS
show :: DescribeCertificateResponse -> String
$cshow :: DescribeCertificateResponse -> String
showsPrec :: Int -> DescribeCertificateResponse -> ShowS
$cshowsPrec :: Int -> DescribeCertificateResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeCertificateResponse x -> DescribeCertificateResponse
forall x.
DescribeCertificateResponse -> Rep DescribeCertificateResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeCertificateResponse x -> DescribeCertificateResponse
$cfrom :: forall x.
DescribeCertificateResponse -> Rep DescribeCertificateResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeCertificateResponse' 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:
--
-- 'certificate', 'describeCertificateResponse_certificate' - Information about the certificate, including registered date time,
-- certificate state, the reason for the state, expiration date time, and
-- certificate common name.
--
-- 'httpStatus', 'describeCertificateResponse_httpStatus' - The response's http status code.
newDescribeCertificateResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeCertificateResponse
newDescribeCertificateResponse :: Int -> DescribeCertificateResponse
newDescribeCertificateResponse Int
pHttpStatus_ =
  DescribeCertificateResponse'
    { $sel:certificate:DescribeCertificateResponse' :: Maybe Certificate
certificate =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeCertificateResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the certificate, including registered date time,
-- certificate state, the reason for the state, expiration date time, and
-- certificate common name.
describeCertificateResponse_certificate :: Lens.Lens' DescribeCertificateResponse (Prelude.Maybe Certificate)
describeCertificateResponse_certificate :: Lens' DescribeCertificateResponse (Maybe Certificate)
describeCertificateResponse_certificate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeCertificateResponse' {Maybe Certificate
certificate :: Maybe Certificate
$sel:certificate:DescribeCertificateResponse' :: DescribeCertificateResponse -> Maybe Certificate
certificate} -> Maybe Certificate
certificate) (\s :: DescribeCertificateResponse
s@DescribeCertificateResponse' {} Maybe Certificate
a -> DescribeCertificateResponse
s {$sel:certificate:DescribeCertificateResponse' :: Maybe Certificate
certificate = Maybe Certificate
a} :: DescribeCertificateResponse)

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

instance Prelude.NFData DescribeCertificateResponse where
  rnf :: DescribeCertificateResponse -> ()
rnf DescribeCertificateResponse' {Int
Maybe Certificate
httpStatus :: Int
certificate :: Maybe Certificate
$sel:httpStatus:DescribeCertificateResponse' :: DescribeCertificateResponse -> Int
$sel:certificate:DescribeCertificateResponse' :: DescribeCertificateResponse -> Maybe Certificate
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Certificate
certificate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus