packages feed

amazonka-iot-2.0: gen/Amazonka/IoT/Types/HttpAction.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.IoT.Types.HttpAction
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.IoT.Types.HttpAction where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.IoT.Types.HttpActionHeader
import Amazonka.IoT.Types.HttpAuthorization
import qualified Amazonka.Prelude as Prelude

-- | Send data to an HTTPS endpoint.
--
-- /See:/ 'newHttpAction' smart constructor.
data HttpAction = HttpAction'
  { -- | The authentication method to use when sending data to an HTTPS endpoint.
    auth :: Prelude.Maybe HttpAuthorization,
    -- | The URL to which IoT sends a confirmation message. The value of the
    -- confirmation URL must be a prefix of the endpoint URL. If you do not
    -- specify a confirmation URL IoT uses the endpoint URL as the confirmation
    -- URL. If you use substitution templates in the confirmationUrl, you must
    -- create and enable topic rule destinations that match each possible value
    -- of the substitution template before traffic is allowed to your endpoint
    -- URL.
    confirmationUrl :: Prelude.Maybe Prelude.Text,
    -- | The HTTP headers to send with the message data.
    headers :: Prelude.Maybe [HttpActionHeader],
    -- | The endpoint URL. If substitution templates are used in the URL, you
    -- must also specify a @confirmationUrl@. If this is a new destination, a
    -- new @TopicRuleDestination@ is created if possible.
    url :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'HttpAction' 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:
--
-- 'auth', 'httpAction_auth' - The authentication method to use when sending data to an HTTPS endpoint.
--
-- 'confirmationUrl', 'httpAction_confirmationUrl' - The URL to which IoT sends a confirmation message. The value of the
-- confirmation URL must be a prefix of the endpoint URL. If you do not
-- specify a confirmation URL IoT uses the endpoint URL as the confirmation
-- URL. If you use substitution templates in the confirmationUrl, you must
-- create and enable topic rule destinations that match each possible value
-- of the substitution template before traffic is allowed to your endpoint
-- URL.
--
-- 'headers', 'httpAction_headers' - The HTTP headers to send with the message data.
--
-- 'url', 'httpAction_url' - The endpoint URL. If substitution templates are used in the URL, you
-- must also specify a @confirmationUrl@. If this is a new destination, a
-- new @TopicRuleDestination@ is created if possible.
newHttpAction ::
  -- | 'url'
  Prelude.Text ->
  HttpAction
newHttpAction pUrl_ =
  HttpAction'
    { auth = Prelude.Nothing,
      confirmationUrl = Prelude.Nothing,
      headers = Prelude.Nothing,
      url = pUrl_
    }

-- | The authentication method to use when sending data to an HTTPS endpoint.
httpAction_auth :: Lens.Lens' HttpAction (Prelude.Maybe HttpAuthorization)
httpAction_auth = Lens.lens (\HttpAction' {auth} -> auth) (\s@HttpAction' {} a -> s {auth = a} :: HttpAction)

-- | The URL to which IoT sends a confirmation message. The value of the
-- confirmation URL must be a prefix of the endpoint URL. If you do not
-- specify a confirmation URL IoT uses the endpoint URL as the confirmation
-- URL. If you use substitution templates in the confirmationUrl, you must
-- create and enable topic rule destinations that match each possible value
-- of the substitution template before traffic is allowed to your endpoint
-- URL.
httpAction_confirmationUrl :: Lens.Lens' HttpAction (Prelude.Maybe Prelude.Text)
httpAction_confirmationUrl = Lens.lens (\HttpAction' {confirmationUrl} -> confirmationUrl) (\s@HttpAction' {} a -> s {confirmationUrl = a} :: HttpAction)

-- | The HTTP headers to send with the message data.
httpAction_headers :: Lens.Lens' HttpAction (Prelude.Maybe [HttpActionHeader])
httpAction_headers = Lens.lens (\HttpAction' {headers} -> headers) (\s@HttpAction' {} a -> s {headers = a} :: HttpAction) Prelude.. Lens.mapping Lens.coerced

-- | The endpoint URL. If substitution templates are used in the URL, you
-- must also specify a @confirmationUrl@. If this is a new destination, a
-- new @TopicRuleDestination@ is created if possible.
httpAction_url :: Lens.Lens' HttpAction Prelude.Text
httpAction_url = Lens.lens (\HttpAction' {url} -> url) (\s@HttpAction' {} a -> s {url = a} :: HttpAction)

instance Data.FromJSON HttpAction where
  parseJSON =
    Data.withObject
      "HttpAction"
      ( \x ->
          HttpAction'
            Prelude.<$> (x Data..:? "auth")
            Prelude.<*> (x Data..:? "confirmationUrl")
            Prelude.<*> (x Data..:? "headers" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..: "url")
      )

instance Prelude.Hashable HttpAction where
  hashWithSalt _salt HttpAction' {..} =
    _salt
      `Prelude.hashWithSalt` auth
      `Prelude.hashWithSalt` confirmationUrl
      `Prelude.hashWithSalt` headers
      `Prelude.hashWithSalt` url

instance Prelude.NFData HttpAction where
  rnf HttpAction' {..} =
    Prelude.rnf auth
      `Prelude.seq` Prelude.rnf confirmationUrl
      `Prelude.seq` Prelude.rnf headers
      `Prelude.seq` Prelude.rnf url

instance Data.ToJSON HttpAction where
  toJSON HttpAction' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("auth" Data..=) Prelude.<$> auth,
            ("confirmationUrl" Data..=)
              Prelude.<$> confirmationUrl,
            ("headers" Data..=) Prelude.<$> headers,
            Prelude.Just ("url" Data..= url)
          ]
      )