packages feed

amazonka-cloudfront-2.0: gen/Amazonka/CloudFront/Types/OriginGroup.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.CloudFront.Types.OriginGroup
-- 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.CloudFront.Types.OriginGroup where

import Amazonka.CloudFront.Types.OriginGroupFailoverCriteria
import Amazonka.CloudFront.Types.OriginGroupMembers
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

-- | An origin group includes two origins (a primary origin and a second
-- origin to failover to) and a failover criteria that you specify. You
-- create an origin group to support origin failover in CloudFront. When
-- you create or update a distribution, you can specifiy the origin group
-- instead of a single origin, and CloudFront will failover from the
-- primary origin to the second origin under the failover conditions that
-- you\'ve chosen.
--
-- /See:/ 'newOriginGroup' smart constructor.
data OriginGroup = OriginGroup'
  { -- | The origin group\'s ID.
    id :: Prelude.Text,
    -- | A complex type that contains information about the failover criteria for
    -- an origin group.
    failoverCriteria :: OriginGroupFailoverCriteria,
    -- | A complex type that contains information about the origins in an origin
    -- group.
    members :: OriginGroupMembers
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'OriginGroup' 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:
--
-- 'id', 'originGroup_id' - The origin group\'s ID.
--
-- 'failoverCriteria', 'originGroup_failoverCriteria' - A complex type that contains information about the failover criteria for
-- an origin group.
--
-- 'members', 'originGroup_members' - A complex type that contains information about the origins in an origin
-- group.
newOriginGroup ::
  -- | 'id'
  Prelude.Text ->
  -- | 'failoverCriteria'
  OriginGroupFailoverCriteria ->
  -- | 'members'
  OriginGroupMembers ->
  OriginGroup
newOriginGroup pId_ pFailoverCriteria_ pMembers_ =
  OriginGroup'
    { id = pId_,
      failoverCriteria = pFailoverCriteria_,
      members = pMembers_
    }

-- | The origin group\'s ID.
originGroup_id :: Lens.Lens' OriginGroup Prelude.Text
originGroup_id = Lens.lens (\OriginGroup' {id} -> id) (\s@OriginGroup' {} a -> s {id = a} :: OriginGroup)

-- | A complex type that contains information about the failover criteria for
-- an origin group.
originGroup_failoverCriteria :: Lens.Lens' OriginGroup OriginGroupFailoverCriteria
originGroup_failoverCriteria = Lens.lens (\OriginGroup' {failoverCriteria} -> failoverCriteria) (\s@OriginGroup' {} a -> s {failoverCriteria = a} :: OriginGroup)

-- | A complex type that contains information about the origins in an origin
-- group.
originGroup_members :: Lens.Lens' OriginGroup OriginGroupMembers
originGroup_members = Lens.lens (\OriginGroup' {members} -> members) (\s@OriginGroup' {} a -> s {members = a} :: OriginGroup)

instance Data.FromXML OriginGroup where
  parseXML x =
    OriginGroup'
      Prelude.<$> (x Data..@ "Id")
      Prelude.<*> (x Data..@ "FailoverCriteria")
      Prelude.<*> (x Data..@ "Members")

instance Prelude.Hashable OriginGroup where
  hashWithSalt _salt OriginGroup' {..} =
    _salt
      `Prelude.hashWithSalt` id
      `Prelude.hashWithSalt` failoverCriteria
      `Prelude.hashWithSalt` members

instance Prelude.NFData OriginGroup where
  rnf OriginGroup' {..} =
    Prelude.rnf id
      `Prelude.seq` Prelude.rnf failoverCriteria
      `Prelude.seq` Prelude.rnf members

instance Data.ToXML OriginGroup where
  toXML OriginGroup' {..} =
    Prelude.mconcat
      [ "Id" Data.@= id,
        "FailoverCriteria" Data.@= failoverCriteria,
        "Members" Data.@= members
      ]