{-# 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.EC2.Types.SubnetCidrReservation
-- 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.EC2.Types.SubnetCidrReservation where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import Amazonka.EC2.Types.SubnetCidrReservationType
import Amazonka.EC2.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes a subnet CIDR reservation.
--
-- /See:/ 'newSubnetCidrReservation' smart constructor.
data SubnetCidrReservation = SubnetCidrReservation'
  { -- | The CIDR that has been reserved.
    SubnetCidrReservation -> Maybe Text
cidr :: Prelude.Maybe Prelude.Text,
    -- | The description assigned to the subnet CIDR reservation.
    SubnetCidrReservation -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The ID of the account that owns the subnet CIDR reservation.
    SubnetCidrReservation -> Maybe Text
ownerId :: Prelude.Maybe Prelude.Text,
    -- | The type of reservation.
    SubnetCidrReservation -> Maybe SubnetCidrReservationType
reservationType :: Prelude.Maybe SubnetCidrReservationType,
    -- | The ID of the subnet CIDR reservation.
    SubnetCidrReservation -> Maybe Text
subnetCidrReservationId :: Prelude.Maybe Prelude.Text,
    -- | The ID of the subnet.
    SubnetCidrReservation -> Maybe Text
subnetId :: Prelude.Maybe Prelude.Text,
    -- | The tags assigned to the subnet CIDR reservation.
    SubnetCidrReservation -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (SubnetCidrReservation -> SubnetCidrReservation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubnetCidrReservation -> SubnetCidrReservation -> Bool
$c/= :: SubnetCidrReservation -> SubnetCidrReservation -> Bool
== :: SubnetCidrReservation -> SubnetCidrReservation -> Bool
$c== :: SubnetCidrReservation -> SubnetCidrReservation -> Bool
Prelude.Eq, ReadPrec [SubnetCidrReservation]
ReadPrec SubnetCidrReservation
Int -> ReadS SubnetCidrReservation
ReadS [SubnetCidrReservation]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SubnetCidrReservation]
$creadListPrec :: ReadPrec [SubnetCidrReservation]
readPrec :: ReadPrec SubnetCidrReservation
$creadPrec :: ReadPrec SubnetCidrReservation
readList :: ReadS [SubnetCidrReservation]
$creadList :: ReadS [SubnetCidrReservation]
readsPrec :: Int -> ReadS SubnetCidrReservation
$creadsPrec :: Int -> ReadS SubnetCidrReservation
Prelude.Read, Int -> SubnetCidrReservation -> ShowS
[SubnetCidrReservation] -> ShowS
SubnetCidrReservation -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubnetCidrReservation] -> ShowS
$cshowList :: [SubnetCidrReservation] -> ShowS
show :: SubnetCidrReservation -> String
$cshow :: SubnetCidrReservation -> String
showsPrec :: Int -> SubnetCidrReservation -> ShowS
$cshowsPrec :: Int -> SubnetCidrReservation -> ShowS
Prelude.Show, forall x. Rep SubnetCidrReservation x -> SubnetCidrReservation
forall x. SubnetCidrReservation -> Rep SubnetCidrReservation x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SubnetCidrReservation x -> SubnetCidrReservation
$cfrom :: forall x. SubnetCidrReservation -> Rep SubnetCidrReservation x
Prelude.Generic)

-- |
-- Create a value of 'SubnetCidrReservation' 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:
--
-- 'cidr', 'subnetCidrReservation_cidr' - The CIDR that has been reserved.
--
-- 'description', 'subnetCidrReservation_description' - The description assigned to the subnet CIDR reservation.
--
-- 'ownerId', 'subnetCidrReservation_ownerId' - The ID of the account that owns the subnet CIDR reservation.
--
-- 'reservationType', 'subnetCidrReservation_reservationType' - The type of reservation.
--
-- 'subnetCidrReservationId', 'subnetCidrReservation_subnetCidrReservationId' - The ID of the subnet CIDR reservation.
--
-- 'subnetId', 'subnetCidrReservation_subnetId' - The ID of the subnet.
--
-- 'tags', 'subnetCidrReservation_tags' - The tags assigned to the subnet CIDR reservation.
newSubnetCidrReservation ::
  SubnetCidrReservation
newSubnetCidrReservation :: SubnetCidrReservation
newSubnetCidrReservation =
  SubnetCidrReservation'
    { $sel:cidr:SubnetCidrReservation' :: Maybe Text
cidr = forall a. Maybe a
Prelude.Nothing,
      $sel:description:SubnetCidrReservation' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:ownerId:SubnetCidrReservation' :: Maybe Text
ownerId = forall a. Maybe a
Prelude.Nothing,
      $sel:reservationType:SubnetCidrReservation' :: Maybe SubnetCidrReservationType
reservationType = forall a. Maybe a
Prelude.Nothing,
      $sel:subnetCidrReservationId:SubnetCidrReservation' :: Maybe Text
subnetCidrReservationId = forall a. Maybe a
Prelude.Nothing,
      $sel:subnetId:SubnetCidrReservation' :: Maybe Text
subnetId = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:SubnetCidrReservation' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | The CIDR that has been reserved.
subnetCidrReservation_cidr :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
subnetCidrReservation_cidr :: Lens' SubnetCidrReservation (Maybe Text)
subnetCidrReservation_cidr = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubnetCidrReservation' {Maybe Text
cidr :: Maybe Text
$sel:cidr:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
cidr} -> Maybe Text
cidr) (\s :: SubnetCidrReservation
s@SubnetCidrReservation' {} Maybe Text
a -> SubnetCidrReservation
s {$sel:cidr:SubnetCidrReservation' :: Maybe Text
cidr = Maybe Text
a} :: SubnetCidrReservation)

-- | The description assigned to the subnet CIDR reservation.
subnetCidrReservation_description :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
subnetCidrReservation_description :: Lens' SubnetCidrReservation (Maybe Text)
subnetCidrReservation_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubnetCidrReservation' {Maybe Text
description :: Maybe Text
$sel:description:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
description} -> Maybe Text
description) (\s :: SubnetCidrReservation
s@SubnetCidrReservation' {} Maybe Text
a -> SubnetCidrReservation
s {$sel:description:SubnetCidrReservation' :: Maybe Text
description = Maybe Text
a} :: SubnetCidrReservation)

-- | The ID of the account that owns the subnet CIDR reservation.
subnetCidrReservation_ownerId :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
subnetCidrReservation_ownerId :: Lens' SubnetCidrReservation (Maybe Text)
subnetCidrReservation_ownerId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubnetCidrReservation' {Maybe Text
ownerId :: Maybe Text
$sel:ownerId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
ownerId} -> Maybe Text
ownerId) (\s :: SubnetCidrReservation
s@SubnetCidrReservation' {} Maybe Text
a -> SubnetCidrReservation
s {$sel:ownerId:SubnetCidrReservation' :: Maybe Text
ownerId = Maybe Text
a} :: SubnetCidrReservation)

-- | The type of reservation.
subnetCidrReservation_reservationType :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe SubnetCidrReservationType)
subnetCidrReservation_reservationType :: Lens' SubnetCidrReservation (Maybe SubnetCidrReservationType)
subnetCidrReservation_reservationType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubnetCidrReservation' {Maybe SubnetCidrReservationType
reservationType :: Maybe SubnetCidrReservationType
$sel:reservationType:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe SubnetCidrReservationType
reservationType} -> Maybe SubnetCidrReservationType
reservationType) (\s :: SubnetCidrReservation
s@SubnetCidrReservation' {} Maybe SubnetCidrReservationType
a -> SubnetCidrReservation
s {$sel:reservationType:SubnetCidrReservation' :: Maybe SubnetCidrReservationType
reservationType = Maybe SubnetCidrReservationType
a} :: SubnetCidrReservation)

-- | The ID of the subnet CIDR reservation.
subnetCidrReservation_subnetCidrReservationId :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
subnetCidrReservation_subnetCidrReservationId :: Lens' SubnetCidrReservation (Maybe Text)
subnetCidrReservation_subnetCidrReservationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubnetCidrReservation' {Maybe Text
subnetCidrReservationId :: Maybe Text
$sel:subnetCidrReservationId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
subnetCidrReservationId} -> Maybe Text
subnetCidrReservationId) (\s :: SubnetCidrReservation
s@SubnetCidrReservation' {} Maybe Text
a -> SubnetCidrReservation
s {$sel:subnetCidrReservationId:SubnetCidrReservation' :: Maybe Text
subnetCidrReservationId = Maybe Text
a} :: SubnetCidrReservation)

-- | The ID of the subnet.
subnetCidrReservation_subnetId :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
subnetCidrReservation_subnetId :: Lens' SubnetCidrReservation (Maybe Text)
subnetCidrReservation_subnetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubnetCidrReservation' {Maybe Text
subnetId :: Maybe Text
$sel:subnetId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
subnetId} -> Maybe Text
subnetId) (\s :: SubnetCidrReservation
s@SubnetCidrReservation' {} Maybe Text
a -> SubnetCidrReservation
s {$sel:subnetId:SubnetCidrReservation' :: Maybe Text
subnetId = Maybe Text
a} :: SubnetCidrReservation)

-- | The tags assigned to the subnet CIDR reservation.
subnetCidrReservation_tags :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe [Tag])
subnetCidrReservation_tags :: Lens' SubnetCidrReservation (Maybe [Tag])
subnetCidrReservation_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubnetCidrReservation' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: SubnetCidrReservation
s@SubnetCidrReservation' {} Maybe [Tag]
a -> SubnetCidrReservation
s {$sel:tags:SubnetCidrReservation' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: SubnetCidrReservation) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Data.FromXML SubnetCidrReservation where
  parseXML :: [Node] -> Either String SubnetCidrReservation
parseXML [Node]
x =
    Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe SubnetCidrReservationType
-> Maybe Text
-> Maybe Text
-> Maybe [Tag]
-> SubnetCidrReservation
SubnetCidrReservation'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"cidr")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"description")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"ownerId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"reservationType")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"subnetCidrReservationId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"subnetId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"tagSet"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )

instance Prelude.Hashable SubnetCidrReservation where
  hashWithSalt :: Int -> SubnetCidrReservation -> Int
hashWithSalt Int
_salt SubnetCidrReservation' {Maybe [Tag]
Maybe Text
Maybe SubnetCidrReservationType
tags :: Maybe [Tag]
subnetId :: Maybe Text
subnetCidrReservationId :: Maybe Text
reservationType :: Maybe SubnetCidrReservationType
ownerId :: Maybe Text
description :: Maybe Text
cidr :: Maybe Text
$sel:tags:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe [Tag]
$sel:subnetId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
$sel:subnetCidrReservationId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
$sel:reservationType:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe SubnetCidrReservationType
$sel:ownerId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
$sel:description:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
$sel:cidr:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
cidr
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ownerId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SubnetCidrReservationType
reservationType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
subnetCidrReservationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
subnetId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData SubnetCidrReservation where
  rnf :: SubnetCidrReservation -> ()
rnf SubnetCidrReservation' {Maybe [Tag]
Maybe Text
Maybe SubnetCidrReservationType
tags :: Maybe [Tag]
subnetId :: Maybe Text
subnetCidrReservationId :: Maybe Text
reservationType :: Maybe SubnetCidrReservationType
ownerId :: Maybe Text
description :: Maybe Text
cidr :: Maybe Text
$sel:tags:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe [Tag]
$sel:subnetId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
$sel:subnetCidrReservationId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
$sel:reservationType:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe SubnetCidrReservationType
$sel:ownerId:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
$sel:description:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
$sel:cidr:SubnetCidrReservation' :: SubnetCidrReservation -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
cidr
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ownerId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SubnetCidrReservationType
reservationType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
subnetCidrReservationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
subnetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags