{-# 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.UpdateMalwareScanSettings
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the malware scan settings.
module Amazonka.GuardDuty.UpdateMalwareScanSettings
  ( -- * Creating a Request
    UpdateMalwareScanSettings (..),
    newUpdateMalwareScanSettings,

    -- * Request Lenses
    updateMalwareScanSettings_ebsSnapshotPreservation,
    updateMalwareScanSettings_scanResourceCriteria,
    updateMalwareScanSettings_detectorId,

    -- * Destructuring the Response
    UpdateMalwareScanSettingsResponse (..),
    newUpdateMalwareScanSettingsResponse,

    -- * Response Lenses
    updateMalwareScanSettingsResponse_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:/ 'newUpdateMalwareScanSettings' smart constructor.
data UpdateMalwareScanSettings = UpdateMalwareScanSettings'
  { -- | An enum value representing possible snapshot preservation settings.
    UpdateMalwareScanSettings -> Maybe EbsSnapshotPreservation
ebsSnapshotPreservation :: Prelude.Maybe EbsSnapshotPreservation,
    -- | Represents the criteria to be used in the filter for selecting resources
    -- to scan.
    UpdateMalwareScanSettings -> Maybe ScanResourceCriteria
scanResourceCriteria :: Prelude.Maybe ScanResourceCriteria,
    -- | The unique ID of the detector that specifies the GuardDuty service where
    -- you want to update scan settings.
    UpdateMalwareScanSettings -> Text
detectorId :: Prelude.Text
  }
  deriving (UpdateMalwareScanSettings -> UpdateMalwareScanSettings -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateMalwareScanSettings -> UpdateMalwareScanSettings -> Bool
$c/= :: UpdateMalwareScanSettings -> UpdateMalwareScanSettings -> Bool
== :: UpdateMalwareScanSettings -> UpdateMalwareScanSettings -> Bool
$c== :: UpdateMalwareScanSettings -> UpdateMalwareScanSettings -> Bool
Prelude.Eq, ReadPrec [UpdateMalwareScanSettings]
ReadPrec UpdateMalwareScanSettings
Int -> ReadS UpdateMalwareScanSettings
ReadS [UpdateMalwareScanSettings]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateMalwareScanSettings]
$creadListPrec :: ReadPrec [UpdateMalwareScanSettings]
readPrec :: ReadPrec UpdateMalwareScanSettings
$creadPrec :: ReadPrec UpdateMalwareScanSettings
readList :: ReadS [UpdateMalwareScanSettings]
$creadList :: ReadS [UpdateMalwareScanSettings]
readsPrec :: Int -> ReadS UpdateMalwareScanSettings
$creadsPrec :: Int -> ReadS UpdateMalwareScanSettings
Prelude.Read, Int -> UpdateMalwareScanSettings -> ShowS
[UpdateMalwareScanSettings] -> ShowS
UpdateMalwareScanSettings -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateMalwareScanSettings] -> ShowS
$cshowList :: [UpdateMalwareScanSettings] -> ShowS
show :: UpdateMalwareScanSettings -> String
$cshow :: UpdateMalwareScanSettings -> String
showsPrec :: Int -> UpdateMalwareScanSettings -> ShowS
$cshowsPrec :: Int -> UpdateMalwareScanSettings -> ShowS
Prelude.Show, forall x.
Rep UpdateMalwareScanSettings x -> UpdateMalwareScanSettings
forall x.
UpdateMalwareScanSettings -> Rep UpdateMalwareScanSettings x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateMalwareScanSettings x -> UpdateMalwareScanSettings
$cfrom :: forall x.
UpdateMalwareScanSettings -> Rep UpdateMalwareScanSettings x
Prelude.Generic)

-- |
-- Create a value of 'UpdateMalwareScanSettings' 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:
--
-- 'ebsSnapshotPreservation', 'updateMalwareScanSettings_ebsSnapshotPreservation' - An enum value representing possible snapshot preservation settings.
--
-- 'scanResourceCriteria', 'updateMalwareScanSettings_scanResourceCriteria' - Represents the criteria to be used in the filter for selecting resources
-- to scan.
--
-- 'detectorId', 'updateMalwareScanSettings_detectorId' - The unique ID of the detector that specifies the GuardDuty service where
-- you want to update scan settings.
newUpdateMalwareScanSettings ::
  -- | 'detectorId'
  Prelude.Text ->
  UpdateMalwareScanSettings
newUpdateMalwareScanSettings :: Text -> UpdateMalwareScanSettings
newUpdateMalwareScanSettings Text
pDetectorId_ =
  UpdateMalwareScanSettings'
    { $sel:ebsSnapshotPreservation:UpdateMalwareScanSettings' :: Maybe EbsSnapshotPreservation
ebsSnapshotPreservation =
        forall a. Maybe a
Prelude.Nothing,
      $sel:scanResourceCriteria:UpdateMalwareScanSettings' :: Maybe ScanResourceCriteria
scanResourceCriteria = forall a. Maybe a
Prelude.Nothing,
      $sel:detectorId:UpdateMalwareScanSettings' :: Text
detectorId = Text
pDetectorId_
    }

-- | An enum value representing possible snapshot preservation settings.
updateMalwareScanSettings_ebsSnapshotPreservation :: Lens.Lens' UpdateMalwareScanSettings (Prelude.Maybe EbsSnapshotPreservation)
updateMalwareScanSettings_ebsSnapshotPreservation :: Lens' UpdateMalwareScanSettings (Maybe EbsSnapshotPreservation)
updateMalwareScanSettings_ebsSnapshotPreservation = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMalwareScanSettings' {Maybe EbsSnapshotPreservation
ebsSnapshotPreservation :: Maybe EbsSnapshotPreservation
$sel:ebsSnapshotPreservation:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe EbsSnapshotPreservation
ebsSnapshotPreservation} -> Maybe EbsSnapshotPreservation
ebsSnapshotPreservation) (\s :: UpdateMalwareScanSettings
s@UpdateMalwareScanSettings' {} Maybe EbsSnapshotPreservation
a -> UpdateMalwareScanSettings
s {$sel:ebsSnapshotPreservation:UpdateMalwareScanSettings' :: Maybe EbsSnapshotPreservation
ebsSnapshotPreservation = Maybe EbsSnapshotPreservation
a} :: UpdateMalwareScanSettings)

-- | Represents the criteria to be used in the filter for selecting resources
-- to scan.
updateMalwareScanSettings_scanResourceCriteria :: Lens.Lens' UpdateMalwareScanSettings (Prelude.Maybe ScanResourceCriteria)
updateMalwareScanSettings_scanResourceCriteria :: Lens' UpdateMalwareScanSettings (Maybe ScanResourceCriteria)
updateMalwareScanSettings_scanResourceCriteria = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMalwareScanSettings' {Maybe ScanResourceCriteria
scanResourceCriteria :: Maybe ScanResourceCriteria
$sel:scanResourceCriteria:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe ScanResourceCriteria
scanResourceCriteria} -> Maybe ScanResourceCriteria
scanResourceCriteria) (\s :: UpdateMalwareScanSettings
s@UpdateMalwareScanSettings' {} Maybe ScanResourceCriteria
a -> UpdateMalwareScanSettings
s {$sel:scanResourceCriteria:UpdateMalwareScanSettings' :: Maybe ScanResourceCriteria
scanResourceCriteria = Maybe ScanResourceCriteria
a} :: UpdateMalwareScanSettings)

-- | The unique ID of the detector that specifies the GuardDuty service where
-- you want to update scan settings.
updateMalwareScanSettings_detectorId :: Lens.Lens' UpdateMalwareScanSettings Prelude.Text
updateMalwareScanSettings_detectorId :: Lens' UpdateMalwareScanSettings Text
updateMalwareScanSettings_detectorId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMalwareScanSettings' {Text
detectorId :: Text
$sel:detectorId:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Text
detectorId} -> Text
detectorId) (\s :: UpdateMalwareScanSettings
s@UpdateMalwareScanSettings' {} Text
a -> UpdateMalwareScanSettings
s {$sel:detectorId:UpdateMalwareScanSettings' :: Text
detectorId = Text
a} :: UpdateMalwareScanSettings)

instance Core.AWSRequest UpdateMalwareScanSettings where
  type
    AWSResponse UpdateMalwareScanSettings =
      UpdateMalwareScanSettingsResponse
  request :: (Service -> Service)
-> UpdateMalwareScanSettings -> Request UpdateMalwareScanSettings
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 UpdateMalwareScanSettings
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateMalwareScanSettings)))
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 -> UpdateMalwareScanSettingsResponse
UpdateMalwareScanSettingsResponse'
            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 UpdateMalwareScanSettings where
  hashWithSalt :: Int -> UpdateMalwareScanSettings -> Int
hashWithSalt Int
_salt UpdateMalwareScanSettings' {Maybe EbsSnapshotPreservation
Maybe ScanResourceCriteria
Text
detectorId :: Text
scanResourceCriteria :: Maybe ScanResourceCriteria
ebsSnapshotPreservation :: Maybe EbsSnapshotPreservation
$sel:detectorId:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Text
$sel:scanResourceCriteria:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe ScanResourceCriteria
$sel:ebsSnapshotPreservation:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe EbsSnapshotPreservation
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EbsSnapshotPreservation
ebsSnapshotPreservation
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ScanResourceCriteria
scanResourceCriteria
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
detectorId

instance Prelude.NFData UpdateMalwareScanSettings where
  rnf :: UpdateMalwareScanSettings -> ()
rnf UpdateMalwareScanSettings' {Maybe EbsSnapshotPreservation
Maybe ScanResourceCriteria
Text
detectorId :: Text
scanResourceCriteria :: Maybe ScanResourceCriteria
ebsSnapshotPreservation :: Maybe EbsSnapshotPreservation
$sel:detectorId:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Text
$sel:scanResourceCriteria:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe ScanResourceCriteria
$sel:ebsSnapshotPreservation:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe EbsSnapshotPreservation
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe EbsSnapshotPreservation
ebsSnapshotPreservation
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ScanResourceCriteria
scanResourceCriteria
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
detectorId

instance Data.ToHeaders UpdateMalwareScanSettings where
  toHeaders :: UpdateMalwareScanSettings -> 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 UpdateMalwareScanSettings where
  toJSON :: UpdateMalwareScanSettings -> Value
toJSON UpdateMalwareScanSettings' {Maybe EbsSnapshotPreservation
Maybe ScanResourceCriteria
Text
detectorId :: Text
scanResourceCriteria :: Maybe ScanResourceCriteria
ebsSnapshotPreservation :: Maybe EbsSnapshotPreservation
$sel:detectorId:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Text
$sel:scanResourceCriteria:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe ScanResourceCriteria
$sel:ebsSnapshotPreservation:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe EbsSnapshotPreservation
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ebsSnapshotPreservation" 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 EbsSnapshotPreservation
ebsSnapshotPreservation,
            (Key
"scanResourceCriteria" 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 ScanResourceCriteria
scanResourceCriteria
          ]
      )

instance Data.ToPath UpdateMalwareScanSettings where
  toPath :: UpdateMalwareScanSettings -> ByteString
toPath UpdateMalwareScanSettings' {Maybe EbsSnapshotPreservation
Maybe ScanResourceCriteria
Text
detectorId :: Text
scanResourceCriteria :: Maybe ScanResourceCriteria
ebsSnapshotPreservation :: Maybe EbsSnapshotPreservation
$sel:detectorId:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Text
$sel:scanResourceCriteria:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe ScanResourceCriteria
$sel:ebsSnapshotPreservation:UpdateMalwareScanSettings' :: UpdateMalwareScanSettings -> Maybe EbsSnapshotPreservation
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/detector/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
detectorId,
        ByteString
"/malware-scan-settings"
      ]

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

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

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

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

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