{-# 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.GetModels
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets one or more models. Gets all models for the Amazon Web Services
-- account if no model type and no model id provided. Gets all models for
-- the Amazon Web Services account and model type, if the model type is
-- specified but model id is not provided. Gets a specific model if (model
-- type, model id) tuple is specified.
--
-- This is a paginated API. If you provide a null @maxResults@, this action
-- retrieves a maximum of 10 records per page. If you provide a
-- @maxResults@, the value must be between 1 and 10. To get the next page
-- results, provide the pagination token from the response as part of your
-- request. A null pagination token fetches the records from the beginning.
module Amazonka.FraudDetector.GetModels
  ( -- * Creating a Request
    GetModels (..),
    newGetModels,

    -- * Request Lenses
    getModels_maxResults,
    getModels_modelId,
    getModels_modelType,
    getModels_nextToken,

    -- * Destructuring the Response
    GetModelsResponse (..),
    newGetModelsResponse,

    -- * Response Lenses
    getModelsResponse_models,
    getModelsResponse_nextToken,
    getModelsResponse_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:/ 'newGetModels' smart constructor.
data GetModels = GetModels'
  { -- | The maximum number of objects to return for the request.
    GetModels -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    -- | The model ID.
    GetModels -> Maybe Text
modelId :: Prelude.Maybe Prelude.Text,
    -- | The model type.
    GetModels -> Maybe ModelTypeEnum
modelType :: Prelude.Maybe ModelTypeEnum,
    -- | The next token for the subsequent request.
    GetModels -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text
  }
  deriving (GetModels -> GetModels -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetModels -> GetModels -> Bool
$c/= :: GetModels -> GetModels -> Bool
== :: GetModels -> GetModels -> Bool
$c== :: GetModels -> GetModels -> Bool
Prelude.Eq, ReadPrec [GetModels]
ReadPrec GetModels
Int -> ReadS GetModels
ReadS [GetModels]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetModels]
$creadListPrec :: ReadPrec [GetModels]
readPrec :: ReadPrec GetModels
$creadPrec :: ReadPrec GetModels
readList :: ReadS [GetModels]
$creadList :: ReadS [GetModels]
readsPrec :: Int -> ReadS GetModels
$creadsPrec :: Int -> ReadS GetModels
Prelude.Read, Int -> GetModels -> ShowS
[GetModels] -> ShowS
GetModels -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetModels] -> ShowS
$cshowList :: [GetModels] -> ShowS
show :: GetModels -> String
$cshow :: GetModels -> String
showsPrec :: Int -> GetModels -> ShowS
$cshowsPrec :: Int -> GetModels -> ShowS
Prelude.Show, forall x. Rep GetModels x -> GetModels
forall x. GetModels -> Rep GetModels x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetModels x -> GetModels
$cfrom :: forall x. GetModels -> Rep GetModels x
Prelude.Generic)

-- |
-- Create a value of 'GetModels' 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:
--
-- 'maxResults', 'getModels_maxResults' - The maximum number of objects to return for the request.
--
-- 'modelId', 'getModels_modelId' - The model ID.
--
-- 'modelType', 'getModels_modelType' - The model type.
--
-- 'nextToken', 'getModels_nextToken' - The next token for the subsequent request.
newGetModels ::
  GetModels
newGetModels :: GetModels
newGetModels =
  GetModels'
    { $sel:maxResults:GetModels' :: Maybe Natural
maxResults = forall a. Maybe a
Prelude.Nothing,
      $sel:modelId:GetModels' :: Maybe Text
modelId = forall a. Maybe a
Prelude.Nothing,
      $sel:modelType:GetModels' :: Maybe ModelTypeEnum
modelType = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:GetModels' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing
    }

-- | The maximum number of objects to return for the request.
getModels_maxResults :: Lens.Lens' GetModels (Prelude.Maybe Prelude.Natural)
getModels_maxResults :: Lens' GetModels (Maybe Natural)
getModels_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetModels' {Maybe Natural
maxResults :: Maybe Natural
$sel:maxResults:GetModels' :: GetModels -> Maybe Natural
maxResults} -> Maybe Natural
maxResults) (\s :: GetModels
s@GetModels' {} Maybe Natural
a -> GetModels
s {$sel:maxResults:GetModels' :: Maybe Natural
maxResults = Maybe Natural
a} :: GetModels)

-- | The model ID.
getModels_modelId :: Lens.Lens' GetModels (Prelude.Maybe Prelude.Text)
getModels_modelId :: Lens' GetModels (Maybe Text)
getModels_modelId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetModels' {Maybe Text
modelId :: Maybe Text
$sel:modelId:GetModels' :: GetModels -> Maybe Text
modelId} -> Maybe Text
modelId) (\s :: GetModels
s@GetModels' {} Maybe Text
a -> GetModels
s {$sel:modelId:GetModels' :: Maybe Text
modelId = Maybe Text
a} :: GetModels)

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

-- | The next token for the subsequent request.
getModels_nextToken :: Lens.Lens' GetModels (Prelude.Maybe Prelude.Text)
getModels_nextToken :: Lens' GetModels (Maybe Text)
getModels_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetModels' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetModels' :: GetModels -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetModels
s@GetModels' {} Maybe Text
a -> GetModels
s {$sel:nextToken:GetModels' :: Maybe Text
nextToken = Maybe Text
a} :: GetModels)

instance Core.AWSRequest GetModels where
  type AWSResponse GetModels = GetModelsResponse
  request :: (Service -> Service) -> GetModels -> Request GetModels
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 GetModels
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetModels)))
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 [Model] -> Maybe Text -> Int -> GetModelsResponse
GetModelsResponse'
            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
"models" forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"nextToken")
            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 GetModels where
  hashWithSalt :: Int -> GetModels -> Int
hashWithSalt Int
_salt GetModels' {Maybe Natural
Maybe Text
Maybe ModelTypeEnum
nextToken :: Maybe Text
modelType :: Maybe ModelTypeEnum
modelId :: Maybe Text
maxResults :: Maybe Natural
$sel:nextToken:GetModels' :: GetModels -> Maybe Text
$sel:modelType:GetModels' :: GetModels -> Maybe ModelTypeEnum
$sel:modelId:GetModels' :: GetModels -> Maybe Text
$sel:maxResults:GetModels' :: GetModels -> Maybe Natural
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maxResults
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
modelId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ModelTypeEnum
modelType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken

instance Prelude.NFData GetModels where
  rnf :: GetModels -> ()
rnf GetModels' {Maybe Natural
Maybe Text
Maybe ModelTypeEnum
nextToken :: Maybe Text
modelType :: Maybe ModelTypeEnum
modelId :: Maybe Text
maxResults :: Maybe Natural
$sel:nextToken:GetModels' :: GetModels -> Maybe Text
$sel:modelType:GetModels' :: GetModels -> Maybe ModelTypeEnum
$sel:modelId:GetModels' :: GetModels -> Maybe Text
$sel:maxResults:GetModels' :: GetModels -> Maybe Natural
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
modelId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ModelTypeEnum
modelType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken

instance Data.ToHeaders GetModels where
  toHeaders :: GetModels -> 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.GetModels" ::
                          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 GetModels where
  toJSON :: GetModels -> Value
toJSON GetModels' {Maybe Natural
Maybe Text
Maybe ModelTypeEnum
nextToken :: Maybe Text
modelType :: Maybe ModelTypeEnum
modelId :: Maybe Text
maxResults :: Maybe Natural
$sel:nextToken:GetModels' :: GetModels -> Maybe Text
$sel:modelType:GetModels' :: GetModels -> Maybe ModelTypeEnum
$sel:modelId:GetModels' :: GetModels -> Maybe Text
$sel:maxResults:GetModels' :: GetModels -> Maybe Natural
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"maxResults" 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 Natural
maxResults,
            (Key
"modelId" 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
modelId,
            (Key
"modelType" 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 ModelTypeEnum
modelType,
            (Key
"nextToken" 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
nextToken
          ]
      )

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

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

-- | /See:/ 'newGetModelsResponse' smart constructor.
data GetModelsResponse = GetModelsResponse'
  { -- | The array of models.
    GetModelsResponse -> Maybe [Model]
models :: Prelude.Maybe [Model],
    -- | The next page token to be used in subsequent requests.
    GetModelsResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetModelsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetModelsResponse -> GetModelsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetModelsResponse -> GetModelsResponse -> Bool
$c/= :: GetModelsResponse -> GetModelsResponse -> Bool
== :: GetModelsResponse -> GetModelsResponse -> Bool
$c== :: GetModelsResponse -> GetModelsResponse -> Bool
Prelude.Eq, ReadPrec [GetModelsResponse]
ReadPrec GetModelsResponse
Int -> ReadS GetModelsResponse
ReadS [GetModelsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetModelsResponse]
$creadListPrec :: ReadPrec [GetModelsResponse]
readPrec :: ReadPrec GetModelsResponse
$creadPrec :: ReadPrec GetModelsResponse
readList :: ReadS [GetModelsResponse]
$creadList :: ReadS [GetModelsResponse]
readsPrec :: Int -> ReadS GetModelsResponse
$creadsPrec :: Int -> ReadS GetModelsResponse
Prelude.Read, Int -> GetModelsResponse -> ShowS
[GetModelsResponse] -> ShowS
GetModelsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetModelsResponse] -> ShowS
$cshowList :: [GetModelsResponse] -> ShowS
show :: GetModelsResponse -> String
$cshow :: GetModelsResponse -> String
showsPrec :: Int -> GetModelsResponse -> ShowS
$cshowsPrec :: Int -> GetModelsResponse -> ShowS
Prelude.Show, forall x. Rep GetModelsResponse x -> GetModelsResponse
forall x. GetModelsResponse -> Rep GetModelsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetModelsResponse x -> GetModelsResponse
$cfrom :: forall x. GetModelsResponse -> Rep GetModelsResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetModelsResponse' 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:
--
-- 'models', 'getModelsResponse_models' - The array of models.
--
-- 'nextToken', 'getModelsResponse_nextToken' - The next page token to be used in subsequent requests.
--
-- 'httpStatus', 'getModelsResponse_httpStatus' - The response's http status code.
newGetModelsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetModelsResponse
newGetModelsResponse :: Int -> GetModelsResponse
newGetModelsResponse Int
pHttpStatus_ =
  GetModelsResponse'
    { $sel:models:GetModelsResponse' :: Maybe [Model]
models = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:GetModelsResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetModelsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The array of models.
getModelsResponse_models :: Lens.Lens' GetModelsResponse (Prelude.Maybe [Model])
getModelsResponse_models :: Lens' GetModelsResponse (Maybe [Model])
getModelsResponse_models = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetModelsResponse' {Maybe [Model]
models :: Maybe [Model]
$sel:models:GetModelsResponse' :: GetModelsResponse -> Maybe [Model]
models} -> Maybe [Model]
models) (\s :: GetModelsResponse
s@GetModelsResponse' {} Maybe [Model]
a -> GetModelsResponse
s {$sel:models:GetModelsResponse' :: Maybe [Model]
models = Maybe [Model]
a} :: GetModelsResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The next page token to be used in subsequent requests.
getModelsResponse_nextToken :: Lens.Lens' GetModelsResponse (Prelude.Maybe Prelude.Text)
getModelsResponse_nextToken :: Lens' GetModelsResponse (Maybe Text)
getModelsResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetModelsResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetModelsResponse' :: GetModelsResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetModelsResponse
s@GetModelsResponse' {} Maybe Text
a -> GetModelsResponse
s {$sel:nextToken:GetModelsResponse' :: Maybe Text
nextToken = Maybe Text
a} :: GetModelsResponse)

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

instance Prelude.NFData GetModelsResponse where
  rnf :: GetModelsResponse -> ()
rnf GetModelsResponse' {Int
Maybe [Model]
Maybe Text
httpStatus :: Int
nextToken :: Maybe Text
models :: Maybe [Model]
$sel:httpStatus:GetModelsResponse' :: GetModelsResponse -> Int
$sel:nextToken:GetModelsResponse' :: GetModelsResponse -> Maybe Text
$sel:models:GetModelsResponse' :: GetModelsResponse -> Maybe [Model]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Model]
models
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus