packages feed

amazonka-billingconductor-2.0: gen/Amazonka/BillingConductor/UpdatePricingRule.hs

{-# 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.UpdatePricingRule
-- 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 an existing pricing rule.
module Amazonka.BillingConductor.UpdatePricingRule
  ( -- * Creating a Request
    UpdatePricingRule (..),
    newUpdatePricingRule,

    -- * Request Lenses
    updatePricingRule_description,
    updatePricingRule_modifierPercentage,
    updatePricingRule_name,
    updatePricingRule_tiering,
    updatePricingRule_type,
    updatePricingRule_arn,

    -- * Destructuring the Response
    UpdatePricingRuleResponse (..),
    newUpdatePricingRuleResponse,

    -- * Response Lenses
    updatePricingRuleResponse_arn,
    updatePricingRuleResponse_associatedPricingPlanCount,
    updatePricingRuleResponse_billingEntity,
    updatePricingRuleResponse_description,
    updatePricingRuleResponse_lastModifiedTime,
    updatePricingRuleResponse_modifierPercentage,
    updatePricingRuleResponse_name,
    updatePricingRuleResponse_scope,
    updatePricingRuleResponse_service,
    updatePricingRuleResponse_tiering,
    updatePricingRuleResponse_type,
    updatePricingRuleResponse_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:/ 'newUpdatePricingRule' smart constructor.
data UpdatePricingRule = UpdatePricingRule'
  { -- | The new description for the pricing rule.
    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The new modifier to show pricing plan rates as a percentage.
    modifierPercentage :: Prelude.Maybe Prelude.Double,
    -- | The new name of the pricing rule. The name must be unique to each
    -- pricing rule.
    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The set of tiering configurations for the pricing rule.
    tiering :: Prelude.Maybe UpdateTieringInput,
    -- | The new pricing rule type.
    type' :: Prelude.Maybe PricingRuleType,
    -- | The Amazon Resource Name (ARN) of the pricing rule to update.
    arn :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'UpdatePricingRule' 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:
--
-- 'description', 'updatePricingRule_description' - The new description for the pricing rule.
--
-- 'modifierPercentage', 'updatePricingRule_modifierPercentage' - The new modifier to show pricing plan rates as a percentage.
--
-- 'name', 'updatePricingRule_name' - The new name of the pricing rule. The name must be unique to each
-- pricing rule.
--
-- 'tiering', 'updatePricingRule_tiering' - The set of tiering configurations for the pricing rule.
--
-- 'type'', 'updatePricingRule_type' - The new pricing rule type.
--
-- 'arn', 'updatePricingRule_arn' - The Amazon Resource Name (ARN) of the pricing rule to update.
newUpdatePricingRule ::
  -- | 'arn'
  Prelude.Text ->
  UpdatePricingRule
newUpdatePricingRule pArn_ =
  UpdatePricingRule'
    { description = Prelude.Nothing,
      modifierPercentage = Prelude.Nothing,
      name = Prelude.Nothing,
      tiering = Prelude.Nothing,
      type' = Prelude.Nothing,
      arn = pArn_
    }

-- | The new description for the pricing rule.
updatePricingRule_description :: Lens.Lens' UpdatePricingRule (Prelude.Maybe Prelude.Text)
updatePricingRule_description = Lens.lens (\UpdatePricingRule' {description} -> description) (\s@UpdatePricingRule' {} a -> s {description = a} :: UpdatePricingRule) Prelude.. Lens.mapping Data._Sensitive

-- | The new modifier to show pricing plan rates as a percentage.
updatePricingRule_modifierPercentage :: Lens.Lens' UpdatePricingRule (Prelude.Maybe Prelude.Double)
updatePricingRule_modifierPercentage = Lens.lens (\UpdatePricingRule' {modifierPercentage} -> modifierPercentage) (\s@UpdatePricingRule' {} a -> s {modifierPercentage = a} :: UpdatePricingRule)

-- | The new name of the pricing rule. The name must be unique to each
-- pricing rule.
updatePricingRule_name :: Lens.Lens' UpdatePricingRule (Prelude.Maybe Prelude.Text)
updatePricingRule_name = Lens.lens (\UpdatePricingRule' {name} -> name) (\s@UpdatePricingRule' {} a -> s {name = a} :: UpdatePricingRule) Prelude.. Lens.mapping Data._Sensitive

-- | The set of tiering configurations for the pricing rule.
updatePricingRule_tiering :: Lens.Lens' UpdatePricingRule (Prelude.Maybe UpdateTieringInput)
updatePricingRule_tiering = Lens.lens (\UpdatePricingRule' {tiering} -> tiering) (\s@UpdatePricingRule' {} a -> s {tiering = a} :: UpdatePricingRule)

-- | The new pricing rule type.
updatePricingRule_type :: Lens.Lens' UpdatePricingRule (Prelude.Maybe PricingRuleType)
updatePricingRule_type = Lens.lens (\UpdatePricingRule' {type'} -> type') (\s@UpdatePricingRule' {} a -> s {type' = a} :: UpdatePricingRule)

-- | The Amazon Resource Name (ARN) of the pricing rule to update.
updatePricingRule_arn :: Lens.Lens' UpdatePricingRule Prelude.Text
updatePricingRule_arn = Lens.lens (\UpdatePricingRule' {arn} -> arn) (\s@UpdatePricingRule' {} a -> s {arn = a} :: UpdatePricingRule)

instance Core.AWSRequest UpdatePricingRule where
  type
    AWSResponse UpdatePricingRule =
      UpdatePricingRuleResponse
  request overrides =
    Request.putJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          UpdatePricingRuleResponse'
            Prelude.<$> (x Data..?> "Arn")
            Prelude.<*> (x Data..?> "AssociatedPricingPlanCount")
            Prelude.<*> (x Data..?> "BillingEntity")
            Prelude.<*> (x Data..?> "Description")
            Prelude.<*> (x Data..?> "LastModifiedTime")
            Prelude.<*> (x Data..?> "ModifierPercentage")
            Prelude.<*> (x Data..?> "Name")
            Prelude.<*> (x Data..?> "Scope")
            Prelude.<*> (x Data..?> "Service")
            Prelude.<*> (x Data..?> "Tiering")
            Prelude.<*> (x Data..?> "Type")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable UpdatePricingRule where
  hashWithSalt _salt UpdatePricingRule' {..} =
    _salt
      `Prelude.hashWithSalt` description
      `Prelude.hashWithSalt` modifierPercentage
      `Prelude.hashWithSalt` name
      `Prelude.hashWithSalt` tiering
      `Prelude.hashWithSalt` type'
      `Prelude.hashWithSalt` arn

instance Prelude.NFData UpdatePricingRule where
  rnf UpdatePricingRule' {..} =
    Prelude.rnf description
      `Prelude.seq` Prelude.rnf modifierPercentage
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf tiering
      `Prelude.seq` Prelude.rnf type'
      `Prelude.seq` Prelude.rnf arn

instance Data.ToHeaders UpdatePricingRule where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UpdatePricingRule where
  toJSON UpdatePricingRule' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("Description" Data..=) Prelude.<$> description,
            ("ModifierPercentage" Data..=)
              Prelude.<$> modifierPercentage,
            ("Name" Data..=) Prelude.<$> name,
            ("Tiering" Data..=) Prelude.<$> tiering,
            ("Type" Data..=) Prelude.<$> type',
            Prelude.Just ("Arn" Data..= arn)
          ]
      )

instance Data.ToPath UpdatePricingRule where
  toPath = Prelude.const "/update-pricing-rule"

instance Data.ToQuery UpdatePricingRule where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newUpdatePricingRuleResponse' smart constructor.
data UpdatePricingRuleResponse = UpdatePricingRuleResponse'
  { -- | The Amazon Resource Name (ARN) of the successfully updated pricing rule.
    arn :: Prelude.Maybe Prelude.Text,
    -- | The pricing plans count that this pricing rule is associated with.
    associatedPricingPlanCount :: Prelude.Maybe Prelude.Natural,
    -- | The seller of services provided by Amazon Web Services, their
    -- affiliates, or third-party providers selling services via Amazon Web
    -- Services Marketplace.
    billingEntity :: Prelude.Maybe Prelude.Text,
    -- | The new description for the pricing rule.
    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The most recent time the pricing rule was modified.
    lastModifiedTime :: Prelude.Maybe Prelude.Integer,
    -- | The new modifier to show pricing plan rates as a percentage.
    modifierPercentage :: Prelude.Maybe Prelude.Double,
    -- | The new name of the pricing rule. The name must be unique to each
    -- pricing rule.
    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The scope of pricing rule that indicates if it\'s globally applicable,
    -- or it\'s service-specific.
    scope :: Prelude.Maybe PricingRuleScope,
    -- | If the @Scope@ attribute is set to @SERVICE@, the attribute indicates
    -- which service the @PricingRule@ is applicable for.
    service :: Prelude.Maybe Prelude.Text,
    -- | The set of tiering configurations for the pricing rule.
    tiering :: Prelude.Maybe UpdateTieringInput,
    -- | The new pricing rule type.
    type' :: Prelude.Maybe PricingRuleType,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'UpdatePricingRuleResponse' 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', 'updatePricingRuleResponse_arn' - The Amazon Resource Name (ARN) of the successfully updated pricing rule.
--
-- 'associatedPricingPlanCount', 'updatePricingRuleResponse_associatedPricingPlanCount' - The pricing plans count that this pricing rule is associated with.
--
-- 'billingEntity', 'updatePricingRuleResponse_billingEntity' - The seller of services provided by Amazon Web Services, their
-- affiliates, or third-party providers selling services via Amazon Web
-- Services Marketplace.
--
-- 'description', 'updatePricingRuleResponse_description' - The new description for the pricing rule.
--
-- 'lastModifiedTime', 'updatePricingRuleResponse_lastModifiedTime' - The most recent time the pricing rule was modified.
--
-- 'modifierPercentage', 'updatePricingRuleResponse_modifierPercentage' - The new modifier to show pricing plan rates as a percentage.
--
-- 'name', 'updatePricingRuleResponse_name' - The new name of the pricing rule. The name must be unique to each
-- pricing rule.
--
-- 'scope', 'updatePricingRuleResponse_scope' - The scope of pricing rule that indicates if it\'s globally applicable,
-- or it\'s service-specific.
--
-- 'service', 'updatePricingRuleResponse_service' - If the @Scope@ attribute is set to @SERVICE@, the attribute indicates
-- which service the @PricingRule@ is applicable for.
--
-- 'tiering', 'updatePricingRuleResponse_tiering' - The set of tiering configurations for the pricing rule.
--
-- 'type'', 'updatePricingRuleResponse_type' - The new pricing rule type.
--
-- 'httpStatus', 'updatePricingRuleResponse_httpStatus' - The response's http status code.
newUpdatePricingRuleResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdatePricingRuleResponse
newUpdatePricingRuleResponse pHttpStatus_ =
  UpdatePricingRuleResponse'
    { arn = Prelude.Nothing,
      associatedPricingPlanCount = Prelude.Nothing,
      billingEntity = Prelude.Nothing,
      description = Prelude.Nothing,
      lastModifiedTime = Prelude.Nothing,
      modifierPercentage = Prelude.Nothing,
      name = Prelude.Nothing,
      scope = Prelude.Nothing,
      service = Prelude.Nothing,
      tiering = Prelude.Nothing,
      type' = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) of the successfully updated pricing rule.
updatePricingRuleResponse_arn :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe Prelude.Text)
updatePricingRuleResponse_arn = Lens.lens (\UpdatePricingRuleResponse' {arn} -> arn) (\s@UpdatePricingRuleResponse' {} a -> s {arn = a} :: UpdatePricingRuleResponse)

-- | The pricing plans count that this pricing rule is associated with.
updatePricingRuleResponse_associatedPricingPlanCount :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe Prelude.Natural)
updatePricingRuleResponse_associatedPricingPlanCount = Lens.lens (\UpdatePricingRuleResponse' {associatedPricingPlanCount} -> associatedPricingPlanCount) (\s@UpdatePricingRuleResponse' {} a -> s {associatedPricingPlanCount = a} :: UpdatePricingRuleResponse)

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

-- | The new description for the pricing rule.
updatePricingRuleResponse_description :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe Prelude.Text)
updatePricingRuleResponse_description = Lens.lens (\UpdatePricingRuleResponse' {description} -> description) (\s@UpdatePricingRuleResponse' {} a -> s {description = a} :: UpdatePricingRuleResponse) Prelude.. Lens.mapping Data._Sensitive

-- | The most recent time the pricing rule was modified.
updatePricingRuleResponse_lastModifiedTime :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe Prelude.Integer)
updatePricingRuleResponse_lastModifiedTime = Lens.lens (\UpdatePricingRuleResponse' {lastModifiedTime} -> lastModifiedTime) (\s@UpdatePricingRuleResponse' {} a -> s {lastModifiedTime = a} :: UpdatePricingRuleResponse)

-- | The new modifier to show pricing plan rates as a percentage.
updatePricingRuleResponse_modifierPercentage :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe Prelude.Double)
updatePricingRuleResponse_modifierPercentage = Lens.lens (\UpdatePricingRuleResponse' {modifierPercentage} -> modifierPercentage) (\s@UpdatePricingRuleResponse' {} a -> s {modifierPercentage = a} :: UpdatePricingRuleResponse)

-- | The new name of the pricing rule. The name must be unique to each
-- pricing rule.
updatePricingRuleResponse_name :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe Prelude.Text)
updatePricingRuleResponse_name = Lens.lens (\UpdatePricingRuleResponse' {name} -> name) (\s@UpdatePricingRuleResponse' {} a -> s {name = a} :: UpdatePricingRuleResponse) Prelude.. Lens.mapping Data._Sensitive

-- | The scope of pricing rule that indicates if it\'s globally applicable,
-- or it\'s service-specific.
updatePricingRuleResponse_scope :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe PricingRuleScope)
updatePricingRuleResponse_scope = Lens.lens (\UpdatePricingRuleResponse' {scope} -> scope) (\s@UpdatePricingRuleResponse' {} a -> s {scope = a} :: UpdatePricingRuleResponse)

-- | If the @Scope@ attribute is set to @SERVICE@, the attribute indicates
-- which service the @PricingRule@ is applicable for.
updatePricingRuleResponse_service :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe Prelude.Text)
updatePricingRuleResponse_service = Lens.lens (\UpdatePricingRuleResponse' {service} -> service) (\s@UpdatePricingRuleResponse' {} a -> s {service = a} :: UpdatePricingRuleResponse)

-- | The set of tiering configurations for the pricing rule.
updatePricingRuleResponse_tiering :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe UpdateTieringInput)
updatePricingRuleResponse_tiering = Lens.lens (\UpdatePricingRuleResponse' {tiering} -> tiering) (\s@UpdatePricingRuleResponse' {} a -> s {tiering = a} :: UpdatePricingRuleResponse)

-- | The new pricing rule type.
updatePricingRuleResponse_type :: Lens.Lens' UpdatePricingRuleResponse (Prelude.Maybe PricingRuleType)
updatePricingRuleResponse_type = Lens.lens (\UpdatePricingRuleResponse' {type'} -> type') (\s@UpdatePricingRuleResponse' {} a -> s {type' = a} :: UpdatePricingRuleResponse)

-- | The response's http status code.
updatePricingRuleResponse_httpStatus :: Lens.Lens' UpdatePricingRuleResponse Prelude.Int
updatePricingRuleResponse_httpStatus = Lens.lens (\UpdatePricingRuleResponse' {httpStatus} -> httpStatus) (\s@UpdatePricingRuleResponse' {} a -> s {httpStatus = a} :: UpdatePricingRuleResponse)

instance Prelude.NFData UpdatePricingRuleResponse where
  rnf UpdatePricingRuleResponse' {..} =
    Prelude.rnf arn
      `Prelude.seq` Prelude.rnf associatedPricingPlanCount
      `Prelude.seq` Prelude.rnf billingEntity
      `Prelude.seq` Prelude.rnf description
      `Prelude.seq` Prelude.rnf lastModifiedTime
      `Prelude.seq` Prelude.rnf modifierPercentage
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf scope
      `Prelude.seq` Prelude.rnf service
      `Prelude.seq` Prelude.rnf tiering
      `Prelude.seq` Prelude.rnf type'
      `Prelude.seq` Prelude.rnf httpStatus