{-# 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.GuardDuty.UpdateFindingsFeedback
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Marks the specified GuardDuty findings as useful or not useful.
module Amazonka.GuardDuty.UpdateFindingsFeedback
  ( -- * Creating a Request
    UpdateFindingsFeedback (..),
    newUpdateFindingsFeedback,

    -- * Request Lenses
    updateFindingsFeedback_comments,
    updateFindingsFeedback_detectorId,
    updateFindingsFeedback_findingIds,
    updateFindingsFeedback_feedback,

    -- * Destructuring the Response
    UpdateFindingsFeedbackResponse (..),
    newUpdateFindingsFeedbackResponse,

    -- * Response Lenses
    updateFindingsFeedbackResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUpdateFindingsFeedback' smart constructor.
data UpdateFindingsFeedback = UpdateFindingsFeedback'
  { -- | Additional feedback about the GuardDuty findings.
    UpdateFindingsFeedback -> Maybe Text
comments :: Prelude.Maybe Prelude.Text,
    -- | The ID of the detector associated with the findings to update feedback
    -- for.
    UpdateFindingsFeedback -> Text
detectorId :: Prelude.Text,
    -- | The IDs of the findings that you want to mark as useful or not useful.
    UpdateFindingsFeedback -> [Text]
findingIds :: [Prelude.Text],
    -- | The feedback for the finding.
    UpdateFindingsFeedback -> Feedback
feedback :: Feedback
  }
  deriving (UpdateFindingsFeedback -> UpdateFindingsFeedback -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateFindingsFeedback -> UpdateFindingsFeedback -> Bool
$c/= :: UpdateFindingsFeedback -> UpdateFindingsFeedback -> Bool
== :: UpdateFindingsFeedback -> UpdateFindingsFeedback -> Bool
$c== :: UpdateFindingsFeedback -> UpdateFindingsFeedback -> Bool
Prelude.Eq, ReadPrec [UpdateFindingsFeedback]
ReadPrec UpdateFindingsFeedback
Int -> ReadS UpdateFindingsFeedback
ReadS [UpdateFindingsFeedback]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateFindingsFeedback]
$creadListPrec :: ReadPrec [UpdateFindingsFeedback]
readPrec :: ReadPrec UpdateFindingsFeedback
$creadPrec :: ReadPrec UpdateFindingsFeedback
readList :: ReadS [UpdateFindingsFeedback]
$creadList :: ReadS [UpdateFindingsFeedback]
readsPrec :: Int -> ReadS UpdateFindingsFeedback
$creadsPrec :: Int -> ReadS UpdateFindingsFeedback
Prelude.Read, Int -> UpdateFindingsFeedback -> ShowS
[UpdateFindingsFeedback] -> ShowS
UpdateFindingsFeedback -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateFindingsFeedback] -> ShowS
$cshowList :: [UpdateFindingsFeedback] -> ShowS
show :: UpdateFindingsFeedback -> String
$cshow :: UpdateFindingsFeedback -> String
showsPrec :: Int -> UpdateFindingsFeedback -> ShowS
$cshowsPrec :: Int -> UpdateFindingsFeedback -> ShowS
Prelude.Show, forall x. Rep UpdateFindingsFeedback x -> UpdateFindingsFeedback
forall x. UpdateFindingsFeedback -> Rep UpdateFindingsFeedback x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateFindingsFeedback x -> UpdateFindingsFeedback
$cfrom :: forall x. UpdateFindingsFeedback -> Rep UpdateFindingsFeedback x
Prelude.Generic)

-- |
-- Create a value of 'UpdateFindingsFeedback' 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:
--
-- 'comments', 'updateFindingsFeedback_comments' - Additional feedback about the GuardDuty findings.
--
-- 'detectorId', 'updateFindingsFeedback_detectorId' - The ID of the detector associated with the findings to update feedback
-- for.
--
-- 'findingIds', 'updateFindingsFeedback_findingIds' - The IDs of the findings that you want to mark as useful or not useful.
--
-- 'feedback', 'updateFindingsFeedback_feedback' - The feedback for the finding.
newUpdateFindingsFeedback ::
  -- | 'detectorId'
  Prelude.Text ->
  -- | 'feedback'
  Feedback ->
  UpdateFindingsFeedback
newUpdateFindingsFeedback :: Text -> Feedback -> UpdateFindingsFeedback
newUpdateFindingsFeedback Text
pDetectorId_ Feedback
pFeedback_ =
  UpdateFindingsFeedback'
    { $sel:comments:UpdateFindingsFeedback' :: Maybe Text
comments = forall a. Maybe a
Prelude.Nothing,
      $sel:detectorId:UpdateFindingsFeedback' :: Text
detectorId = Text
pDetectorId_,
      $sel:findingIds:UpdateFindingsFeedback' :: [Text]
findingIds = forall a. Monoid a => a
Prelude.mempty,
      $sel:feedback:UpdateFindingsFeedback' :: Feedback
feedback = Feedback
pFeedback_
    }

-- | Additional feedback about the GuardDuty findings.
updateFindingsFeedback_comments :: Lens.Lens' UpdateFindingsFeedback (Prelude.Maybe Prelude.Text)
updateFindingsFeedback_comments :: Lens' UpdateFindingsFeedback (Maybe Text)
updateFindingsFeedback_comments = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateFindingsFeedback' {Maybe Text
comments :: Maybe Text
$sel:comments:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Maybe Text
comments} -> Maybe Text
comments) (\s :: UpdateFindingsFeedback
s@UpdateFindingsFeedback' {} Maybe Text
a -> UpdateFindingsFeedback
s {$sel:comments:UpdateFindingsFeedback' :: Maybe Text
comments = Maybe Text
a} :: UpdateFindingsFeedback)

-- | The ID of the detector associated with the findings to update feedback
-- for.
updateFindingsFeedback_detectorId :: Lens.Lens' UpdateFindingsFeedback Prelude.Text
updateFindingsFeedback_detectorId :: Lens' UpdateFindingsFeedback Text
updateFindingsFeedback_detectorId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateFindingsFeedback' {Text
detectorId :: Text
$sel:detectorId:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Text
detectorId} -> Text
detectorId) (\s :: UpdateFindingsFeedback
s@UpdateFindingsFeedback' {} Text
a -> UpdateFindingsFeedback
s {$sel:detectorId:UpdateFindingsFeedback' :: Text
detectorId = Text
a} :: UpdateFindingsFeedback)

-- | The IDs of the findings that you want to mark as useful or not useful.
updateFindingsFeedback_findingIds :: Lens.Lens' UpdateFindingsFeedback [Prelude.Text]
updateFindingsFeedback_findingIds :: Lens' UpdateFindingsFeedback [Text]
updateFindingsFeedback_findingIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateFindingsFeedback' {[Text]
findingIds :: [Text]
$sel:findingIds:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> [Text]
findingIds} -> [Text]
findingIds) (\s :: UpdateFindingsFeedback
s@UpdateFindingsFeedback' {} [Text]
a -> UpdateFindingsFeedback
s {$sel:findingIds:UpdateFindingsFeedback' :: [Text]
findingIds = [Text]
a} :: UpdateFindingsFeedback) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The feedback for the finding.
updateFindingsFeedback_feedback :: Lens.Lens' UpdateFindingsFeedback Feedback
updateFindingsFeedback_feedback :: Lens' UpdateFindingsFeedback Feedback
updateFindingsFeedback_feedback = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateFindingsFeedback' {Feedback
feedback :: Feedback
$sel:feedback:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Feedback
feedback} -> Feedback
feedback) (\s :: UpdateFindingsFeedback
s@UpdateFindingsFeedback' {} Feedback
a -> UpdateFindingsFeedback
s {$sel:feedback:UpdateFindingsFeedback' :: Feedback
feedback = Feedback
a} :: UpdateFindingsFeedback)

instance Core.AWSRequest UpdateFindingsFeedback where
  type
    AWSResponse UpdateFindingsFeedback =
      UpdateFindingsFeedbackResponse
  request :: (Service -> Service)
-> UpdateFindingsFeedback -> Request UpdateFindingsFeedback
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 UpdateFindingsFeedback
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateFindingsFeedback)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> UpdateFindingsFeedbackResponse
UpdateFindingsFeedbackResponse'
            forall (f :: * -> *) a b. Functor 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 UpdateFindingsFeedback where
  hashWithSalt :: Int -> UpdateFindingsFeedback -> Int
hashWithSalt Int
_salt UpdateFindingsFeedback' {[Text]
Maybe Text
Text
Feedback
feedback :: Feedback
findingIds :: [Text]
detectorId :: Text
comments :: Maybe Text
$sel:feedback:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Feedback
$sel:findingIds:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> [Text]
$sel:detectorId:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Text
$sel:comments:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
comments
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
detectorId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [Text]
findingIds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Feedback
feedback

instance Prelude.NFData UpdateFindingsFeedback where
  rnf :: UpdateFindingsFeedback -> ()
rnf UpdateFindingsFeedback' {[Text]
Maybe Text
Text
Feedback
feedback :: Feedback
findingIds :: [Text]
detectorId :: Text
comments :: Maybe Text
$sel:feedback:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Feedback
$sel:findingIds:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> [Text]
$sel:detectorId:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Text
$sel:comments:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
comments
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
detectorId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [Text]
findingIds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Feedback
feedback

instance Data.ToHeaders UpdateFindingsFeedback where
  toHeaders :: UpdateFindingsFeedback -> 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 UpdateFindingsFeedback where
  toJSON :: UpdateFindingsFeedback -> Value
toJSON UpdateFindingsFeedback' {[Text]
Maybe Text
Text
Feedback
feedback :: Feedback
findingIds :: [Text]
detectorId :: Text
comments :: Maybe Text
$sel:feedback:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Feedback
$sel:findingIds:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> [Text]
$sel:detectorId:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Text
$sel:comments:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"comments" 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
comments,
            forall a. a -> Maybe a
Prelude.Just (Key
"findingIds" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [Text]
findingIds),
            forall a. a -> Maybe a
Prelude.Just (Key
"feedback" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Feedback
feedback)
          ]
      )

instance Data.ToPath UpdateFindingsFeedback where
  toPath :: UpdateFindingsFeedback -> ByteString
toPath UpdateFindingsFeedback' {[Text]
Maybe Text
Text
Feedback
feedback :: Feedback
findingIds :: [Text]
detectorId :: Text
comments :: Maybe Text
$sel:feedback:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Feedback
$sel:findingIds:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> [Text]
$sel:detectorId:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Text
$sel:comments:UpdateFindingsFeedback' :: UpdateFindingsFeedback -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/detector/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
detectorId,
        ByteString
"/findings/feedback"
      ]

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

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

-- |
-- Create a value of 'UpdateFindingsFeedbackResponse' 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:
--
-- 'httpStatus', 'updateFindingsFeedbackResponse_httpStatus' - The response's http status code.
newUpdateFindingsFeedbackResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateFindingsFeedbackResponse
newUpdateFindingsFeedbackResponse :: Int -> UpdateFindingsFeedbackResponse
newUpdateFindingsFeedbackResponse Int
pHttpStatus_ =
  UpdateFindingsFeedbackResponse'
    { $sel:httpStatus:UpdateFindingsFeedbackResponse' :: Int
httpStatus =
        Int
pHttpStatus_
    }

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

instance
  Prelude.NFData
    UpdateFindingsFeedbackResponse
  where
  rnf :: UpdateFindingsFeedbackResponse -> ()
rnf UpdateFindingsFeedbackResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateFindingsFeedbackResponse' :: UpdateFindingsFeedbackResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus