{-# 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.FraudDetector.UpdateDetectorVersionStatus
-- 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 detector version’s status. You can perform the following
-- promotions or demotions using @UpdateDetectorVersionStatus@: @DRAFT@ to
-- @ACTIVE@, @ACTIVE@ to @INACTIVE@, and @INACTIVE@ to @ACTIVE@.
module Amazonka.FraudDetector.UpdateDetectorVersionStatus
  ( -- * Creating a Request
    UpdateDetectorVersionStatus (..),
    newUpdateDetectorVersionStatus,

    -- * Request Lenses
    updateDetectorVersionStatus_detectorId,
    updateDetectorVersionStatus_detectorVersionId,
    updateDetectorVersionStatus_status,

    -- * Destructuring the Response
    UpdateDetectorVersionStatusResponse (..),
    newUpdateDetectorVersionStatusResponse,

    -- * Response Lenses
    updateDetectorVersionStatusResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUpdateDetectorVersionStatus' smart constructor.
data UpdateDetectorVersionStatus = UpdateDetectorVersionStatus'
  { -- | The detector ID.
    UpdateDetectorVersionStatus -> Text
detectorId :: Prelude.Text,
    -- | The detector version ID.
    UpdateDetectorVersionStatus -> Text
detectorVersionId :: Prelude.Text,
    -- | The new status.
    --
    -- The only supported values are @ACTIVE@ and @INACTIVE@
    UpdateDetectorVersionStatus -> DetectorVersionStatus
status :: DetectorVersionStatus
  }
  deriving (UpdateDetectorVersionStatus -> UpdateDetectorVersionStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDetectorVersionStatus -> UpdateDetectorVersionStatus -> Bool
$c/= :: UpdateDetectorVersionStatus -> UpdateDetectorVersionStatus -> Bool
== :: UpdateDetectorVersionStatus -> UpdateDetectorVersionStatus -> Bool
$c== :: UpdateDetectorVersionStatus -> UpdateDetectorVersionStatus -> Bool
Prelude.Eq, ReadPrec [UpdateDetectorVersionStatus]
ReadPrec UpdateDetectorVersionStatus
Int -> ReadS UpdateDetectorVersionStatus
ReadS [UpdateDetectorVersionStatus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateDetectorVersionStatus]
$creadListPrec :: ReadPrec [UpdateDetectorVersionStatus]
readPrec :: ReadPrec UpdateDetectorVersionStatus
$creadPrec :: ReadPrec UpdateDetectorVersionStatus
readList :: ReadS [UpdateDetectorVersionStatus]
$creadList :: ReadS [UpdateDetectorVersionStatus]
readsPrec :: Int -> ReadS UpdateDetectorVersionStatus
$creadsPrec :: Int -> ReadS UpdateDetectorVersionStatus
Prelude.Read, Int -> UpdateDetectorVersionStatus -> ShowS
[UpdateDetectorVersionStatus] -> ShowS
UpdateDetectorVersionStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDetectorVersionStatus] -> ShowS
$cshowList :: [UpdateDetectorVersionStatus] -> ShowS
show :: UpdateDetectorVersionStatus -> String
$cshow :: UpdateDetectorVersionStatus -> String
showsPrec :: Int -> UpdateDetectorVersionStatus -> ShowS
$cshowsPrec :: Int -> UpdateDetectorVersionStatus -> ShowS
Prelude.Show, forall x.
Rep UpdateDetectorVersionStatus x -> UpdateDetectorVersionStatus
forall x.
UpdateDetectorVersionStatus -> Rep UpdateDetectorVersionStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateDetectorVersionStatus x -> UpdateDetectorVersionStatus
$cfrom :: forall x.
UpdateDetectorVersionStatus -> Rep UpdateDetectorVersionStatus x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDetectorVersionStatus' 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:
--
-- 'detectorId', 'updateDetectorVersionStatus_detectorId' - The detector ID.
--
-- 'detectorVersionId', 'updateDetectorVersionStatus_detectorVersionId' - The detector version ID.
--
-- 'status', 'updateDetectorVersionStatus_status' - The new status.
--
-- The only supported values are @ACTIVE@ and @INACTIVE@
newUpdateDetectorVersionStatus ::
  -- | 'detectorId'
  Prelude.Text ->
  -- | 'detectorVersionId'
  Prelude.Text ->
  -- | 'status'
  DetectorVersionStatus ->
  UpdateDetectorVersionStatus
newUpdateDetectorVersionStatus :: Text
-> Text -> DetectorVersionStatus -> UpdateDetectorVersionStatus
newUpdateDetectorVersionStatus
  Text
pDetectorId_
  Text
pDetectorVersionId_
  DetectorVersionStatus
pStatus_ =
    UpdateDetectorVersionStatus'
      { $sel:detectorId:UpdateDetectorVersionStatus' :: Text
detectorId =
          Text
pDetectorId_,
        $sel:detectorVersionId:UpdateDetectorVersionStatus' :: Text
detectorVersionId = Text
pDetectorVersionId_,
        $sel:status:UpdateDetectorVersionStatus' :: DetectorVersionStatus
status = DetectorVersionStatus
pStatus_
      }

-- | The detector ID.
updateDetectorVersionStatus_detectorId :: Lens.Lens' UpdateDetectorVersionStatus Prelude.Text
updateDetectorVersionStatus_detectorId :: Lens' UpdateDetectorVersionStatus Text
updateDetectorVersionStatus_detectorId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDetectorVersionStatus' {Text
detectorId :: Text
$sel:detectorId:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> Text
detectorId} -> Text
detectorId) (\s :: UpdateDetectorVersionStatus
s@UpdateDetectorVersionStatus' {} Text
a -> UpdateDetectorVersionStatus
s {$sel:detectorId:UpdateDetectorVersionStatus' :: Text
detectorId = Text
a} :: UpdateDetectorVersionStatus)

-- | The detector version ID.
updateDetectorVersionStatus_detectorVersionId :: Lens.Lens' UpdateDetectorVersionStatus Prelude.Text
updateDetectorVersionStatus_detectorVersionId :: Lens' UpdateDetectorVersionStatus Text
updateDetectorVersionStatus_detectorVersionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDetectorVersionStatus' {Text
detectorVersionId :: Text
$sel:detectorVersionId:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> Text
detectorVersionId} -> Text
detectorVersionId) (\s :: UpdateDetectorVersionStatus
s@UpdateDetectorVersionStatus' {} Text
a -> UpdateDetectorVersionStatus
s {$sel:detectorVersionId:UpdateDetectorVersionStatus' :: Text
detectorVersionId = Text
a} :: UpdateDetectorVersionStatus)

-- | The new status.
--
-- The only supported values are @ACTIVE@ and @INACTIVE@
updateDetectorVersionStatus_status :: Lens.Lens' UpdateDetectorVersionStatus DetectorVersionStatus
updateDetectorVersionStatus_status :: Lens' UpdateDetectorVersionStatus DetectorVersionStatus
updateDetectorVersionStatus_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDetectorVersionStatus' {DetectorVersionStatus
status :: DetectorVersionStatus
$sel:status:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> DetectorVersionStatus
status} -> DetectorVersionStatus
status) (\s :: UpdateDetectorVersionStatus
s@UpdateDetectorVersionStatus' {} DetectorVersionStatus
a -> UpdateDetectorVersionStatus
s {$sel:status:UpdateDetectorVersionStatus' :: DetectorVersionStatus
status = DetectorVersionStatus
a} :: UpdateDetectorVersionStatus)

instance Core.AWSRequest UpdateDetectorVersionStatus where
  type
    AWSResponse UpdateDetectorVersionStatus =
      UpdateDetectorVersionStatusResponse
  request :: (Service -> Service)
-> UpdateDetectorVersionStatus
-> Request UpdateDetectorVersionStatus
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 UpdateDetectorVersionStatus
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateDetectorVersionStatus)))
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 -> UpdateDetectorVersionStatusResponse
UpdateDetectorVersionStatusResponse'
            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 UpdateDetectorVersionStatus where
  hashWithSalt :: Int -> UpdateDetectorVersionStatus -> Int
hashWithSalt Int
_salt UpdateDetectorVersionStatus' {Text
DetectorVersionStatus
status :: DetectorVersionStatus
detectorVersionId :: Text
detectorId :: Text
$sel:status:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> DetectorVersionStatus
$sel:detectorVersionId:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> Text
$sel:detectorId:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
detectorId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
detectorVersionId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DetectorVersionStatus
status

instance Prelude.NFData UpdateDetectorVersionStatus where
  rnf :: UpdateDetectorVersionStatus -> ()
rnf UpdateDetectorVersionStatus' {Text
DetectorVersionStatus
status :: DetectorVersionStatus
detectorVersionId :: Text
detectorId :: Text
$sel:status:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> DetectorVersionStatus
$sel:detectorVersionId:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> Text
$sel:detectorId:UpdateDetectorVersionStatus' :: UpdateDetectorVersionStatus -> Text
..} =
    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
detectorVersionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DetectorVersionStatus
status

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

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

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

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

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

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

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