{-# 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.AuditManager.GetEvidenceFolder
-- 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 an evidence folder from the specified assessment in Audit
-- Manager.
module Amazonka.AuditManager.GetEvidenceFolder
  ( -- * Creating a Request
    GetEvidenceFolder (..),
    newGetEvidenceFolder,

    -- * Request Lenses
    getEvidenceFolder_assessmentId,
    getEvidenceFolder_controlSetId,
    getEvidenceFolder_evidenceFolderId,

    -- * Destructuring the Response
    GetEvidenceFolderResponse (..),
    newGetEvidenceFolderResponse,

    -- * Response Lenses
    getEvidenceFolderResponse_evidenceFolder,
    getEvidenceFolderResponse_httpStatus,
  )
where

import Amazonka.AuditManager.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:/ 'newGetEvidenceFolder' smart constructor.
data GetEvidenceFolder = GetEvidenceFolder'
  { -- | The unique identifier for the assessment.
    GetEvidenceFolder -> Text
assessmentId :: Prelude.Text,
    -- | The unique identifier for the control set.
    GetEvidenceFolder -> Text
controlSetId :: Prelude.Text,
    -- | The unique identifier for the folder that the evidence is stored in.
    GetEvidenceFolder -> Text
evidenceFolderId :: Prelude.Text
  }
  deriving (GetEvidenceFolder -> GetEvidenceFolder -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetEvidenceFolder -> GetEvidenceFolder -> Bool
$c/= :: GetEvidenceFolder -> GetEvidenceFolder -> Bool
== :: GetEvidenceFolder -> GetEvidenceFolder -> Bool
$c== :: GetEvidenceFolder -> GetEvidenceFolder -> Bool
Prelude.Eq, ReadPrec [GetEvidenceFolder]
ReadPrec GetEvidenceFolder
Int -> ReadS GetEvidenceFolder
ReadS [GetEvidenceFolder]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetEvidenceFolder]
$creadListPrec :: ReadPrec [GetEvidenceFolder]
readPrec :: ReadPrec GetEvidenceFolder
$creadPrec :: ReadPrec GetEvidenceFolder
readList :: ReadS [GetEvidenceFolder]
$creadList :: ReadS [GetEvidenceFolder]
readsPrec :: Int -> ReadS GetEvidenceFolder
$creadsPrec :: Int -> ReadS GetEvidenceFolder
Prelude.Read, Int -> GetEvidenceFolder -> ShowS
[GetEvidenceFolder] -> ShowS
GetEvidenceFolder -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetEvidenceFolder] -> ShowS
$cshowList :: [GetEvidenceFolder] -> ShowS
show :: GetEvidenceFolder -> String
$cshow :: GetEvidenceFolder -> String
showsPrec :: Int -> GetEvidenceFolder -> ShowS
$cshowsPrec :: Int -> GetEvidenceFolder -> ShowS
Prelude.Show, forall x. Rep GetEvidenceFolder x -> GetEvidenceFolder
forall x. GetEvidenceFolder -> Rep GetEvidenceFolder x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetEvidenceFolder x -> GetEvidenceFolder
$cfrom :: forall x. GetEvidenceFolder -> Rep GetEvidenceFolder x
Prelude.Generic)

-- |
-- Create a value of 'GetEvidenceFolder' 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:
--
-- 'assessmentId', 'getEvidenceFolder_assessmentId' - The unique identifier for the assessment.
--
-- 'controlSetId', 'getEvidenceFolder_controlSetId' - The unique identifier for the control set.
--
-- 'evidenceFolderId', 'getEvidenceFolder_evidenceFolderId' - The unique identifier for the folder that the evidence is stored in.
newGetEvidenceFolder ::
  -- | 'assessmentId'
  Prelude.Text ->
  -- | 'controlSetId'
  Prelude.Text ->
  -- | 'evidenceFolderId'
  Prelude.Text ->
  GetEvidenceFolder
newGetEvidenceFolder :: Text -> Text -> Text -> GetEvidenceFolder
newGetEvidenceFolder
  Text
pAssessmentId_
  Text
pControlSetId_
  Text
pEvidenceFolderId_ =
    GetEvidenceFolder'
      { $sel:assessmentId:GetEvidenceFolder' :: Text
assessmentId = Text
pAssessmentId_,
        $sel:controlSetId:GetEvidenceFolder' :: Text
controlSetId = Text
pControlSetId_,
        $sel:evidenceFolderId:GetEvidenceFolder' :: Text
evidenceFolderId = Text
pEvidenceFolderId_
      }

-- | The unique identifier for the assessment.
getEvidenceFolder_assessmentId :: Lens.Lens' GetEvidenceFolder Prelude.Text
getEvidenceFolder_assessmentId :: Lens' GetEvidenceFolder Text
getEvidenceFolder_assessmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEvidenceFolder' {Text
assessmentId :: Text
$sel:assessmentId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
assessmentId} -> Text
assessmentId) (\s :: GetEvidenceFolder
s@GetEvidenceFolder' {} Text
a -> GetEvidenceFolder
s {$sel:assessmentId:GetEvidenceFolder' :: Text
assessmentId = Text
a} :: GetEvidenceFolder)

-- | The unique identifier for the control set.
getEvidenceFolder_controlSetId :: Lens.Lens' GetEvidenceFolder Prelude.Text
getEvidenceFolder_controlSetId :: Lens' GetEvidenceFolder Text
getEvidenceFolder_controlSetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEvidenceFolder' {Text
controlSetId :: Text
$sel:controlSetId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
controlSetId} -> Text
controlSetId) (\s :: GetEvidenceFolder
s@GetEvidenceFolder' {} Text
a -> GetEvidenceFolder
s {$sel:controlSetId:GetEvidenceFolder' :: Text
controlSetId = Text
a} :: GetEvidenceFolder)

-- | The unique identifier for the folder that the evidence is stored in.
getEvidenceFolder_evidenceFolderId :: Lens.Lens' GetEvidenceFolder Prelude.Text
getEvidenceFolder_evidenceFolderId :: Lens' GetEvidenceFolder Text
getEvidenceFolder_evidenceFolderId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEvidenceFolder' {Text
evidenceFolderId :: Text
$sel:evidenceFolderId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
evidenceFolderId} -> Text
evidenceFolderId) (\s :: GetEvidenceFolder
s@GetEvidenceFolder' {} Text
a -> GetEvidenceFolder
s {$sel:evidenceFolderId:GetEvidenceFolder' :: Text
evidenceFolderId = Text
a} :: GetEvidenceFolder)

instance Core.AWSRequest GetEvidenceFolder where
  type
    AWSResponse GetEvidenceFolder =
      GetEvidenceFolderResponse
  request :: (Service -> Service)
-> GetEvidenceFolder -> Request GetEvidenceFolder
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 GetEvidenceFolder
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetEvidenceFolder)))
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 AssessmentEvidenceFolder -> Int -> GetEvidenceFolderResponse
GetEvidenceFolderResponse'
            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
"evidenceFolder")
            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 GetEvidenceFolder where
  hashWithSalt :: Int -> GetEvidenceFolder -> Int
hashWithSalt Int
_salt GetEvidenceFolder' {Text
evidenceFolderId :: Text
controlSetId :: Text
assessmentId :: Text
$sel:evidenceFolderId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
$sel:controlSetId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
$sel:assessmentId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assessmentId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
controlSetId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
evidenceFolderId

instance Prelude.NFData GetEvidenceFolder where
  rnf :: GetEvidenceFolder -> ()
rnf GetEvidenceFolder' {Text
evidenceFolderId :: Text
controlSetId :: Text
assessmentId :: Text
$sel:evidenceFolderId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
$sel:controlSetId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
$sel:assessmentId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
assessmentId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
controlSetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
evidenceFolderId

instance Data.ToHeaders GetEvidenceFolder where
  toHeaders :: GetEvidenceFolder -> 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.ToPath GetEvidenceFolder where
  toPath :: GetEvidenceFolder -> ByteString
toPath GetEvidenceFolder' {Text
evidenceFolderId :: Text
controlSetId :: Text
assessmentId :: Text
$sel:evidenceFolderId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
$sel:controlSetId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
$sel:assessmentId:GetEvidenceFolder' :: GetEvidenceFolder -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/assessments/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
assessmentId,
        ByteString
"/controlSets/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
controlSetId,
        ByteString
"/evidenceFolders/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
evidenceFolderId
      ]

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

-- | /See:/ 'newGetEvidenceFolderResponse' smart constructor.
data GetEvidenceFolderResponse = GetEvidenceFolderResponse'
  { -- | The folder that the evidence is stored in.
    GetEvidenceFolderResponse -> Maybe AssessmentEvidenceFolder
evidenceFolder :: Prelude.Maybe AssessmentEvidenceFolder,
    -- | The response's http status code.
    GetEvidenceFolderResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetEvidenceFolderResponse -> GetEvidenceFolderResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetEvidenceFolderResponse -> GetEvidenceFolderResponse -> Bool
$c/= :: GetEvidenceFolderResponse -> GetEvidenceFolderResponse -> Bool
== :: GetEvidenceFolderResponse -> GetEvidenceFolderResponse -> Bool
$c== :: GetEvidenceFolderResponse -> GetEvidenceFolderResponse -> Bool
Prelude.Eq, ReadPrec [GetEvidenceFolderResponse]
ReadPrec GetEvidenceFolderResponse
Int -> ReadS GetEvidenceFolderResponse
ReadS [GetEvidenceFolderResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetEvidenceFolderResponse]
$creadListPrec :: ReadPrec [GetEvidenceFolderResponse]
readPrec :: ReadPrec GetEvidenceFolderResponse
$creadPrec :: ReadPrec GetEvidenceFolderResponse
readList :: ReadS [GetEvidenceFolderResponse]
$creadList :: ReadS [GetEvidenceFolderResponse]
readsPrec :: Int -> ReadS GetEvidenceFolderResponse
$creadsPrec :: Int -> ReadS GetEvidenceFolderResponse
Prelude.Read, Int -> GetEvidenceFolderResponse -> ShowS
[GetEvidenceFolderResponse] -> ShowS
GetEvidenceFolderResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetEvidenceFolderResponse] -> ShowS
$cshowList :: [GetEvidenceFolderResponse] -> ShowS
show :: GetEvidenceFolderResponse -> String
$cshow :: GetEvidenceFolderResponse -> String
showsPrec :: Int -> GetEvidenceFolderResponse -> ShowS
$cshowsPrec :: Int -> GetEvidenceFolderResponse -> ShowS
Prelude.Show, forall x.
Rep GetEvidenceFolderResponse x -> GetEvidenceFolderResponse
forall x.
GetEvidenceFolderResponse -> Rep GetEvidenceFolderResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetEvidenceFolderResponse x -> GetEvidenceFolderResponse
$cfrom :: forall x.
GetEvidenceFolderResponse -> Rep GetEvidenceFolderResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetEvidenceFolderResponse' 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:
--
-- 'evidenceFolder', 'getEvidenceFolderResponse_evidenceFolder' - The folder that the evidence is stored in.
--
-- 'httpStatus', 'getEvidenceFolderResponse_httpStatus' - The response's http status code.
newGetEvidenceFolderResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetEvidenceFolderResponse
newGetEvidenceFolderResponse :: Int -> GetEvidenceFolderResponse
newGetEvidenceFolderResponse Int
pHttpStatus_ =
  GetEvidenceFolderResponse'
    { $sel:evidenceFolder:GetEvidenceFolderResponse' :: Maybe AssessmentEvidenceFolder
evidenceFolder =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetEvidenceFolderResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The folder that the evidence is stored in.
getEvidenceFolderResponse_evidenceFolder :: Lens.Lens' GetEvidenceFolderResponse (Prelude.Maybe AssessmentEvidenceFolder)
getEvidenceFolderResponse_evidenceFolder :: Lens' GetEvidenceFolderResponse (Maybe AssessmentEvidenceFolder)
getEvidenceFolderResponse_evidenceFolder = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetEvidenceFolderResponse' {Maybe AssessmentEvidenceFolder
evidenceFolder :: Maybe AssessmentEvidenceFolder
$sel:evidenceFolder:GetEvidenceFolderResponse' :: GetEvidenceFolderResponse -> Maybe AssessmentEvidenceFolder
evidenceFolder} -> Maybe AssessmentEvidenceFolder
evidenceFolder) (\s :: GetEvidenceFolderResponse
s@GetEvidenceFolderResponse' {} Maybe AssessmentEvidenceFolder
a -> GetEvidenceFolderResponse
s {$sel:evidenceFolder:GetEvidenceFolderResponse' :: Maybe AssessmentEvidenceFolder
evidenceFolder = Maybe AssessmentEvidenceFolder
a} :: GetEvidenceFolderResponse)

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

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