{-# 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.BillingConductor.CreatePricingRule
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a pricing rule can be associated to a pricing plan, or a set of
-- pricing plans.
module Amazonka.BillingConductor.CreatePricingRule
  ( -- * Creating a Request
    CreatePricingRule (..),
    newCreatePricingRule,

    -- * Request Lenses
    createPricingRule_billingEntity,
    createPricingRule_clientToken,
    createPricingRule_description,
    createPricingRule_modifierPercentage,
    createPricingRule_service,
    createPricingRule_tags,
    createPricingRule_tiering,
    createPricingRule_name,
    createPricingRule_scope,
    createPricingRule_type,

    -- * Destructuring the Response
    CreatePricingRuleResponse (..),
    newCreatePricingRuleResponse,

    -- * Response Lenses
    createPricingRuleResponse_arn,
    createPricingRuleResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreatePricingRule' smart constructor.
data CreatePricingRule = CreatePricingRule'
  { -- | The seller of services provided by Amazon Web Services, their
    -- affiliates, or third-party providers selling services via Amazon Web
    -- Services Marketplace.
    CreatePricingRule -> Maybe Text
billingEntity :: Prelude.Maybe Prelude.Text,
    -- | The token that\'s needed to support idempotency. Idempotency isn\'t
    -- currently supported, but will be implemented in a future update.
    CreatePricingRule -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The pricing rule description.
    CreatePricingRule -> Maybe (Sensitive Text)
description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | A percentage modifier that\'s applied on the public pricing rates.
    CreatePricingRule -> Maybe Double
modifierPercentage :: Prelude.Maybe Prelude.Double,
    -- | If the @Scope@ attribute is set to @SERVICE@, the attribute indicates
    -- which service the @PricingRule@ is applicable for.
    CreatePricingRule -> Maybe Text
service :: Prelude.Maybe Prelude.Text,
    -- | A map that contains tag keys and tag values that are attached to a
    -- pricing rule.
    CreatePricingRule -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The set of tiering configurations for the pricing rule.
    CreatePricingRule -> Maybe CreateTieringInput
tiering :: Prelude.Maybe CreateTieringInput,
    -- | The pricing rule name. The names must be unique to each pricing rule.
    CreatePricingRule -> Sensitive Text
name :: Data.Sensitive Prelude.Text,
    -- | The scope of pricing rule that indicates if it\'s globally applicable,
    -- or it\'s service-specific.
    CreatePricingRule -> PricingRuleScope
scope :: PricingRuleScope,
    -- | The type of pricing rule.
    CreatePricingRule -> PricingRuleType
type' :: PricingRuleType
  }
  deriving (CreatePricingRule -> CreatePricingRule -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreatePricingRule -> CreatePricingRule -> Bool
$c/= :: CreatePricingRule -> CreatePricingRule -> Bool
== :: CreatePricingRule -> CreatePricingRule -> Bool
$c== :: CreatePricingRule -> CreatePricingRule -> Bool
Prelude.Eq, Int -> CreatePricingRule -> ShowS
[CreatePricingRule] -> ShowS
CreatePricingRule -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreatePricingRule] -> ShowS
$cshowList :: [CreatePricingRule] -> ShowS
show :: CreatePricingRule -> String
$cshow :: CreatePricingRule -> String
showsPrec :: Int -> CreatePricingRule -> ShowS
$cshowsPrec :: Int -> CreatePricingRule -> ShowS
Prelude.Show, forall x. Rep CreatePricingRule x -> CreatePricingRule
forall x. CreatePricingRule -> Rep CreatePricingRule x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreatePricingRule x -> CreatePricingRule
$cfrom :: forall x. CreatePricingRule -> Rep CreatePricingRule x
Prelude.Generic)

-- |
-- Create a value of 'CreatePricingRule' 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:
--
-- 'billingEntity', 'createPricingRule_billingEntity' - The seller of services provided by Amazon Web Services, their
-- affiliates, or third-party providers selling services via Amazon Web
-- Services Marketplace.
--
-- 'clientToken', 'createPricingRule_clientToken' - The token that\'s needed to support idempotency. Idempotency isn\'t
-- currently supported, but will be implemented in a future update.
--
-- 'description', 'createPricingRule_description' - The pricing rule description.
--
-- 'modifierPercentage', 'createPricingRule_modifierPercentage' - A percentage modifier that\'s applied on the public pricing rates.
--
-- 'service', 'createPricingRule_service' - If the @Scope@ attribute is set to @SERVICE@, the attribute indicates
-- which service the @PricingRule@ is applicable for.
--
-- 'tags', 'createPricingRule_tags' - A map that contains tag keys and tag values that are attached to a
-- pricing rule.
--
-- 'tiering', 'createPricingRule_tiering' - The set of tiering configurations for the pricing rule.
--
-- 'name', 'createPricingRule_name' - The pricing rule name. The names must be unique to each pricing rule.
--
-- 'scope', 'createPricingRule_scope' - The scope of pricing rule that indicates if it\'s globally applicable,
-- or it\'s service-specific.
--
-- 'type'', 'createPricingRule_type' - The type of pricing rule.
newCreatePricingRule ::
  -- | 'name'
  Prelude.Text ->
  -- | 'scope'
  PricingRuleScope ->
  -- | 'type''
  PricingRuleType ->
  CreatePricingRule
newCreatePricingRule :: Text -> PricingRuleScope -> PricingRuleType -> CreatePricingRule
newCreatePricingRule Text
pName_ PricingRuleScope
pScope_ PricingRuleType
pType_ =
  CreatePricingRule'
    { $sel:billingEntity:CreatePricingRule' :: Maybe Text
billingEntity = forall a. Maybe a
Prelude.Nothing,
      $sel:clientToken:CreatePricingRule' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
      $sel:description:CreatePricingRule' :: Maybe (Sensitive Text)
description = forall a. Maybe a
Prelude.Nothing,
      $sel:modifierPercentage:CreatePricingRule' :: Maybe Double
modifierPercentage = forall a. Maybe a
Prelude.Nothing,
      $sel:service:CreatePricingRule' :: Maybe Text
service = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreatePricingRule' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:tiering:CreatePricingRule' :: Maybe CreateTieringInput
tiering = forall a. Maybe a
Prelude.Nothing,
      $sel:name:CreatePricingRule' :: Sensitive Text
name = forall a. Iso' (Sensitive a) a
Data._Sensitive forall t b. AReview t b -> b -> t
Lens.# Text
pName_,
      $sel:scope:CreatePricingRule' :: PricingRuleScope
scope = PricingRuleScope
pScope_,
      $sel:type':CreatePricingRule' :: PricingRuleType
type' = PricingRuleType
pType_
    }

-- | The seller of services provided by Amazon Web Services, their
-- affiliates, or third-party providers selling services via Amazon Web
-- Services Marketplace.
createPricingRule_billingEntity :: Lens.Lens' CreatePricingRule (Prelude.Maybe Prelude.Text)
createPricingRule_billingEntity :: Lens' CreatePricingRule (Maybe Text)
createPricingRule_billingEntity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {Maybe Text
billingEntity :: Maybe Text
$sel:billingEntity:CreatePricingRule' :: CreatePricingRule -> Maybe Text
billingEntity} -> Maybe Text
billingEntity) (\s :: CreatePricingRule
s@CreatePricingRule' {} Maybe Text
a -> CreatePricingRule
s {$sel:billingEntity:CreatePricingRule' :: Maybe Text
billingEntity = Maybe Text
a} :: CreatePricingRule)

-- | The token that\'s needed to support idempotency. Idempotency isn\'t
-- currently supported, but will be implemented in a future update.
createPricingRule_clientToken :: Lens.Lens' CreatePricingRule (Prelude.Maybe Prelude.Text)
createPricingRule_clientToken :: Lens' CreatePricingRule (Maybe Text)
createPricingRule_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreatePricingRule' :: CreatePricingRule -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreatePricingRule
s@CreatePricingRule' {} Maybe Text
a -> CreatePricingRule
s {$sel:clientToken:CreatePricingRule' :: Maybe Text
clientToken = Maybe Text
a} :: CreatePricingRule)

-- | The pricing rule description.
createPricingRule_description :: Lens.Lens' CreatePricingRule (Prelude.Maybe Prelude.Text)
createPricingRule_description :: Lens' CreatePricingRule (Maybe Text)
createPricingRule_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {Maybe (Sensitive Text)
description :: Maybe (Sensitive Text)
$sel:description:CreatePricingRule' :: CreatePricingRule -> Maybe (Sensitive Text)
description} -> Maybe (Sensitive Text)
description) (\s :: CreatePricingRule
s@CreatePricingRule' {} Maybe (Sensitive Text)
a -> CreatePricingRule
s {$sel:description:CreatePricingRule' :: Maybe (Sensitive Text)
description = Maybe (Sensitive Text)
a} :: CreatePricingRule) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | A percentage modifier that\'s applied on the public pricing rates.
createPricingRule_modifierPercentage :: Lens.Lens' CreatePricingRule (Prelude.Maybe Prelude.Double)
createPricingRule_modifierPercentage :: Lens' CreatePricingRule (Maybe Double)
createPricingRule_modifierPercentage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {Maybe Double
modifierPercentage :: Maybe Double
$sel:modifierPercentage:CreatePricingRule' :: CreatePricingRule -> Maybe Double
modifierPercentage} -> Maybe Double
modifierPercentage) (\s :: CreatePricingRule
s@CreatePricingRule' {} Maybe Double
a -> CreatePricingRule
s {$sel:modifierPercentage:CreatePricingRule' :: Maybe Double
modifierPercentage = Maybe Double
a} :: CreatePricingRule)

-- | If the @Scope@ attribute is set to @SERVICE@, the attribute indicates
-- which service the @PricingRule@ is applicable for.
createPricingRule_service :: Lens.Lens' CreatePricingRule (Prelude.Maybe Prelude.Text)
createPricingRule_service :: Lens' CreatePricingRule (Maybe Text)
createPricingRule_service = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {Maybe Text
service :: Maybe Text
$sel:service:CreatePricingRule' :: CreatePricingRule -> Maybe Text
service} -> Maybe Text
service) (\s :: CreatePricingRule
s@CreatePricingRule' {} Maybe Text
a -> CreatePricingRule
s {$sel:service:CreatePricingRule' :: Maybe Text
service = Maybe Text
a} :: CreatePricingRule)

-- | A map that contains tag keys and tag values that are attached to a
-- pricing rule.
createPricingRule_tags :: Lens.Lens' CreatePricingRule (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createPricingRule_tags :: Lens' CreatePricingRule (Maybe (HashMap Text Text))
createPricingRule_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:CreatePricingRule' :: CreatePricingRule -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: CreatePricingRule
s@CreatePricingRule' {} Maybe (HashMap Text Text)
a -> CreatePricingRule
s {$sel:tags:CreatePricingRule' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: CreatePricingRule) 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 set of tiering configurations for the pricing rule.
createPricingRule_tiering :: Lens.Lens' CreatePricingRule (Prelude.Maybe CreateTieringInput)
createPricingRule_tiering :: Lens' CreatePricingRule (Maybe CreateTieringInput)
createPricingRule_tiering = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {Maybe CreateTieringInput
tiering :: Maybe CreateTieringInput
$sel:tiering:CreatePricingRule' :: CreatePricingRule -> Maybe CreateTieringInput
tiering} -> Maybe CreateTieringInput
tiering) (\s :: CreatePricingRule
s@CreatePricingRule' {} Maybe CreateTieringInput
a -> CreatePricingRule
s {$sel:tiering:CreatePricingRule' :: Maybe CreateTieringInput
tiering = Maybe CreateTieringInput
a} :: CreatePricingRule)

-- | The pricing rule name. The names must be unique to each pricing rule.
createPricingRule_name :: Lens.Lens' CreatePricingRule Prelude.Text
createPricingRule_name :: Lens' CreatePricingRule Text
createPricingRule_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {Sensitive Text
name :: Sensitive Text
$sel:name:CreatePricingRule' :: CreatePricingRule -> Sensitive Text
name} -> Sensitive Text
name) (\s :: CreatePricingRule
s@CreatePricingRule' {} Sensitive Text
a -> CreatePricingRule
s {$sel:name:CreatePricingRule' :: Sensitive Text
name = Sensitive Text
a} :: CreatePricingRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a. Iso' (Sensitive a) a
Data._Sensitive

-- | The scope of pricing rule that indicates if it\'s globally applicable,
-- or it\'s service-specific.
createPricingRule_scope :: Lens.Lens' CreatePricingRule PricingRuleScope
createPricingRule_scope :: Lens' CreatePricingRule PricingRuleScope
createPricingRule_scope = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {PricingRuleScope
scope :: PricingRuleScope
$sel:scope:CreatePricingRule' :: CreatePricingRule -> PricingRuleScope
scope} -> PricingRuleScope
scope) (\s :: CreatePricingRule
s@CreatePricingRule' {} PricingRuleScope
a -> CreatePricingRule
s {$sel:scope:CreatePricingRule' :: PricingRuleScope
scope = PricingRuleScope
a} :: CreatePricingRule)

-- | The type of pricing rule.
createPricingRule_type :: Lens.Lens' CreatePricingRule PricingRuleType
createPricingRule_type :: Lens' CreatePricingRule PricingRuleType
createPricingRule_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRule' {PricingRuleType
type' :: PricingRuleType
$sel:type':CreatePricingRule' :: CreatePricingRule -> PricingRuleType
type'} -> PricingRuleType
type') (\s :: CreatePricingRule
s@CreatePricingRule' {} PricingRuleType
a -> CreatePricingRule
s {$sel:type':CreatePricingRule' :: PricingRuleType
type' = PricingRuleType
a} :: CreatePricingRule)

instance Core.AWSRequest CreatePricingRule where
  type
    AWSResponse CreatePricingRule =
      CreatePricingRuleResponse
  request :: (Service -> Service)
-> CreatePricingRule -> Request CreatePricingRule
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 CreatePricingRule
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreatePricingRule)))
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 -> Int -> CreatePricingRuleResponse
CreatePricingRuleResponse'
            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
"Arn")
            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 CreatePricingRule where
  hashWithSalt :: Int -> CreatePricingRule -> Int
hashWithSalt Int
_salt CreatePricingRule' {Maybe Double
Maybe Text
Maybe (HashMap Text Text)
Maybe (Sensitive Text)
Maybe CreateTieringInput
Sensitive Text
PricingRuleScope
PricingRuleType
type' :: PricingRuleType
scope :: PricingRuleScope
name :: Sensitive Text
tiering :: Maybe CreateTieringInput
tags :: Maybe (HashMap Text Text)
service :: Maybe Text
modifierPercentage :: Maybe Double
description :: Maybe (Sensitive Text)
clientToken :: Maybe Text
billingEntity :: Maybe Text
$sel:type':CreatePricingRule' :: CreatePricingRule -> PricingRuleType
$sel:scope:CreatePricingRule' :: CreatePricingRule -> PricingRuleScope
$sel:name:CreatePricingRule' :: CreatePricingRule -> Sensitive Text
$sel:tiering:CreatePricingRule' :: CreatePricingRule -> Maybe CreateTieringInput
$sel:tags:CreatePricingRule' :: CreatePricingRule -> Maybe (HashMap Text Text)
$sel:service:CreatePricingRule' :: CreatePricingRule -> Maybe Text
$sel:modifierPercentage:CreatePricingRule' :: CreatePricingRule -> Maybe Double
$sel:description:CreatePricingRule' :: CreatePricingRule -> Maybe (Sensitive Text)
$sel:clientToken:CreatePricingRule' :: CreatePricingRule -> Maybe Text
$sel:billingEntity:CreatePricingRule' :: CreatePricingRule -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
billingEntity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Double
modifierPercentage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
service
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CreateTieringInput
tiering
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Sensitive Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` PricingRuleScope
scope
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` PricingRuleType
type'

instance Prelude.NFData CreatePricingRule where
  rnf :: CreatePricingRule -> ()
rnf CreatePricingRule' {Maybe Double
Maybe Text
Maybe (HashMap Text Text)
Maybe (Sensitive Text)
Maybe CreateTieringInput
Sensitive Text
PricingRuleScope
PricingRuleType
type' :: PricingRuleType
scope :: PricingRuleScope
name :: Sensitive Text
tiering :: Maybe CreateTieringInput
tags :: Maybe (HashMap Text Text)
service :: Maybe Text
modifierPercentage :: Maybe Double
description :: Maybe (Sensitive Text)
clientToken :: Maybe Text
billingEntity :: Maybe Text
$sel:type':CreatePricingRule' :: CreatePricingRule -> PricingRuleType
$sel:scope:CreatePricingRule' :: CreatePricingRule -> PricingRuleScope
$sel:name:CreatePricingRule' :: CreatePricingRule -> Sensitive Text
$sel:tiering:CreatePricingRule' :: CreatePricingRule -> Maybe CreateTieringInput
$sel:tags:CreatePricingRule' :: CreatePricingRule -> Maybe (HashMap Text Text)
$sel:service:CreatePricingRule' :: CreatePricingRule -> Maybe Text
$sel:modifierPercentage:CreatePricingRule' :: CreatePricingRule -> Maybe Double
$sel:description:CreatePricingRule' :: CreatePricingRule -> Maybe (Sensitive Text)
$sel:clientToken:CreatePricingRule' :: CreatePricingRule -> Maybe Text
$sel:billingEntity:CreatePricingRule' :: CreatePricingRule -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
billingEntity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Double
modifierPercentage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
service
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe CreateTieringInput
tiering
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Sensitive Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf PricingRuleScope
scope
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf PricingRuleType
type'

instance Data.ToHeaders CreatePricingRule where
  toHeaders :: CreatePricingRule -> ResponseHeaders
toHeaders CreatePricingRule' {Maybe Double
Maybe Text
Maybe (HashMap Text Text)
Maybe (Sensitive Text)
Maybe CreateTieringInput
Sensitive Text
PricingRuleScope
PricingRuleType
type' :: PricingRuleType
scope :: PricingRuleScope
name :: Sensitive Text
tiering :: Maybe CreateTieringInput
tags :: Maybe (HashMap Text Text)
service :: Maybe Text
modifierPercentage :: Maybe Double
description :: Maybe (Sensitive Text)
clientToken :: Maybe Text
billingEntity :: Maybe Text
$sel:type':CreatePricingRule' :: CreatePricingRule -> PricingRuleType
$sel:scope:CreatePricingRule' :: CreatePricingRule -> PricingRuleScope
$sel:name:CreatePricingRule' :: CreatePricingRule -> Sensitive Text
$sel:tiering:CreatePricingRule' :: CreatePricingRule -> Maybe CreateTieringInput
$sel:tags:CreatePricingRule' :: CreatePricingRule -> Maybe (HashMap Text Text)
$sel:service:CreatePricingRule' :: CreatePricingRule -> Maybe Text
$sel:modifierPercentage:CreatePricingRule' :: CreatePricingRule -> Maybe Double
$sel:description:CreatePricingRule' :: CreatePricingRule -> Maybe (Sensitive Text)
$sel:clientToken:CreatePricingRule' :: CreatePricingRule -> Maybe Text
$sel:billingEntity:CreatePricingRule' :: CreatePricingRule -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ HeaderName
"X-Amzn-Client-Token" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Maybe Text
clientToken,
        HeaderName
"Content-Type"
          forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# (ByteString
"application/x-amz-json-1.1" :: Prelude.ByteString)
      ]

instance Data.ToJSON CreatePricingRule where
  toJSON :: CreatePricingRule -> Value
toJSON CreatePricingRule' {Maybe Double
Maybe Text
Maybe (HashMap Text Text)
Maybe (Sensitive Text)
Maybe CreateTieringInput
Sensitive Text
PricingRuleScope
PricingRuleType
type' :: PricingRuleType
scope :: PricingRuleScope
name :: Sensitive Text
tiering :: Maybe CreateTieringInput
tags :: Maybe (HashMap Text Text)
service :: Maybe Text
modifierPercentage :: Maybe Double
description :: Maybe (Sensitive Text)
clientToken :: Maybe Text
billingEntity :: Maybe Text
$sel:type':CreatePricingRule' :: CreatePricingRule -> PricingRuleType
$sel:scope:CreatePricingRule' :: CreatePricingRule -> PricingRuleScope
$sel:name:CreatePricingRule' :: CreatePricingRule -> Sensitive Text
$sel:tiering:CreatePricingRule' :: CreatePricingRule -> Maybe CreateTieringInput
$sel:tags:CreatePricingRule' :: CreatePricingRule -> Maybe (HashMap Text Text)
$sel:service:CreatePricingRule' :: CreatePricingRule -> Maybe Text
$sel:modifierPercentage:CreatePricingRule' :: CreatePricingRule -> Maybe Double
$sel:description:CreatePricingRule' :: CreatePricingRule -> Maybe (Sensitive Text)
$sel:clientToken:CreatePricingRule' :: CreatePricingRule -> Maybe Text
$sel:billingEntity:CreatePricingRule' :: CreatePricingRule -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"BillingEntity" 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
billingEntity,
            (Key
"Description" 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 (Sensitive Text)
description,
            (Key
"ModifierPercentage" 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 Double
modifierPercentage,
            (Key
"Service" 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
service,
            (Key
"Tags" 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 (HashMap Text Text)
tags,
            (Key
"Tiering" 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 CreateTieringInput
tiering,
            forall a. a -> Maybe a
Prelude.Just (Key
"Name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Sensitive Text
name),
            forall a. a -> Maybe a
Prelude.Just (Key
"Scope" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= PricingRuleScope
scope),
            forall a. a -> Maybe a
Prelude.Just (Key
"Type" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= PricingRuleType
type')
          ]
      )

instance Data.ToPath CreatePricingRule where
  toPath :: CreatePricingRule -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/create-pricing-rule"

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

-- | /See:/ 'newCreatePricingRuleResponse' smart constructor.
data CreatePricingRuleResponse = CreatePricingRuleResponse'
  { -- | The Amazon Resource Name (ARN) of the created pricing rule.
    CreatePricingRuleResponse -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreatePricingRuleResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreatePricingRuleResponse -> CreatePricingRuleResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreatePricingRuleResponse -> CreatePricingRuleResponse -> Bool
$c/= :: CreatePricingRuleResponse -> CreatePricingRuleResponse -> Bool
== :: CreatePricingRuleResponse -> CreatePricingRuleResponse -> Bool
$c== :: CreatePricingRuleResponse -> CreatePricingRuleResponse -> Bool
Prelude.Eq, ReadPrec [CreatePricingRuleResponse]
ReadPrec CreatePricingRuleResponse
Int -> ReadS CreatePricingRuleResponse
ReadS [CreatePricingRuleResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreatePricingRuleResponse]
$creadListPrec :: ReadPrec [CreatePricingRuleResponse]
readPrec :: ReadPrec CreatePricingRuleResponse
$creadPrec :: ReadPrec CreatePricingRuleResponse
readList :: ReadS [CreatePricingRuleResponse]
$creadList :: ReadS [CreatePricingRuleResponse]
readsPrec :: Int -> ReadS CreatePricingRuleResponse
$creadsPrec :: Int -> ReadS CreatePricingRuleResponse
Prelude.Read, Int -> CreatePricingRuleResponse -> ShowS
[CreatePricingRuleResponse] -> ShowS
CreatePricingRuleResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreatePricingRuleResponse] -> ShowS
$cshowList :: [CreatePricingRuleResponse] -> ShowS
show :: CreatePricingRuleResponse -> String
$cshow :: CreatePricingRuleResponse -> String
showsPrec :: Int -> CreatePricingRuleResponse -> ShowS
$cshowsPrec :: Int -> CreatePricingRuleResponse -> ShowS
Prelude.Show, forall x.
Rep CreatePricingRuleResponse x -> CreatePricingRuleResponse
forall x.
CreatePricingRuleResponse -> Rep CreatePricingRuleResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreatePricingRuleResponse x -> CreatePricingRuleResponse
$cfrom :: forall x.
CreatePricingRuleResponse -> Rep CreatePricingRuleResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreatePricingRuleResponse' 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:
--
-- 'arn', 'createPricingRuleResponse_arn' - The Amazon Resource Name (ARN) of the created pricing rule.
--
-- 'httpStatus', 'createPricingRuleResponse_httpStatus' - The response's http status code.
newCreatePricingRuleResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreatePricingRuleResponse
newCreatePricingRuleResponse :: Int -> CreatePricingRuleResponse
newCreatePricingRuleResponse Int
pHttpStatus_ =
  CreatePricingRuleResponse'
    { $sel:arn:CreatePricingRuleResponse' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreatePricingRuleResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) of the created pricing rule.
createPricingRuleResponse_arn :: Lens.Lens' CreatePricingRuleResponse (Prelude.Maybe Prelude.Text)
createPricingRuleResponse_arn :: Lens' CreatePricingRuleResponse (Maybe Text)
createPricingRuleResponse_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreatePricingRuleResponse' {Maybe Text
arn :: Maybe Text
$sel:arn:CreatePricingRuleResponse' :: CreatePricingRuleResponse -> Maybe Text
arn} -> Maybe Text
arn) (\s :: CreatePricingRuleResponse
s@CreatePricingRuleResponse' {} Maybe Text
a -> CreatePricingRuleResponse
s {$sel:arn:CreatePricingRuleResponse' :: Maybe Text
arn = Maybe Text
a} :: CreatePricingRuleResponse)

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

instance Prelude.NFData CreatePricingRuleResponse where
  rnf :: CreatePricingRuleResponse -> ()
rnf CreatePricingRuleResponse' {Int
Maybe Text
httpStatus :: Int
arn :: Maybe Text
$sel:httpStatus:CreatePricingRuleResponse' :: CreatePricingRuleResponse -> Int
$sel:arn:CreatePricingRuleResponse' :: CreatePricingRuleResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus