{-# 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.Route53.Types.CidrCollectionChange
-- 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.Route53.Types.CidrCollectionChange where

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 Amazonka.Route53.Internal
import Amazonka.Route53.Types.CidrCollectionChangeAction

-- | A complex type that contains information about the CIDR collection
-- change.
--
-- /See:/ 'newCidrCollectionChange' smart constructor.
data CidrCollectionChange = CidrCollectionChange'
  { -- | Name of the location that is associated with the CIDR collection.
    CidrCollectionChange -> Text
locationName :: Prelude.Text,
    -- | CIDR collection change action.
    CidrCollectionChange -> CidrCollectionChangeAction
action :: CidrCollectionChangeAction,
    -- | List of CIDR blocks.
    CidrCollectionChange -> NonEmpty Text
cidrList :: Prelude.NonEmpty Prelude.Text
  }
  deriving (CidrCollectionChange -> CidrCollectionChange -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CidrCollectionChange -> CidrCollectionChange -> Bool
$c/= :: CidrCollectionChange -> CidrCollectionChange -> Bool
== :: CidrCollectionChange -> CidrCollectionChange -> Bool
$c== :: CidrCollectionChange -> CidrCollectionChange -> Bool
Prelude.Eq, ReadPrec [CidrCollectionChange]
ReadPrec CidrCollectionChange
Int -> ReadS CidrCollectionChange
ReadS [CidrCollectionChange]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CidrCollectionChange]
$creadListPrec :: ReadPrec [CidrCollectionChange]
readPrec :: ReadPrec CidrCollectionChange
$creadPrec :: ReadPrec CidrCollectionChange
readList :: ReadS [CidrCollectionChange]
$creadList :: ReadS [CidrCollectionChange]
readsPrec :: Int -> ReadS CidrCollectionChange
$creadsPrec :: Int -> ReadS CidrCollectionChange
Prelude.Read, Int -> CidrCollectionChange -> ShowS
[CidrCollectionChange] -> ShowS
CidrCollectionChange -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CidrCollectionChange] -> ShowS
$cshowList :: [CidrCollectionChange] -> ShowS
show :: CidrCollectionChange -> String
$cshow :: CidrCollectionChange -> String
showsPrec :: Int -> CidrCollectionChange -> ShowS
$cshowsPrec :: Int -> CidrCollectionChange -> ShowS
Prelude.Show, forall x. Rep CidrCollectionChange x -> CidrCollectionChange
forall x. CidrCollectionChange -> Rep CidrCollectionChange x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CidrCollectionChange x -> CidrCollectionChange
$cfrom :: forall x. CidrCollectionChange -> Rep CidrCollectionChange x
Prelude.Generic)

-- |
-- Create a value of 'CidrCollectionChange' 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:
--
-- 'locationName', 'cidrCollectionChange_locationName' - Name of the location that is associated with the CIDR collection.
--
-- 'action', 'cidrCollectionChange_action' - CIDR collection change action.
--
-- 'cidrList', 'cidrCollectionChange_cidrList' - List of CIDR blocks.
newCidrCollectionChange ::
  -- | 'locationName'
  Prelude.Text ->
  -- | 'action'
  CidrCollectionChangeAction ->
  -- | 'cidrList'
  Prelude.NonEmpty Prelude.Text ->
  CidrCollectionChange
newCidrCollectionChange :: Text
-> CidrCollectionChangeAction
-> NonEmpty Text
-> CidrCollectionChange
newCidrCollectionChange
  Text
pLocationName_
  CidrCollectionChangeAction
pAction_
  NonEmpty Text
pCidrList_ =
    CidrCollectionChange'
      { $sel:locationName:CidrCollectionChange' :: Text
locationName =
          Text
pLocationName_,
        $sel:action:CidrCollectionChange' :: CidrCollectionChangeAction
action = CidrCollectionChangeAction
pAction_,
        $sel:cidrList:CidrCollectionChange' :: NonEmpty Text
cidrList = forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty Text
pCidrList_
      }

-- | Name of the location that is associated with the CIDR collection.
cidrCollectionChange_locationName :: Lens.Lens' CidrCollectionChange Prelude.Text
cidrCollectionChange_locationName :: Lens' CidrCollectionChange Text
cidrCollectionChange_locationName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CidrCollectionChange' {Text
locationName :: Text
$sel:locationName:CidrCollectionChange' :: CidrCollectionChange -> Text
locationName} -> Text
locationName) (\s :: CidrCollectionChange
s@CidrCollectionChange' {} Text
a -> CidrCollectionChange
s {$sel:locationName:CidrCollectionChange' :: Text
locationName = Text
a} :: CidrCollectionChange)

-- | CIDR collection change action.
cidrCollectionChange_action :: Lens.Lens' CidrCollectionChange CidrCollectionChangeAction
cidrCollectionChange_action :: Lens' CidrCollectionChange CidrCollectionChangeAction
cidrCollectionChange_action = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CidrCollectionChange' {CidrCollectionChangeAction
action :: CidrCollectionChangeAction
$sel:action:CidrCollectionChange' :: CidrCollectionChange -> CidrCollectionChangeAction
action} -> CidrCollectionChangeAction
action) (\s :: CidrCollectionChange
s@CidrCollectionChange' {} CidrCollectionChangeAction
a -> CidrCollectionChange
s {$sel:action:CidrCollectionChange' :: CidrCollectionChangeAction
action = CidrCollectionChangeAction
a} :: CidrCollectionChange)

-- | List of CIDR blocks.
cidrCollectionChange_cidrList :: Lens.Lens' CidrCollectionChange (Prelude.NonEmpty Prelude.Text)
cidrCollectionChange_cidrList :: Lens' CidrCollectionChange (NonEmpty Text)
cidrCollectionChange_cidrList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CidrCollectionChange' {NonEmpty Text
cidrList :: NonEmpty Text
$sel:cidrList:CidrCollectionChange' :: CidrCollectionChange -> NonEmpty Text
cidrList} -> NonEmpty Text
cidrList) (\s :: CidrCollectionChange
s@CidrCollectionChange' {} NonEmpty Text
a -> CidrCollectionChange
s {$sel:cidrList:CidrCollectionChange' :: NonEmpty Text
cidrList = NonEmpty Text
a} :: CidrCollectionChange) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Prelude.Hashable CidrCollectionChange where
  hashWithSalt :: Int -> CidrCollectionChange -> Int
hashWithSalt Int
_salt CidrCollectionChange' {NonEmpty Text
Text
CidrCollectionChangeAction
cidrList :: NonEmpty Text
action :: CidrCollectionChangeAction
locationName :: Text
$sel:cidrList:CidrCollectionChange' :: CidrCollectionChange -> NonEmpty Text
$sel:action:CidrCollectionChange' :: CidrCollectionChange -> CidrCollectionChangeAction
$sel:locationName:CidrCollectionChange' :: CidrCollectionChange -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
locationName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` CidrCollectionChangeAction
action
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Text
cidrList

instance Prelude.NFData CidrCollectionChange where
  rnf :: CidrCollectionChange -> ()
rnf CidrCollectionChange' {NonEmpty Text
Text
CidrCollectionChangeAction
cidrList :: NonEmpty Text
action :: CidrCollectionChangeAction
locationName :: Text
$sel:cidrList:CidrCollectionChange' :: CidrCollectionChange -> NonEmpty Text
$sel:action:CidrCollectionChange' :: CidrCollectionChange -> CidrCollectionChangeAction
$sel:locationName:CidrCollectionChange' :: CidrCollectionChange -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
locationName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf CidrCollectionChangeAction
action
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty Text
cidrList

instance Data.ToXML CidrCollectionChange where
  toXML :: CidrCollectionChange -> XML
toXML CidrCollectionChange' {NonEmpty Text
Text
CidrCollectionChangeAction
cidrList :: NonEmpty Text
action :: CidrCollectionChangeAction
locationName :: Text
$sel:cidrList:CidrCollectionChange' :: CidrCollectionChange -> NonEmpty Text
$sel:action:CidrCollectionChange' :: CidrCollectionChange -> CidrCollectionChangeAction
$sel:locationName:CidrCollectionChange' :: CidrCollectionChange -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ Name
"LocationName" forall a. ToXML a => Name -> a -> XML
Data.@= Text
locationName,
        Name
"Action" forall a. ToXML a => Name -> a -> XML
Data.@= CidrCollectionChangeAction
action,
        Name
"CidrList" forall a. ToXML a => Name -> a -> XML
Data.@= forall a. (IsList a, ToXML (Item a)) => Name -> a -> XML
Data.toXMLList Name
"Cidr" NonEmpty Text
cidrList
      ]