packages feed

amazonka-amplify-2.0: gen/Amazonka/Amplify/Types/DomainAssociation.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.Amplify.Types.DomainAssociation
-- 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.Amplify.Types.DomainAssociation where

import Amazonka.Amplify.Types.DomainStatus
import Amazonka.Amplify.Types.SubDomain
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

-- | Describes a domain association that associates a custom domain with an
-- Amplify app.
--
-- /See:/ 'newDomainAssociation' smart constructor.
data DomainAssociation = DomainAssociation'
  { -- | Sets branch patterns for automatic subdomain creation.
    autoSubDomainCreationPatterns :: Prelude.Maybe [Prelude.Text],
    -- | The required AWS Identity and Access Management (IAM) service role for
    -- the Amazon Resource Name (ARN) for automatically creating subdomains.
    autoSubDomainIAMRole :: Prelude.Maybe Prelude.Text,
    -- | The DNS record for certificate verification.
    certificateVerificationDNSRecord :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) for the domain association.
    domainAssociationArn :: Prelude.Text,
    -- | The name of the domain.
    domainName :: Prelude.Text,
    -- | Enables the automated creation of subdomains for branches.
    enableAutoSubDomain :: Prelude.Bool,
    -- | The current status of the domain association.
    domainStatus :: DomainStatus,
    -- | The reason for the current status of the domain association.
    statusReason :: Prelude.Text,
    -- | The subdomains for the domain association.
    subDomains :: [SubDomain]
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'DomainAssociation' 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:
--
-- 'autoSubDomainCreationPatterns', 'domainAssociation_autoSubDomainCreationPatterns' - Sets branch patterns for automatic subdomain creation.
--
-- 'autoSubDomainIAMRole', 'domainAssociation_autoSubDomainIAMRole' - The required AWS Identity and Access Management (IAM) service role for
-- the Amazon Resource Name (ARN) for automatically creating subdomains.
--
-- 'certificateVerificationDNSRecord', 'domainAssociation_certificateVerificationDNSRecord' - The DNS record for certificate verification.
--
-- 'domainAssociationArn', 'domainAssociation_domainAssociationArn' - The Amazon Resource Name (ARN) for the domain association.
--
-- 'domainName', 'domainAssociation_domainName' - The name of the domain.
--
-- 'enableAutoSubDomain', 'domainAssociation_enableAutoSubDomain' - Enables the automated creation of subdomains for branches.
--
-- 'domainStatus', 'domainAssociation_domainStatus' - The current status of the domain association.
--
-- 'statusReason', 'domainAssociation_statusReason' - The reason for the current status of the domain association.
--
-- 'subDomains', 'domainAssociation_subDomains' - The subdomains for the domain association.
newDomainAssociation ::
  -- | 'domainAssociationArn'
  Prelude.Text ->
  -- | 'domainName'
  Prelude.Text ->
  -- | 'enableAutoSubDomain'
  Prelude.Bool ->
  -- | 'domainStatus'
  DomainStatus ->
  -- | 'statusReason'
  Prelude.Text ->
  DomainAssociation
newDomainAssociation
  pDomainAssociationArn_
  pDomainName_
  pEnableAutoSubDomain_
  pDomainStatus_
  pStatusReason_ =
    DomainAssociation'
      { autoSubDomainCreationPatterns =
          Prelude.Nothing,
        autoSubDomainIAMRole = Prelude.Nothing,
        certificateVerificationDNSRecord = Prelude.Nothing,
        domainAssociationArn = pDomainAssociationArn_,
        domainName = pDomainName_,
        enableAutoSubDomain = pEnableAutoSubDomain_,
        domainStatus = pDomainStatus_,
        statusReason = pStatusReason_,
        subDomains = Prelude.mempty
      }

-- | Sets branch patterns for automatic subdomain creation.
domainAssociation_autoSubDomainCreationPatterns :: Lens.Lens' DomainAssociation (Prelude.Maybe [Prelude.Text])
domainAssociation_autoSubDomainCreationPatterns = Lens.lens (\DomainAssociation' {autoSubDomainCreationPatterns} -> autoSubDomainCreationPatterns) (\s@DomainAssociation' {} a -> s {autoSubDomainCreationPatterns = a} :: DomainAssociation) Prelude.. Lens.mapping Lens.coerced

-- | The required AWS Identity and Access Management (IAM) service role for
-- the Amazon Resource Name (ARN) for automatically creating subdomains.
domainAssociation_autoSubDomainIAMRole :: Lens.Lens' DomainAssociation (Prelude.Maybe Prelude.Text)
domainAssociation_autoSubDomainIAMRole = Lens.lens (\DomainAssociation' {autoSubDomainIAMRole} -> autoSubDomainIAMRole) (\s@DomainAssociation' {} a -> s {autoSubDomainIAMRole = a} :: DomainAssociation)

-- | The DNS record for certificate verification.
domainAssociation_certificateVerificationDNSRecord :: Lens.Lens' DomainAssociation (Prelude.Maybe Prelude.Text)
domainAssociation_certificateVerificationDNSRecord = Lens.lens (\DomainAssociation' {certificateVerificationDNSRecord} -> certificateVerificationDNSRecord) (\s@DomainAssociation' {} a -> s {certificateVerificationDNSRecord = a} :: DomainAssociation)

-- | The Amazon Resource Name (ARN) for the domain association.
domainAssociation_domainAssociationArn :: Lens.Lens' DomainAssociation Prelude.Text
domainAssociation_domainAssociationArn = Lens.lens (\DomainAssociation' {domainAssociationArn} -> domainAssociationArn) (\s@DomainAssociation' {} a -> s {domainAssociationArn = a} :: DomainAssociation)

-- | The name of the domain.
domainAssociation_domainName :: Lens.Lens' DomainAssociation Prelude.Text
domainAssociation_domainName = Lens.lens (\DomainAssociation' {domainName} -> domainName) (\s@DomainAssociation' {} a -> s {domainName = a} :: DomainAssociation)

-- | Enables the automated creation of subdomains for branches.
domainAssociation_enableAutoSubDomain :: Lens.Lens' DomainAssociation Prelude.Bool
domainAssociation_enableAutoSubDomain = Lens.lens (\DomainAssociation' {enableAutoSubDomain} -> enableAutoSubDomain) (\s@DomainAssociation' {} a -> s {enableAutoSubDomain = a} :: DomainAssociation)

-- | The current status of the domain association.
domainAssociation_domainStatus :: Lens.Lens' DomainAssociation DomainStatus
domainAssociation_domainStatus = Lens.lens (\DomainAssociation' {domainStatus} -> domainStatus) (\s@DomainAssociation' {} a -> s {domainStatus = a} :: DomainAssociation)

-- | The reason for the current status of the domain association.
domainAssociation_statusReason :: Lens.Lens' DomainAssociation Prelude.Text
domainAssociation_statusReason = Lens.lens (\DomainAssociation' {statusReason} -> statusReason) (\s@DomainAssociation' {} a -> s {statusReason = a} :: DomainAssociation)

-- | The subdomains for the domain association.
domainAssociation_subDomains :: Lens.Lens' DomainAssociation [SubDomain]
domainAssociation_subDomains = Lens.lens (\DomainAssociation' {subDomains} -> subDomains) (\s@DomainAssociation' {} a -> s {subDomains = a} :: DomainAssociation) Prelude.. Lens.coerced

instance Data.FromJSON DomainAssociation where
  parseJSON =
    Data.withObject
      "DomainAssociation"
      ( \x ->
          DomainAssociation'
            Prelude.<$> ( x
                            Data..:? "autoSubDomainCreationPatterns"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "autoSubDomainIAMRole")
            Prelude.<*> (x Data..:? "certificateVerificationDNSRecord")
            Prelude.<*> (x Data..: "domainAssociationArn")
            Prelude.<*> (x Data..: "domainName")
            Prelude.<*> (x Data..: "enableAutoSubDomain")
            Prelude.<*> (x Data..: "domainStatus")
            Prelude.<*> (x Data..: "statusReason")
            Prelude.<*> (x Data..:? "subDomains" Data..!= Prelude.mempty)
      )

instance Prelude.Hashable DomainAssociation where
  hashWithSalt _salt DomainAssociation' {..} =
    _salt
      `Prelude.hashWithSalt` autoSubDomainCreationPatterns
      `Prelude.hashWithSalt` autoSubDomainIAMRole
      `Prelude.hashWithSalt` certificateVerificationDNSRecord
      `Prelude.hashWithSalt` domainAssociationArn
      `Prelude.hashWithSalt` domainName
      `Prelude.hashWithSalt` enableAutoSubDomain
      `Prelude.hashWithSalt` domainStatus
      `Prelude.hashWithSalt` statusReason
      `Prelude.hashWithSalt` subDomains

instance Prelude.NFData DomainAssociation where
  rnf DomainAssociation' {..} =
    Prelude.rnf autoSubDomainCreationPatterns
      `Prelude.seq` Prelude.rnf autoSubDomainIAMRole
      `Prelude.seq` Prelude.rnf certificateVerificationDNSRecord
      `Prelude.seq` Prelude.rnf domainAssociationArn
      `Prelude.seq` Prelude.rnf domainName
      `Prelude.seq` Prelude.rnf enableAutoSubDomain
      `Prelude.seq` Prelude.rnf domainStatus
      `Prelude.seq` Prelude.rnf statusReason
      `Prelude.seq` Prelude.rnf subDomains