{-# 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.GetRules
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Get all rules for a detector (paginated) if @ruleId@ and @ruleVersion@
-- are not specified. Gets all rules for the detector and the @ruleId@ if
-- present (paginated). Gets a specific rule if both the @ruleId@ and the
-- @ruleVersion@ are specified.
--
-- This is a paginated API. Providing null maxResults results in retrieving
-- maximum of 100 records per page. If you provide maxResults the value
-- must be between 50 and 100. To get the next page result, a provide a
-- pagination token from GetRulesResult as part of your request. Null
-- pagination token fetches the records from the beginning.
module Amazonka.FraudDetector.GetRules
  ( -- * Creating a Request
    GetRules (..),
    newGetRules,

    -- * Request Lenses
    getRules_maxResults,
    getRules_nextToken,
    getRules_ruleId,
    getRules_ruleVersion,
    getRules_detectorId,

    -- * Destructuring the Response
    GetRulesResponse (..),
    newGetRulesResponse,

    -- * Response Lenses
    getRulesResponse_nextToken,
    getRulesResponse_ruleDetails,
    getRulesResponse_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:/ 'newGetRules' smart constructor.
data GetRules = GetRules'
  { -- | The maximum number of rules to return for the request.
    GetRules -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    -- | The next page token.
    GetRules -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The rule ID.
    GetRules -> Maybe Text
ruleId :: Prelude.Maybe Prelude.Text,
    -- | The rule version.
    GetRules -> Maybe Text
ruleVersion :: Prelude.Maybe Prelude.Text,
    -- | The detector ID.
    GetRules -> Text
detectorId :: Prelude.Text
  }
  deriving (GetRules -> GetRules -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetRules -> GetRules -> Bool
$c/= :: GetRules -> GetRules -> Bool
== :: GetRules -> GetRules -> Bool
$c== :: GetRules -> GetRules -> Bool
Prelude.Eq, ReadPrec [GetRules]
ReadPrec GetRules
Int -> ReadS GetRules
ReadS [GetRules]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetRules]
$creadListPrec :: ReadPrec [GetRules]
readPrec :: ReadPrec GetRules
$creadPrec :: ReadPrec GetRules
readList :: ReadS [GetRules]
$creadList :: ReadS [GetRules]
readsPrec :: Int -> ReadS GetRules
$creadsPrec :: Int -> ReadS GetRules
Prelude.Read, Int -> GetRules -> ShowS
[GetRules] -> ShowS
GetRules -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetRules] -> ShowS
$cshowList :: [GetRules] -> ShowS
show :: GetRules -> String
$cshow :: GetRules -> String
showsPrec :: Int -> GetRules -> ShowS
$cshowsPrec :: Int -> GetRules -> ShowS
Prelude.Show, forall x. Rep GetRules x -> GetRules
forall x. GetRules -> Rep GetRules x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetRules x -> GetRules
$cfrom :: forall x. GetRules -> Rep GetRules x
Prelude.Generic)

-- |
-- Create a value of 'GetRules' 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', 'getRules_maxResults' - The maximum number of rules to return for the request.
--
-- 'nextToken', 'getRules_nextToken' - The next page token.
--
-- 'ruleId', 'getRules_ruleId' - The rule ID.
--
-- 'ruleVersion', 'getRules_ruleVersion' - The rule version.
--
-- 'detectorId', 'getRules_detectorId' - The detector ID.
newGetRules ::
  -- | 'detectorId'
  Prelude.Text ->
  GetRules
newGetRules :: Text -> GetRules
newGetRules Text
pDetectorId_ =
  GetRules'
    { $sel:maxResults:GetRules' :: Maybe Natural
maxResults = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:GetRules' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:ruleId:GetRules' :: Maybe Text
ruleId = forall a. Maybe a
Prelude.Nothing,
      $sel:ruleVersion:GetRules' :: Maybe Text
ruleVersion = forall a. Maybe a
Prelude.Nothing,
      $sel:detectorId:GetRules' :: Text
detectorId = Text
pDetectorId_
    }

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

-- | The next page token.
getRules_nextToken :: Lens.Lens' GetRules (Prelude.Maybe Prelude.Text)
getRules_nextToken :: Lens' GetRules (Maybe Text)
getRules_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRules' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetRules' :: GetRules -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetRules
s@GetRules' {} Maybe Text
a -> GetRules
s {$sel:nextToken:GetRules' :: Maybe Text
nextToken = Maybe Text
a} :: GetRules)

-- | The rule ID.
getRules_ruleId :: Lens.Lens' GetRules (Prelude.Maybe Prelude.Text)
getRules_ruleId :: Lens' GetRules (Maybe Text)
getRules_ruleId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRules' {Maybe Text
ruleId :: Maybe Text
$sel:ruleId:GetRules' :: GetRules -> Maybe Text
ruleId} -> Maybe Text
ruleId) (\s :: GetRules
s@GetRules' {} Maybe Text
a -> GetRules
s {$sel:ruleId:GetRules' :: Maybe Text
ruleId = Maybe Text
a} :: GetRules)

-- | The rule version.
getRules_ruleVersion :: Lens.Lens' GetRules (Prelude.Maybe Prelude.Text)
getRules_ruleVersion :: Lens' GetRules (Maybe Text)
getRules_ruleVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRules' {Maybe Text
ruleVersion :: Maybe Text
$sel:ruleVersion:GetRules' :: GetRules -> Maybe Text
ruleVersion} -> Maybe Text
ruleVersion) (\s :: GetRules
s@GetRules' {} Maybe Text
a -> GetRules
s {$sel:ruleVersion:GetRules' :: Maybe Text
ruleVersion = Maybe Text
a} :: GetRules)

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

instance Core.AWSRequest GetRules where
  type AWSResponse GetRules = GetRulesResponse
  request :: (Service -> Service) -> GetRules -> Request GetRules
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 GetRules
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetRules)))
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 Text -> Maybe [RuleDetail] -> Int -> GetRulesResponse
GetRulesResponse'
            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
"nextToken")
            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
"ruleDetails" 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.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable GetRules where
  hashWithSalt :: Int -> GetRules -> Int
hashWithSalt Int
_salt GetRules' {Maybe Natural
Maybe Text
Text
detectorId :: Text
ruleVersion :: Maybe Text
ruleId :: Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:detectorId:GetRules' :: GetRules -> Text
$sel:ruleVersion:GetRules' :: GetRules -> Maybe Text
$sel:ruleId:GetRules' :: GetRules -> Maybe Text
$sel:nextToken:GetRules' :: GetRules -> Maybe Text
$sel:maxResults:GetRules' :: GetRules -> 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
nextToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ruleId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ruleVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
detectorId

instance Prelude.NFData GetRules where
  rnf :: GetRules -> ()
rnf GetRules' {Maybe Natural
Maybe Text
Text
detectorId :: Text
ruleVersion :: Maybe Text
ruleId :: Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:detectorId:GetRules' :: GetRules -> Text
$sel:ruleVersion:GetRules' :: GetRules -> Maybe Text
$sel:ruleId:GetRules' :: GetRules -> Maybe Text
$sel:nextToken:GetRules' :: GetRules -> Maybe Text
$sel:maxResults:GetRules' :: GetRules -> 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
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ruleId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ruleVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
detectorId

instance Data.ToHeaders GetRules where
  toHeaders :: GetRules -> 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.GetRules" ::
                          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 GetRules where
  toJSON :: GetRules -> Value
toJSON GetRules' {Maybe Natural
Maybe Text
Text
detectorId :: Text
ruleVersion :: Maybe Text
ruleId :: Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:detectorId:GetRules' :: GetRules -> Text
$sel:ruleVersion:GetRules' :: GetRules -> Maybe Text
$sel:ruleId:GetRules' :: GetRules -> Maybe Text
$sel:nextToken:GetRules' :: GetRules -> Maybe Text
$sel:maxResults:GetRules' :: GetRules -> 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
"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,
            (Key
"ruleId" 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
ruleId,
            (Key
"ruleVersion" 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
ruleVersion,
            forall a. a -> Maybe a
Prelude.Just (Key
"detectorId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
detectorId)
          ]
      )

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

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

-- | /See:/ 'newGetRulesResponse' smart constructor.
data GetRulesResponse = GetRulesResponse'
  { -- | The next page token to be used in subsequent requests.
    GetRulesResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The details of the requested rule.
    GetRulesResponse -> Maybe [RuleDetail]
ruleDetails :: Prelude.Maybe [RuleDetail],
    -- | The response's http status code.
    GetRulesResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetRulesResponse -> GetRulesResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetRulesResponse -> GetRulesResponse -> Bool
$c/= :: GetRulesResponse -> GetRulesResponse -> Bool
== :: GetRulesResponse -> GetRulesResponse -> Bool
$c== :: GetRulesResponse -> GetRulesResponse -> Bool
Prelude.Eq, Int -> GetRulesResponse -> ShowS
[GetRulesResponse] -> ShowS
GetRulesResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetRulesResponse] -> ShowS
$cshowList :: [GetRulesResponse] -> ShowS
show :: GetRulesResponse -> String
$cshow :: GetRulesResponse -> String
showsPrec :: Int -> GetRulesResponse -> ShowS
$cshowsPrec :: Int -> GetRulesResponse -> ShowS
Prelude.Show, forall x. Rep GetRulesResponse x -> GetRulesResponse
forall x. GetRulesResponse -> Rep GetRulesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetRulesResponse x -> GetRulesResponse
$cfrom :: forall x. GetRulesResponse -> Rep GetRulesResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetRulesResponse' 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:
--
-- 'nextToken', 'getRulesResponse_nextToken' - The next page token to be used in subsequent requests.
--
-- 'ruleDetails', 'getRulesResponse_ruleDetails' - The details of the requested rule.
--
-- 'httpStatus', 'getRulesResponse_httpStatus' - The response's http status code.
newGetRulesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetRulesResponse
newGetRulesResponse :: Int -> GetRulesResponse
newGetRulesResponse Int
pHttpStatus_ =
  GetRulesResponse'
    { $sel:nextToken:GetRulesResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:ruleDetails:GetRulesResponse' :: Maybe [RuleDetail]
ruleDetails = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetRulesResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

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

-- | The details of the requested rule.
getRulesResponse_ruleDetails :: Lens.Lens' GetRulesResponse (Prelude.Maybe [RuleDetail])
getRulesResponse_ruleDetails :: Lens' GetRulesResponse (Maybe [RuleDetail])
getRulesResponse_ruleDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRulesResponse' {Maybe [RuleDetail]
ruleDetails :: Maybe [RuleDetail]
$sel:ruleDetails:GetRulesResponse' :: GetRulesResponse -> Maybe [RuleDetail]
ruleDetails} -> Maybe [RuleDetail]
ruleDetails) (\s :: GetRulesResponse
s@GetRulesResponse' {} Maybe [RuleDetail]
a -> GetRulesResponse
s {$sel:ruleDetails:GetRulesResponse' :: Maybe [RuleDetail]
ruleDetails = Maybe [RuleDetail]
a} :: GetRulesResponse) 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 response's http status code.
getRulesResponse_httpStatus :: Lens.Lens' GetRulesResponse Prelude.Int
getRulesResponse_httpStatus :: Lens' GetRulesResponse Int
getRulesResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRulesResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetRulesResponse' :: GetRulesResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetRulesResponse
s@GetRulesResponse' {} Int
a -> GetRulesResponse
s {$sel:httpStatus:GetRulesResponse' :: Int
httpStatus = Int
a} :: GetRulesResponse)

instance Prelude.NFData GetRulesResponse where
  rnf :: GetRulesResponse -> ()
rnf GetRulesResponse' {Int
Maybe [RuleDetail]
Maybe Text
httpStatus :: Int
ruleDetails :: Maybe [RuleDetail]
nextToken :: Maybe Text
$sel:httpStatus:GetRulesResponse' :: GetRulesResponse -> Int
$sel:ruleDetails:GetRulesResponse' :: GetRulesResponse -> Maybe [RuleDetail]
$sel:nextToken:GetRulesResponse' :: GetRulesResponse -> Maybe Text
..} =
    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 Maybe [RuleDetail]
ruleDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus