{-# 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.ELB.Types.LoadBalancerDescription
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.ELB.Types.LoadBalancerDescription where

import qualified Amazonka.Core as Core
import Amazonka.ELB.Internal
import Amazonka.ELB.Types.BackendServerDescription
import Amazonka.ELB.Types.HealthCheck
import Amazonka.ELB.Types.Instance
import Amazonka.ELB.Types.ListenerDescription
import Amazonka.ELB.Types.Policies
import Amazonka.ELB.Types.SourceSecurityGroup
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude

-- | Information about a load balancer.
--
-- /See:/ 'newLoadBalancerDescription' smart constructor.
data LoadBalancerDescription = LoadBalancerDescription'
  { -- | The security group for the load balancer, which you can use as part of
    -- your inbound rules for your registered instances. To only allow traffic
    -- from load balancers, add a security group rule that specifies this
    -- source security group as the inbound source.
    LoadBalancerDescription -> Maybe SourceSecurityGroup
sourceSecurityGroup :: Prelude.Maybe SourceSecurityGroup,
    -- | The DNS name of the load balancer.
    --
    -- For more information, see
    -- <https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/using-domain-names-with-elb.html Configure a Custom Domain Name>
    -- in the /Classic Load Balancers Guide/.
    LoadBalancerDescription -> Maybe Text
canonicalHostedZoneName :: Prelude.Maybe Prelude.Text,
    -- | The security groups for the load balancer. Valid only for load balancers
    -- in a VPC.
    LoadBalancerDescription -> Maybe [Text]
securityGroups :: Prelude.Maybe [Prelude.Text],
    -- | Information about the health checks conducted on the load balancer.
    LoadBalancerDescription -> Maybe HealthCheck
healthCheck :: Prelude.Maybe HealthCheck,
    -- | The name of the load balancer.
    LoadBalancerDescription -> Maybe Text
loadBalancerName :: Prelude.Maybe Prelude.Text,
    -- | The date and time the load balancer was created.
    LoadBalancerDescription -> Maybe ISO8601
createdTime :: Prelude.Maybe Core.ISO8601,
    -- | The ID of the VPC for the load balancer.
    LoadBalancerDescription -> Maybe Text
vPCId :: Prelude.Maybe Prelude.Text,
    -- | The IDs of the subnets for the load balancer.
    LoadBalancerDescription -> Maybe [Text]
subnets :: Prelude.Maybe [Prelude.Text],
    -- | The Availability Zones for the load balancer.
    LoadBalancerDescription -> Maybe [Text]
availabilityZones :: Prelude.Maybe [Prelude.Text],
    -- | Information about your EC2 instances.
    LoadBalancerDescription -> Maybe [BackendServerDescription]
backendServerDescriptions :: Prelude.Maybe [BackendServerDescription],
    -- | The ID of the Amazon Route 53 hosted zone for the load balancer.
    LoadBalancerDescription -> Maybe Text
canonicalHostedZoneNameID :: Prelude.Maybe Prelude.Text,
    -- | The IDs of the instances for the load balancer.
    LoadBalancerDescription -> Maybe [Instance]
instances :: Prelude.Maybe [Instance],
    -- | The type of load balancer. Valid only for load balancers in a VPC.
    --
    -- If @Scheme@ is @internet-facing@, the load balancer has a public DNS
    -- name that resolves to a public IP address.
    --
    -- If @Scheme@ is @internal@, the load balancer has a public DNS name that
    -- resolves to a private IP address.
    LoadBalancerDescription -> Maybe Text
scheme :: Prelude.Maybe Prelude.Text,
    -- | The listeners for the load balancer.
    LoadBalancerDescription -> Maybe [ListenerDescription]
listenerDescriptions :: Prelude.Maybe [ListenerDescription],
    -- | The DNS name of the load balancer.
    LoadBalancerDescription -> Maybe Text
dNSName :: Prelude.Maybe Prelude.Text,
    -- | The policies defined for the load balancer.
    LoadBalancerDescription -> Maybe Policies
policies :: Prelude.Maybe Policies
  }
  deriving (LoadBalancerDescription -> LoadBalancerDescription -> Bool
(LoadBalancerDescription -> LoadBalancerDescription -> Bool)
-> (LoadBalancerDescription -> LoadBalancerDescription -> Bool)
-> Eq LoadBalancerDescription
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LoadBalancerDescription -> LoadBalancerDescription -> Bool
$c/= :: LoadBalancerDescription -> LoadBalancerDescription -> Bool
== :: LoadBalancerDescription -> LoadBalancerDescription -> Bool
$c== :: LoadBalancerDescription -> LoadBalancerDescription -> Bool
Prelude.Eq, ReadPrec [LoadBalancerDescription]
ReadPrec LoadBalancerDescription
Int -> ReadS LoadBalancerDescription
ReadS [LoadBalancerDescription]
(Int -> ReadS LoadBalancerDescription)
-> ReadS [LoadBalancerDescription]
-> ReadPrec LoadBalancerDescription
-> ReadPrec [LoadBalancerDescription]
-> Read LoadBalancerDescription
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [LoadBalancerDescription]
$creadListPrec :: ReadPrec [LoadBalancerDescription]
readPrec :: ReadPrec LoadBalancerDescription
$creadPrec :: ReadPrec LoadBalancerDescription
readList :: ReadS [LoadBalancerDescription]
$creadList :: ReadS [LoadBalancerDescription]
readsPrec :: Int -> ReadS LoadBalancerDescription
$creadsPrec :: Int -> ReadS LoadBalancerDescription
Prelude.Read, Int -> LoadBalancerDescription -> ShowS
[LoadBalancerDescription] -> ShowS
LoadBalancerDescription -> String
(Int -> LoadBalancerDescription -> ShowS)
-> (LoadBalancerDescription -> String)
-> ([LoadBalancerDescription] -> ShowS)
-> Show LoadBalancerDescription
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LoadBalancerDescription] -> ShowS
$cshowList :: [LoadBalancerDescription] -> ShowS
show :: LoadBalancerDescription -> String
$cshow :: LoadBalancerDescription -> String
showsPrec :: Int -> LoadBalancerDescription -> ShowS
$cshowsPrec :: Int -> LoadBalancerDescription -> ShowS
Prelude.Show, (forall x.
 LoadBalancerDescription -> Rep LoadBalancerDescription x)
-> (forall x.
    Rep LoadBalancerDescription x -> LoadBalancerDescription)
-> Generic LoadBalancerDescription
forall x. Rep LoadBalancerDescription x -> LoadBalancerDescription
forall x. LoadBalancerDescription -> Rep LoadBalancerDescription x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep LoadBalancerDescription x -> LoadBalancerDescription
$cfrom :: forall x. LoadBalancerDescription -> Rep LoadBalancerDescription x
Prelude.Generic)

-- |
-- Create a value of 'LoadBalancerDescription' 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:
--
-- 'sourceSecurityGroup', 'loadBalancerDescription_sourceSecurityGroup' - The security group for the load balancer, which you can use as part of
-- your inbound rules for your registered instances. To only allow traffic
-- from load balancers, add a security group rule that specifies this
-- source security group as the inbound source.
--
-- 'canonicalHostedZoneName', 'loadBalancerDescription_canonicalHostedZoneName' - The DNS name of the load balancer.
--
-- For more information, see
-- <https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/using-domain-names-with-elb.html Configure a Custom Domain Name>
-- in the /Classic Load Balancers Guide/.
--
-- 'securityGroups', 'loadBalancerDescription_securityGroups' - The security groups for the load balancer. Valid only for load balancers
-- in a VPC.
--
-- 'healthCheck', 'loadBalancerDescription_healthCheck' - Information about the health checks conducted on the load balancer.
--
-- 'loadBalancerName', 'loadBalancerDescription_loadBalancerName' - The name of the load balancer.
--
-- 'createdTime', 'loadBalancerDescription_createdTime' - The date and time the load balancer was created.
--
-- 'vPCId', 'loadBalancerDescription_vPCId' - The ID of the VPC for the load balancer.
--
-- 'subnets', 'loadBalancerDescription_subnets' - The IDs of the subnets for the load balancer.
--
-- 'availabilityZones', 'loadBalancerDescription_availabilityZones' - The Availability Zones for the load balancer.
--
-- 'backendServerDescriptions', 'loadBalancerDescription_backendServerDescriptions' - Information about your EC2 instances.
--
-- 'canonicalHostedZoneNameID', 'loadBalancerDescription_canonicalHostedZoneNameID' - The ID of the Amazon Route 53 hosted zone for the load balancer.
--
-- 'instances', 'loadBalancerDescription_instances' - The IDs of the instances for the load balancer.
--
-- 'scheme', 'loadBalancerDescription_scheme' - The type of load balancer. Valid only for load balancers in a VPC.
--
-- If @Scheme@ is @internet-facing@, the load balancer has a public DNS
-- name that resolves to a public IP address.
--
-- If @Scheme@ is @internal@, the load balancer has a public DNS name that
-- resolves to a private IP address.
--
-- 'listenerDescriptions', 'loadBalancerDescription_listenerDescriptions' - The listeners for the load balancer.
--
-- 'dNSName', 'loadBalancerDescription_dNSName' - The DNS name of the load balancer.
--
-- 'policies', 'loadBalancerDescription_policies' - The policies defined for the load balancer.
newLoadBalancerDescription ::
  LoadBalancerDescription
newLoadBalancerDescription :: LoadBalancerDescription
newLoadBalancerDescription =
  LoadBalancerDescription' :: Maybe SourceSecurityGroup
-> Maybe Text
-> Maybe [Text]
-> Maybe HealthCheck
-> Maybe Text
-> Maybe ISO8601
-> Maybe Text
-> Maybe [Text]
-> Maybe [Text]
-> Maybe [BackendServerDescription]
-> Maybe Text
-> Maybe [Instance]
-> Maybe Text
-> Maybe [ListenerDescription]
-> Maybe Text
-> Maybe Policies
-> LoadBalancerDescription
LoadBalancerDescription'
    { $sel:sourceSecurityGroup:LoadBalancerDescription' :: Maybe SourceSecurityGroup
sourceSecurityGroup =
        Maybe SourceSecurityGroup
forall a. Maybe a
Prelude.Nothing,
      $sel:canonicalHostedZoneName:LoadBalancerDescription' :: Maybe Text
canonicalHostedZoneName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:securityGroups:LoadBalancerDescription' :: Maybe [Text]
securityGroups = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:healthCheck:LoadBalancerDescription' :: Maybe HealthCheck
healthCheck = Maybe HealthCheck
forall a. Maybe a
Prelude.Nothing,
      $sel:loadBalancerName:LoadBalancerDescription' :: Maybe Text
loadBalancerName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:createdTime:LoadBalancerDescription' :: Maybe ISO8601
createdTime = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:vPCId:LoadBalancerDescription' :: Maybe Text
vPCId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:subnets:LoadBalancerDescription' :: Maybe [Text]
subnets = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:availabilityZones:LoadBalancerDescription' :: Maybe [Text]
availabilityZones = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:backendServerDescriptions:LoadBalancerDescription' :: Maybe [BackendServerDescription]
backendServerDescriptions = Maybe [BackendServerDescription]
forall a. Maybe a
Prelude.Nothing,
      $sel:canonicalHostedZoneNameID:LoadBalancerDescription' :: Maybe Text
canonicalHostedZoneNameID = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:instances:LoadBalancerDescription' :: Maybe [Instance]
instances = Maybe [Instance]
forall a. Maybe a
Prelude.Nothing,
      $sel:scheme:LoadBalancerDescription' :: Maybe Text
scheme = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:listenerDescriptions:LoadBalancerDescription' :: Maybe [ListenerDescription]
listenerDescriptions = Maybe [ListenerDescription]
forall a. Maybe a
Prelude.Nothing,
      $sel:dNSName:LoadBalancerDescription' :: Maybe Text
dNSName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:policies:LoadBalancerDescription' :: Maybe Policies
policies = Maybe Policies
forall a. Maybe a
Prelude.Nothing
    }

-- | The security group for the load balancer, which you can use as part of
-- your inbound rules for your registered instances. To only allow traffic
-- from load balancers, add a security group rule that specifies this
-- source security group as the inbound source.
loadBalancerDescription_sourceSecurityGroup :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe SourceSecurityGroup)
loadBalancerDescription_sourceSecurityGroup :: (Maybe SourceSecurityGroup -> f (Maybe SourceSecurityGroup))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_sourceSecurityGroup = (LoadBalancerDescription -> Maybe SourceSecurityGroup)
-> (LoadBalancerDescription
    -> Maybe SourceSecurityGroup -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe SourceSecurityGroup)
     (Maybe SourceSecurityGroup)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe SourceSecurityGroup
sourceSecurityGroup :: Maybe SourceSecurityGroup
$sel:sourceSecurityGroup:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe SourceSecurityGroup
sourceSecurityGroup} -> Maybe SourceSecurityGroup
sourceSecurityGroup) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe SourceSecurityGroup
a -> LoadBalancerDescription
s {$sel:sourceSecurityGroup:LoadBalancerDescription' :: Maybe SourceSecurityGroup
sourceSecurityGroup = Maybe SourceSecurityGroup
a} :: LoadBalancerDescription)

-- | The DNS name of the load balancer.
--
-- For more information, see
-- <https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/using-domain-names-with-elb.html Configure a Custom Domain Name>
-- in the /Classic Load Balancers Guide/.
loadBalancerDescription_canonicalHostedZoneName :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe Prelude.Text)
loadBalancerDescription_canonicalHostedZoneName :: (Maybe Text -> f (Maybe Text))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_canonicalHostedZoneName = (LoadBalancerDescription -> Maybe Text)
-> (LoadBalancerDescription
    -> Maybe Text -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe Text
canonicalHostedZoneName :: Maybe Text
$sel:canonicalHostedZoneName:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe Text
canonicalHostedZoneName} -> Maybe Text
canonicalHostedZoneName) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe Text
a -> LoadBalancerDescription
s {$sel:canonicalHostedZoneName:LoadBalancerDescription' :: Maybe Text
canonicalHostedZoneName = Maybe Text
a} :: LoadBalancerDescription)

-- | The security groups for the load balancer. Valid only for load balancers
-- in a VPC.
loadBalancerDescription_securityGroups :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe [Prelude.Text])
loadBalancerDescription_securityGroups :: (Maybe [Text] -> f (Maybe [Text]))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_securityGroups = (LoadBalancerDescription -> Maybe [Text])
-> (LoadBalancerDescription
    -> Maybe [Text] -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe [Text])
     (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe [Text]
securityGroups :: Maybe [Text]
$sel:securityGroups:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe [Text]
securityGroups} -> Maybe [Text]
securityGroups) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe [Text]
a -> LoadBalancerDescription
s {$sel:securityGroups:LoadBalancerDescription' :: Maybe [Text]
securityGroups = Maybe [Text]
a} :: LoadBalancerDescription) ((Maybe [Text] -> f (Maybe [Text]))
 -> LoadBalancerDescription -> f LoadBalancerDescription)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> LoadBalancerDescription
-> f LoadBalancerDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Information about the health checks conducted on the load balancer.
loadBalancerDescription_healthCheck :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe HealthCheck)
loadBalancerDescription_healthCheck :: (Maybe HealthCheck -> f (Maybe HealthCheck))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_healthCheck = (LoadBalancerDescription -> Maybe HealthCheck)
-> (LoadBalancerDescription
    -> Maybe HealthCheck -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe HealthCheck)
     (Maybe HealthCheck)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe HealthCheck
healthCheck :: Maybe HealthCheck
$sel:healthCheck:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe HealthCheck
healthCheck} -> Maybe HealthCheck
healthCheck) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe HealthCheck
a -> LoadBalancerDescription
s {$sel:healthCheck:LoadBalancerDescription' :: Maybe HealthCheck
healthCheck = Maybe HealthCheck
a} :: LoadBalancerDescription)

-- | The name of the load balancer.
loadBalancerDescription_loadBalancerName :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe Prelude.Text)
loadBalancerDescription_loadBalancerName :: (Maybe Text -> f (Maybe Text))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_loadBalancerName = (LoadBalancerDescription -> Maybe Text)
-> (LoadBalancerDescription
    -> Maybe Text -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe Text
loadBalancerName :: Maybe Text
$sel:loadBalancerName:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe Text
loadBalancerName} -> Maybe Text
loadBalancerName) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe Text
a -> LoadBalancerDescription
s {$sel:loadBalancerName:LoadBalancerDescription' :: Maybe Text
loadBalancerName = Maybe Text
a} :: LoadBalancerDescription)

-- | The date and time the load balancer was created.
loadBalancerDescription_createdTime :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe Prelude.UTCTime)
loadBalancerDescription_createdTime :: (Maybe UTCTime -> f (Maybe UTCTime))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_createdTime = (LoadBalancerDescription -> Maybe ISO8601)
-> (LoadBalancerDescription
    -> Maybe ISO8601 -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe ISO8601)
     (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe ISO8601
createdTime :: Maybe ISO8601
$sel:createdTime:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe ISO8601
createdTime} -> Maybe ISO8601
createdTime) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe ISO8601
a -> LoadBalancerDescription
s {$sel:createdTime:LoadBalancerDescription' :: Maybe ISO8601
createdTime = Maybe ISO8601
a} :: LoadBalancerDescription) ((Maybe ISO8601 -> f (Maybe ISO8601))
 -> LoadBalancerDescription -> f LoadBalancerDescription)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> LoadBalancerDescription
-> f LoadBalancerDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso ISO8601 ISO8601 UTCTime UTCTime
-> Iso
     (Maybe ISO8601) (Maybe ISO8601) (Maybe UTCTime) (Maybe UTCTime)
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 AnIso ISO8601 ISO8601 UTCTime UTCTime
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | The ID of the VPC for the load balancer.
loadBalancerDescription_vPCId :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe Prelude.Text)
loadBalancerDescription_vPCId :: (Maybe Text -> f (Maybe Text))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_vPCId = (LoadBalancerDescription -> Maybe Text)
-> (LoadBalancerDescription
    -> Maybe Text -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe Text
vPCId :: Maybe Text
$sel:vPCId:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe Text
vPCId} -> Maybe Text
vPCId) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe Text
a -> LoadBalancerDescription
s {$sel:vPCId:LoadBalancerDescription' :: Maybe Text
vPCId = Maybe Text
a} :: LoadBalancerDescription)

-- | The IDs of the subnets for the load balancer.
loadBalancerDescription_subnets :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe [Prelude.Text])
loadBalancerDescription_subnets :: (Maybe [Text] -> f (Maybe [Text]))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_subnets = (LoadBalancerDescription -> Maybe [Text])
-> (LoadBalancerDescription
    -> Maybe [Text] -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe [Text])
     (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe [Text]
subnets :: Maybe [Text]
$sel:subnets:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe [Text]
subnets} -> Maybe [Text]
subnets) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe [Text]
a -> LoadBalancerDescription
s {$sel:subnets:LoadBalancerDescription' :: Maybe [Text]
subnets = Maybe [Text]
a} :: LoadBalancerDescription) ((Maybe [Text] -> f (Maybe [Text]))
 -> LoadBalancerDescription -> f LoadBalancerDescription)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> LoadBalancerDescription
-> f LoadBalancerDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The Availability Zones for the load balancer.
loadBalancerDescription_availabilityZones :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe [Prelude.Text])
loadBalancerDescription_availabilityZones :: (Maybe [Text] -> f (Maybe [Text]))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_availabilityZones = (LoadBalancerDescription -> Maybe [Text])
-> (LoadBalancerDescription
    -> Maybe [Text] -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe [Text])
     (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe [Text]
availabilityZones :: Maybe [Text]
$sel:availabilityZones:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe [Text]
availabilityZones} -> Maybe [Text]
availabilityZones) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe [Text]
a -> LoadBalancerDescription
s {$sel:availabilityZones:LoadBalancerDescription' :: Maybe [Text]
availabilityZones = Maybe [Text]
a} :: LoadBalancerDescription) ((Maybe [Text] -> f (Maybe [Text]))
 -> LoadBalancerDescription -> f LoadBalancerDescription)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> LoadBalancerDescription
-> f LoadBalancerDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Information about your EC2 instances.
loadBalancerDescription_backendServerDescriptions :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe [BackendServerDescription])
loadBalancerDescription_backendServerDescriptions :: (Maybe [BackendServerDescription]
 -> f (Maybe [BackendServerDescription]))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_backendServerDescriptions = (LoadBalancerDescription -> Maybe [BackendServerDescription])
-> (LoadBalancerDescription
    -> Maybe [BackendServerDescription] -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe [BackendServerDescription])
     (Maybe [BackendServerDescription])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe [BackendServerDescription]
backendServerDescriptions :: Maybe [BackendServerDescription]
$sel:backendServerDescriptions:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe [BackendServerDescription]
backendServerDescriptions} -> Maybe [BackendServerDescription]
backendServerDescriptions) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe [BackendServerDescription]
a -> LoadBalancerDescription
s {$sel:backendServerDescriptions:LoadBalancerDescription' :: Maybe [BackendServerDescription]
backendServerDescriptions = Maybe [BackendServerDescription]
a} :: LoadBalancerDescription) ((Maybe [BackendServerDescription]
  -> f (Maybe [BackendServerDescription]))
 -> LoadBalancerDescription -> f LoadBalancerDescription)
-> ((Maybe [BackendServerDescription]
     -> f (Maybe [BackendServerDescription]))
    -> Maybe [BackendServerDescription]
    -> f (Maybe [BackendServerDescription]))
-> (Maybe [BackendServerDescription]
    -> f (Maybe [BackendServerDescription]))
-> LoadBalancerDescription
-> f LoadBalancerDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [BackendServerDescription]
  [BackendServerDescription]
  [BackendServerDescription]
  [BackendServerDescription]
-> Iso
     (Maybe [BackendServerDescription])
     (Maybe [BackendServerDescription])
     (Maybe [BackendServerDescription])
     (Maybe [BackendServerDescription])
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 AnIso
  [BackendServerDescription]
  [BackendServerDescription]
  [BackendServerDescription]
  [BackendServerDescription]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The ID of the Amazon Route 53 hosted zone for the load balancer.
loadBalancerDescription_canonicalHostedZoneNameID :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe Prelude.Text)
loadBalancerDescription_canonicalHostedZoneNameID :: (Maybe Text -> f (Maybe Text))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_canonicalHostedZoneNameID = (LoadBalancerDescription -> Maybe Text)
-> (LoadBalancerDescription
    -> Maybe Text -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe Text
canonicalHostedZoneNameID :: Maybe Text
$sel:canonicalHostedZoneNameID:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe Text
canonicalHostedZoneNameID} -> Maybe Text
canonicalHostedZoneNameID) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe Text
a -> LoadBalancerDescription
s {$sel:canonicalHostedZoneNameID:LoadBalancerDescription' :: Maybe Text
canonicalHostedZoneNameID = Maybe Text
a} :: LoadBalancerDescription)

-- | The IDs of the instances for the load balancer.
loadBalancerDescription_instances :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe [Instance])
loadBalancerDescription_instances :: (Maybe [Instance] -> f (Maybe [Instance]))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_instances = (LoadBalancerDescription -> Maybe [Instance])
-> (LoadBalancerDescription
    -> Maybe [Instance] -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe [Instance])
     (Maybe [Instance])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe [Instance]
instances :: Maybe [Instance]
$sel:instances:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe [Instance]
instances} -> Maybe [Instance]
instances) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe [Instance]
a -> LoadBalancerDescription
s {$sel:instances:LoadBalancerDescription' :: Maybe [Instance]
instances = Maybe [Instance]
a} :: LoadBalancerDescription) ((Maybe [Instance] -> f (Maybe [Instance]))
 -> LoadBalancerDescription -> f LoadBalancerDescription)
-> ((Maybe [Instance] -> f (Maybe [Instance]))
    -> Maybe [Instance] -> f (Maybe [Instance]))
-> (Maybe [Instance] -> f (Maybe [Instance]))
-> LoadBalancerDescription
-> f LoadBalancerDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Instance] [Instance] [Instance] [Instance]
-> Iso
     (Maybe [Instance])
     (Maybe [Instance])
     (Maybe [Instance])
     (Maybe [Instance])
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 AnIso [Instance] [Instance] [Instance] [Instance]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The type of load balancer. Valid only for load balancers in a VPC.
--
-- If @Scheme@ is @internet-facing@, the load balancer has a public DNS
-- name that resolves to a public IP address.
--
-- If @Scheme@ is @internal@, the load balancer has a public DNS name that
-- resolves to a private IP address.
loadBalancerDescription_scheme :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe Prelude.Text)
loadBalancerDescription_scheme :: (Maybe Text -> f (Maybe Text))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_scheme = (LoadBalancerDescription -> Maybe Text)
-> (LoadBalancerDescription
    -> Maybe Text -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe Text
scheme :: Maybe Text
$sel:scheme:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe Text
scheme} -> Maybe Text
scheme) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe Text
a -> LoadBalancerDescription
s {$sel:scheme:LoadBalancerDescription' :: Maybe Text
scheme = Maybe Text
a} :: LoadBalancerDescription)

-- | The listeners for the load balancer.
loadBalancerDescription_listenerDescriptions :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe [ListenerDescription])
loadBalancerDescription_listenerDescriptions :: (Maybe [ListenerDescription] -> f (Maybe [ListenerDescription]))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_listenerDescriptions = (LoadBalancerDescription -> Maybe [ListenerDescription])
-> (LoadBalancerDescription
    -> Maybe [ListenerDescription] -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe [ListenerDescription])
     (Maybe [ListenerDescription])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe [ListenerDescription]
listenerDescriptions :: Maybe [ListenerDescription]
$sel:listenerDescriptions:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe [ListenerDescription]
listenerDescriptions} -> Maybe [ListenerDescription]
listenerDescriptions) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe [ListenerDescription]
a -> LoadBalancerDescription
s {$sel:listenerDescriptions:LoadBalancerDescription' :: Maybe [ListenerDescription]
listenerDescriptions = Maybe [ListenerDescription]
a} :: LoadBalancerDescription) ((Maybe [ListenerDescription] -> f (Maybe [ListenerDescription]))
 -> LoadBalancerDescription -> f LoadBalancerDescription)
-> ((Maybe [ListenerDescription]
     -> f (Maybe [ListenerDescription]))
    -> Maybe [ListenerDescription] -> f (Maybe [ListenerDescription]))
-> (Maybe [ListenerDescription] -> f (Maybe [ListenerDescription]))
-> LoadBalancerDescription
-> f LoadBalancerDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [ListenerDescription]
  [ListenerDescription]
  [ListenerDescription]
  [ListenerDescription]
-> Iso
     (Maybe [ListenerDescription])
     (Maybe [ListenerDescription])
     (Maybe [ListenerDescription])
     (Maybe [ListenerDescription])
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 AnIso
  [ListenerDescription]
  [ListenerDescription]
  [ListenerDescription]
  [ListenerDescription]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The DNS name of the load balancer.
loadBalancerDescription_dNSName :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe Prelude.Text)
loadBalancerDescription_dNSName :: (Maybe Text -> f (Maybe Text))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_dNSName = (LoadBalancerDescription -> Maybe Text)
-> (LoadBalancerDescription
    -> Maybe Text -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe Text
dNSName :: Maybe Text
$sel:dNSName:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe Text
dNSName} -> Maybe Text
dNSName) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe Text
a -> LoadBalancerDescription
s {$sel:dNSName:LoadBalancerDescription' :: Maybe Text
dNSName = Maybe Text
a} :: LoadBalancerDescription)

-- | The policies defined for the load balancer.
loadBalancerDescription_policies :: Lens.Lens' LoadBalancerDescription (Prelude.Maybe Policies)
loadBalancerDescription_policies :: (Maybe Policies -> f (Maybe Policies))
-> LoadBalancerDescription -> f LoadBalancerDescription
loadBalancerDescription_policies = (LoadBalancerDescription -> Maybe Policies)
-> (LoadBalancerDescription
    -> Maybe Policies -> LoadBalancerDescription)
-> Lens
     LoadBalancerDescription
     LoadBalancerDescription
     (Maybe Policies)
     (Maybe Policies)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancerDescription' {Maybe Policies
policies :: Maybe Policies
$sel:policies:LoadBalancerDescription' :: LoadBalancerDescription -> Maybe Policies
policies} -> Maybe Policies
policies) (\s :: LoadBalancerDescription
s@LoadBalancerDescription' {} Maybe Policies
a -> LoadBalancerDescription
s {$sel:policies:LoadBalancerDescription' :: Maybe Policies
policies = Maybe Policies
a} :: LoadBalancerDescription)

instance Core.FromXML LoadBalancerDescription where
  parseXML :: [Node] -> Either String LoadBalancerDescription
parseXML [Node]
x =
    Maybe SourceSecurityGroup
-> Maybe Text
-> Maybe [Text]
-> Maybe HealthCheck
-> Maybe Text
-> Maybe ISO8601
-> Maybe Text
-> Maybe [Text]
-> Maybe [Text]
-> Maybe [BackendServerDescription]
-> Maybe Text
-> Maybe [Instance]
-> Maybe Text
-> Maybe [ListenerDescription]
-> Maybe Text
-> Maybe Policies
-> LoadBalancerDescription
LoadBalancerDescription'
      (Maybe SourceSecurityGroup
 -> Maybe Text
 -> Maybe [Text]
 -> Maybe HealthCheck
 -> Maybe Text
 -> Maybe ISO8601
 -> Maybe Text
 -> Maybe [Text]
 -> Maybe [Text]
 -> Maybe [BackendServerDescription]
 -> Maybe Text
 -> Maybe [Instance]
 -> Maybe Text
 -> Maybe [ListenerDescription]
 -> Maybe Text
 -> Maybe Policies
 -> LoadBalancerDescription)
-> Either String (Maybe SourceSecurityGroup)
-> Either
     String
     (Maybe Text
      -> Maybe [Text]
      -> Maybe HealthCheck
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe [Text]
      -> Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x [Node] -> Text -> Either String (Maybe SourceSecurityGroup)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"SourceSecurityGroup")
      Either
  String
  (Maybe Text
   -> Maybe [Text]
   -> Maybe HealthCheck
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe [Text]
   -> Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [Text]
      -> Maybe HealthCheck
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe [Text]
      -> Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"CanonicalHostedZoneName")
      Either
  String
  (Maybe [Text]
   -> Maybe HealthCheck
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe [Text]
   -> Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe [Text])
-> Either
     String
     (Maybe HealthCheck
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe [Text]
      -> Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"SecurityGroups" Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Text]))
-> Either String (Maybe [Text])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Text])
-> [Node] -> Either String (Maybe [Text])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Text]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either
  String
  (Maybe HealthCheck
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe [Text]
   -> Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe HealthCheck)
-> Either
     String
     (Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe [Text]
      -> Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe HealthCheck)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"HealthCheck")
      Either
  String
  (Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe [Text]
   -> Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe ISO8601
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe [Text]
      -> Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"LoadBalancerName")
      Either
  String
  (Maybe ISO8601
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe [Text]
   -> Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe Text
      -> Maybe [Text]
      -> Maybe [Text]
      -> Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ISO8601)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"CreatedTime")
      Either
  String
  (Maybe Text
   -> Maybe [Text]
   -> Maybe [Text]
   -> Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [Text]
      -> Maybe [Text]
      -> Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"VPCId")
      Either
  String
  (Maybe [Text]
   -> Maybe [Text]
   -> Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe [Text])
-> Either
     String
     (Maybe [Text]
      -> Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Subnets" Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Text]))
-> Either String (Maybe [Text])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Text])
-> [Node] -> Either String (Maybe [Text])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Text]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either
  String
  (Maybe [Text]
   -> Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe [Text])
-> Either
     String
     (Maybe [BackendServerDescription]
      -> Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"AvailabilityZones"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Text]))
-> Either String (Maybe [Text])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Text])
-> [Node] -> Either String (Maybe [Text])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Text]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either
  String
  (Maybe [BackendServerDescription]
   -> Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe [BackendServerDescription])
-> Either
     String
     (Maybe Text
      -> Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"BackendServerDescriptions"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [BackendServerDescription]))
-> Either String (Maybe [BackendServerDescription])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [BackendServerDescription])
-> [Node] -> Either String (Maybe [BackendServerDescription])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [BackendServerDescription]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either
  String
  (Maybe Text
   -> Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [Instance]
      -> Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"CanonicalHostedZoneNameID")
      Either
  String
  (Maybe [Instance]
   -> Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe [Instance])
-> Either
     String
     (Maybe Text
      -> Maybe [ListenerDescription]
      -> Maybe Text
      -> Maybe Policies
      -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Instances" Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Instance]))
-> Either String (Maybe [Instance])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Instance])
-> [Node] -> Either String (Maybe [Instance])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Instance]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either
  String
  (Maybe Text
   -> Maybe [ListenerDescription]
   -> Maybe Text
   -> Maybe Policies
   -> LoadBalancerDescription)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [ListenerDescription]
      -> Maybe Text -> Maybe Policies -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Scheme")
      Either
  String
  (Maybe [ListenerDescription]
   -> Maybe Text -> Maybe Policies -> LoadBalancerDescription)
-> Either String (Maybe [ListenerDescription])
-> Either
     String (Maybe Text -> Maybe Policies -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ListenerDescriptions"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [ListenerDescription]))
-> Either String (Maybe [ListenerDescription])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [ListenerDescription])
-> [Node] -> Either String (Maybe [ListenerDescription])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [ListenerDescription]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either
  String (Maybe Text -> Maybe Policies -> LoadBalancerDescription)
-> Either String (Maybe Text)
-> Either String (Maybe Policies -> LoadBalancerDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DNSName")
      Either String (Maybe Policies -> LoadBalancerDescription)
-> Either String (Maybe Policies)
-> Either String LoadBalancerDescription
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Policies)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Policies")

instance Prelude.Hashable LoadBalancerDescription

instance Prelude.NFData LoadBalancerDescription