{-# 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.UpdateModelVersionStatus
-- 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 status of a model version.
--
-- You can perform the following status updates:
--
-- 1.  Change the @TRAINING_IN_PROGRESS@ status to @TRAINING_CANCELLED@.
--
-- 2.  Change the @TRAINING_COMPLETE@ status to @ACTIVE@.
--
-- 3.  Change @ACTIVE@ to @INACTIVE@.
module Amazonka.FraudDetector.UpdateModelVersionStatus
  ( -- * Creating a Request
    UpdateModelVersionStatus (..),
    newUpdateModelVersionStatus,

    -- * Request Lenses
    updateModelVersionStatus_modelId,
    updateModelVersionStatus_modelType,
    updateModelVersionStatus_modelVersionNumber,
    updateModelVersionStatus_status,

    -- * Destructuring the Response
    UpdateModelVersionStatusResponse (..),
    newUpdateModelVersionStatusResponse,

    -- * Response Lenses
    updateModelVersionStatusResponse_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:/ 'newUpdateModelVersionStatus' smart constructor.
data UpdateModelVersionStatus = UpdateModelVersionStatus'
  { -- | The model ID of the model version to update.
    UpdateModelVersionStatus -> Text
modelId :: Prelude.Text,
    -- | The model type.
    UpdateModelVersionStatus -> ModelTypeEnum
modelType :: ModelTypeEnum,
    -- | The model version number.
    UpdateModelVersionStatus -> Text
modelVersionNumber :: Prelude.Text,
    -- | The model version status.
    UpdateModelVersionStatus -> ModelVersionStatus
status :: ModelVersionStatus
  }
  deriving (UpdateModelVersionStatus -> UpdateModelVersionStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateModelVersionStatus -> UpdateModelVersionStatus -> Bool
$c/= :: UpdateModelVersionStatus -> UpdateModelVersionStatus -> Bool
== :: UpdateModelVersionStatus -> UpdateModelVersionStatus -> Bool
$c== :: UpdateModelVersionStatus -> UpdateModelVersionStatus -> Bool
Prelude.Eq, ReadPrec [UpdateModelVersionStatus]
ReadPrec UpdateModelVersionStatus
Int -> ReadS UpdateModelVersionStatus
ReadS [UpdateModelVersionStatus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateModelVersionStatus]
$creadListPrec :: ReadPrec [UpdateModelVersionStatus]
readPrec :: ReadPrec UpdateModelVersionStatus
$creadPrec :: ReadPrec UpdateModelVersionStatus
readList :: ReadS [UpdateModelVersionStatus]
$creadList :: ReadS [UpdateModelVersionStatus]
readsPrec :: Int -> ReadS UpdateModelVersionStatus
$creadsPrec :: Int -> ReadS UpdateModelVersionStatus
Prelude.Read, Int -> UpdateModelVersionStatus -> ShowS
[UpdateModelVersionStatus] -> ShowS
UpdateModelVersionStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateModelVersionStatus] -> ShowS
$cshowList :: [UpdateModelVersionStatus] -> ShowS
show :: UpdateModelVersionStatus -> String
$cshow :: UpdateModelVersionStatus -> String
showsPrec :: Int -> UpdateModelVersionStatus -> ShowS
$cshowsPrec :: Int -> UpdateModelVersionStatus -> ShowS
Prelude.Show, forall x.
Rep UpdateModelVersionStatus x -> UpdateModelVersionStatus
forall x.
UpdateModelVersionStatus -> Rep UpdateModelVersionStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateModelVersionStatus x -> UpdateModelVersionStatus
$cfrom :: forall x.
UpdateModelVersionStatus -> Rep UpdateModelVersionStatus x
Prelude.Generic)

-- |
-- Create a value of 'UpdateModelVersionStatus' 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:
--
-- 'modelId', 'updateModelVersionStatus_modelId' - The model ID of the model version to update.
--
-- 'modelType', 'updateModelVersionStatus_modelType' - The model type.
--
-- 'modelVersionNumber', 'updateModelVersionStatus_modelVersionNumber' - The model version number.
--
-- 'status', 'updateModelVersionStatus_status' - The model version status.
newUpdateModelVersionStatus ::
  -- | 'modelId'
  Prelude.Text ->
  -- | 'modelType'
  ModelTypeEnum ->
  -- | 'modelVersionNumber'
  Prelude.Text ->
  -- | 'status'
  ModelVersionStatus ->
  UpdateModelVersionStatus
newUpdateModelVersionStatus :: Text
-> ModelTypeEnum
-> Text
-> ModelVersionStatus
-> UpdateModelVersionStatus
newUpdateModelVersionStatus
  Text
pModelId_
  ModelTypeEnum
pModelType_
  Text
pModelVersionNumber_
  ModelVersionStatus
pStatus_ =
    UpdateModelVersionStatus'
      { $sel:modelId:UpdateModelVersionStatus' :: Text
modelId = Text
pModelId_,
        $sel:modelType:UpdateModelVersionStatus' :: ModelTypeEnum
modelType = ModelTypeEnum
pModelType_,
        $sel:modelVersionNumber:UpdateModelVersionStatus' :: Text
modelVersionNumber = Text
pModelVersionNumber_,
        $sel:status:UpdateModelVersionStatus' :: ModelVersionStatus
status = ModelVersionStatus
pStatus_
      }

-- | The model ID of the model version to update.
updateModelVersionStatus_modelId :: Lens.Lens' UpdateModelVersionStatus Prelude.Text
updateModelVersionStatus_modelId :: Lens' UpdateModelVersionStatus Text
updateModelVersionStatus_modelId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateModelVersionStatus' {Text
modelId :: Text
$sel:modelId:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> Text
modelId} -> Text
modelId) (\s :: UpdateModelVersionStatus
s@UpdateModelVersionStatus' {} Text
a -> UpdateModelVersionStatus
s {$sel:modelId:UpdateModelVersionStatus' :: Text
modelId = Text
a} :: UpdateModelVersionStatus)

-- | The model type.
updateModelVersionStatus_modelType :: Lens.Lens' UpdateModelVersionStatus ModelTypeEnum
updateModelVersionStatus_modelType :: Lens' UpdateModelVersionStatus ModelTypeEnum
updateModelVersionStatus_modelType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateModelVersionStatus' {ModelTypeEnum
modelType :: ModelTypeEnum
$sel:modelType:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> ModelTypeEnum
modelType} -> ModelTypeEnum
modelType) (\s :: UpdateModelVersionStatus
s@UpdateModelVersionStatus' {} ModelTypeEnum
a -> UpdateModelVersionStatus
s {$sel:modelType:UpdateModelVersionStatus' :: ModelTypeEnum
modelType = ModelTypeEnum
a} :: UpdateModelVersionStatus)

-- | The model version number.
updateModelVersionStatus_modelVersionNumber :: Lens.Lens' UpdateModelVersionStatus Prelude.Text
updateModelVersionStatus_modelVersionNumber :: Lens' UpdateModelVersionStatus Text
updateModelVersionStatus_modelVersionNumber = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateModelVersionStatus' {Text
modelVersionNumber :: Text
$sel:modelVersionNumber:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> Text
modelVersionNumber} -> Text
modelVersionNumber) (\s :: UpdateModelVersionStatus
s@UpdateModelVersionStatus' {} Text
a -> UpdateModelVersionStatus
s {$sel:modelVersionNumber:UpdateModelVersionStatus' :: Text
modelVersionNumber = Text
a} :: UpdateModelVersionStatus)

-- | The model version status.
updateModelVersionStatus_status :: Lens.Lens' UpdateModelVersionStatus ModelVersionStatus
updateModelVersionStatus_status :: Lens' UpdateModelVersionStatus ModelVersionStatus
updateModelVersionStatus_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateModelVersionStatus' {ModelVersionStatus
status :: ModelVersionStatus
$sel:status:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> ModelVersionStatus
status} -> ModelVersionStatus
status) (\s :: UpdateModelVersionStatus
s@UpdateModelVersionStatus' {} ModelVersionStatus
a -> UpdateModelVersionStatus
s {$sel:status:UpdateModelVersionStatus' :: ModelVersionStatus
status = ModelVersionStatus
a} :: UpdateModelVersionStatus)

instance Core.AWSRequest UpdateModelVersionStatus where
  type
    AWSResponse UpdateModelVersionStatus =
      UpdateModelVersionStatusResponse
  request :: (Service -> Service)
-> UpdateModelVersionStatus -> Request UpdateModelVersionStatus
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 UpdateModelVersionStatus
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateModelVersionStatus)))
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 -> UpdateModelVersionStatusResponse
UpdateModelVersionStatusResponse'
            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 UpdateModelVersionStatus where
  hashWithSalt :: Int -> UpdateModelVersionStatus -> Int
hashWithSalt Int
_salt UpdateModelVersionStatus' {Text
ModelTypeEnum
ModelVersionStatus
status :: ModelVersionStatus
modelVersionNumber :: Text
modelType :: ModelTypeEnum
modelId :: Text
$sel:status:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> ModelVersionStatus
$sel:modelVersionNumber:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> Text
$sel:modelType:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> ModelTypeEnum
$sel:modelId:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
modelId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ModelTypeEnum
modelType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
modelVersionNumber
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ModelVersionStatus
status

instance Prelude.NFData UpdateModelVersionStatus where
  rnf :: UpdateModelVersionStatus -> ()
rnf UpdateModelVersionStatus' {Text
ModelTypeEnum
ModelVersionStatus
status :: ModelVersionStatus
modelVersionNumber :: Text
modelType :: ModelTypeEnum
modelId :: Text
$sel:status:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> ModelVersionStatus
$sel:modelVersionNumber:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> Text
$sel:modelType:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> ModelTypeEnum
$sel:modelId:UpdateModelVersionStatus' :: UpdateModelVersionStatus -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
modelId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ModelTypeEnum
modelType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
modelVersionNumber
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ModelVersionStatus
status

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

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

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

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

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

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

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