packages feed

amazonka-lexv2-models-2.0: gen/Amazonka/LexV2Models/Types/ImageResponseCard.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.LexV2Models.Types.ImageResponseCard
-- 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.LexV2Models.Types.ImageResponseCard where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.LexV2Models.Types.Button
import qualified Amazonka.Prelude as Prelude

-- | A card that is shown to the user by a messaging platform. You define the
-- contents of the card, the card is displayed by the platform.
--
-- When you use a response card, the response from the user is constrained
-- to the text associated with a button on the card.
--
-- /See:/ 'newImageResponseCard' smart constructor.
data ImageResponseCard = ImageResponseCard'
  { -- | A list of buttons that should be displayed on the response card. The
    -- arrangement of the buttons is determined by the platform that displays
    -- the button.
    buttons :: Prelude.Maybe [Button],
    -- | The URL of an image to display on the response card. The image URL must
    -- be publicly available so that the platform displaying the response card
    -- has access to the image.
    imageUrl :: Prelude.Maybe Prelude.Text,
    -- | The subtitle to display on the response card. The format of the subtitle
    -- is determined by the platform displaying the response card.
    subtitle :: Prelude.Maybe Prelude.Text,
    -- | The title to display on the response card. The format of the title is
    -- determined by the platform displaying the response card.
    title :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ImageResponseCard' 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:
--
-- 'buttons', 'imageResponseCard_buttons' - A list of buttons that should be displayed on the response card. The
-- arrangement of the buttons is determined by the platform that displays
-- the button.
--
-- 'imageUrl', 'imageResponseCard_imageUrl' - The URL of an image to display on the response card. The image URL must
-- be publicly available so that the platform displaying the response card
-- has access to the image.
--
-- 'subtitle', 'imageResponseCard_subtitle' - The subtitle to display on the response card. The format of the subtitle
-- is determined by the platform displaying the response card.
--
-- 'title', 'imageResponseCard_title' - The title to display on the response card. The format of the title is
-- determined by the platform displaying the response card.
newImageResponseCard ::
  -- | 'title'
  Prelude.Text ->
  ImageResponseCard
newImageResponseCard pTitle_ =
  ImageResponseCard'
    { buttons = Prelude.Nothing,
      imageUrl = Prelude.Nothing,
      subtitle = Prelude.Nothing,
      title = pTitle_
    }

-- | A list of buttons that should be displayed on the response card. The
-- arrangement of the buttons is determined by the platform that displays
-- the button.
imageResponseCard_buttons :: Lens.Lens' ImageResponseCard (Prelude.Maybe [Button])
imageResponseCard_buttons = Lens.lens (\ImageResponseCard' {buttons} -> buttons) (\s@ImageResponseCard' {} a -> s {buttons = a} :: ImageResponseCard) Prelude.. Lens.mapping Lens.coerced

-- | The URL of an image to display on the response card. The image URL must
-- be publicly available so that the platform displaying the response card
-- has access to the image.
imageResponseCard_imageUrl :: Lens.Lens' ImageResponseCard (Prelude.Maybe Prelude.Text)
imageResponseCard_imageUrl = Lens.lens (\ImageResponseCard' {imageUrl} -> imageUrl) (\s@ImageResponseCard' {} a -> s {imageUrl = a} :: ImageResponseCard)

-- | The subtitle to display on the response card. The format of the subtitle
-- is determined by the platform displaying the response card.
imageResponseCard_subtitle :: Lens.Lens' ImageResponseCard (Prelude.Maybe Prelude.Text)
imageResponseCard_subtitle = Lens.lens (\ImageResponseCard' {subtitle} -> subtitle) (\s@ImageResponseCard' {} a -> s {subtitle = a} :: ImageResponseCard)

-- | The title to display on the response card. The format of the title is
-- determined by the platform displaying the response card.
imageResponseCard_title :: Lens.Lens' ImageResponseCard Prelude.Text
imageResponseCard_title = Lens.lens (\ImageResponseCard' {title} -> title) (\s@ImageResponseCard' {} a -> s {title = a} :: ImageResponseCard)

instance Data.FromJSON ImageResponseCard where
  parseJSON =
    Data.withObject
      "ImageResponseCard"
      ( \x ->
          ImageResponseCard'
            Prelude.<$> (x Data..:? "buttons" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "imageUrl")
            Prelude.<*> (x Data..:? "subtitle")
            Prelude.<*> (x Data..: "title")
      )

instance Prelude.Hashable ImageResponseCard where
  hashWithSalt _salt ImageResponseCard' {..} =
    _salt
      `Prelude.hashWithSalt` buttons
      `Prelude.hashWithSalt` imageUrl
      `Prelude.hashWithSalt` subtitle
      `Prelude.hashWithSalt` title

instance Prelude.NFData ImageResponseCard where
  rnf ImageResponseCard' {..} =
    Prelude.rnf buttons
      `Prelude.seq` Prelude.rnf imageUrl
      `Prelude.seq` Prelude.rnf subtitle
      `Prelude.seq` Prelude.rnf title

instance Data.ToJSON ImageResponseCard where
  toJSON ImageResponseCard' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("buttons" Data..=) Prelude.<$> buttons,
            ("imageUrl" Data..=) Prelude.<$> imageUrl,
            ("subtitle" Data..=) Prelude.<$> subtitle,
            Prelude.Just ("title" Data..= title)
          ]
      )