{-# 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.LoadBalancersConfig
-- 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.LoadBalancersConfig 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.ClassicLoadBalancersConfig
import Amazonka.EC2.Types.TargetGroupsConfig
import qualified Amazonka.Prelude as Prelude

-- | Describes the Classic Load Balancers and target groups to attach to a
-- Spot Fleet request.
--
-- /See:/ 'newLoadBalancersConfig' smart constructor.
data LoadBalancersConfig = LoadBalancersConfig'
  { -- | The Classic Load Balancers.
    LoadBalancersConfig -> Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig :: Prelude.Maybe ClassicLoadBalancersConfig,
    -- | The target groups.
    LoadBalancersConfig -> Maybe TargetGroupsConfig
targetGroupsConfig :: Prelude.Maybe TargetGroupsConfig
  }
  deriving (LoadBalancersConfig -> LoadBalancersConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LoadBalancersConfig -> LoadBalancersConfig -> Bool
$c/= :: LoadBalancersConfig -> LoadBalancersConfig -> Bool
== :: LoadBalancersConfig -> LoadBalancersConfig -> Bool
$c== :: LoadBalancersConfig -> LoadBalancersConfig -> Bool
Prelude.Eq, ReadPrec [LoadBalancersConfig]
ReadPrec LoadBalancersConfig
Int -> ReadS LoadBalancersConfig
ReadS [LoadBalancersConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [LoadBalancersConfig]
$creadListPrec :: ReadPrec [LoadBalancersConfig]
readPrec :: ReadPrec LoadBalancersConfig
$creadPrec :: ReadPrec LoadBalancersConfig
readList :: ReadS [LoadBalancersConfig]
$creadList :: ReadS [LoadBalancersConfig]
readsPrec :: Int -> ReadS LoadBalancersConfig
$creadsPrec :: Int -> ReadS LoadBalancersConfig
Prelude.Read, Int -> LoadBalancersConfig -> ShowS
[LoadBalancersConfig] -> ShowS
LoadBalancersConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LoadBalancersConfig] -> ShowS
$cshowList :: [LoadBalancersConfig] -> ShowS
show :: LoadBalancersConfig -> String
$cshow :: LoadBalancersConfig -> String
showsPrec :: Int -> LoadBalancersConfig -> ShowS
$cshowsPrec :: Int -> LoadBalancersConfig -> ShowS
Prelude.Show, forall x. Rep LoadBalancersConfig x -> LoadBalancersConfig
forall x. LoadBalancersConfig -> Rep LoadBalancersConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep LoadBalancersConfig x -> LoadBalancersConfig
$cfrom :: forall x. LoadBalancersConfig -> Rep LoadBalancersConfig x
Prelude.Generic)

-- |
-- Create a value of 'LoadBalancersConfig' 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:
--
-- 'classicLoadBalancersConfig', 'loadBalancersConfig_classicLoadBalancersConfig' - The Classic Load Balancers.
--
-- 'targetGroupsConfig', 'loadBalancersConfig_targetGroupsConfig' - The target groups.
newLoadBalancersConfig ::
  LoadBalancersConfig
newLoadBalancersConfig :: LoadBalancersConfig
newLoadBalancersConfig =
  LoadBalancersConfig'
    { $sel:classicLoadBalancersConfig:LoadBalancersConfig' :: Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig =
        forall a. Maybe a
Prelude.Nothing,
      $sel:targetGroupsConfig:LoadBalancersConfig' :: Maybe TargetGroupsConfig
targetGroupsConfig = forall a. Maybe a
Prelude.Nothing
    }

-- | The Classic Load Balancers.
loadBalancersConfig_classicLoadBalancersConfig :: Lens.Lens' LoadBalancersConfig (Prelude.Maybe ClassicLoadBalancersConfig)
loadBalancersConfig_classicLoadBalancersConfig :: Lens' LoadBalancersConfig (Maybe ClassicLoadBalancersConfig)
loadBalancersConfig_classicLoadBalancersConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancersConfig' {Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig :: Maybe ClassicLoadBalancersConfig
$sel:classicLoadBalancersConfig:LoadBalancersConfig' :: LoadBalancersConfig -> Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig} -> Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig) (\s :: LoadBalancersConfig
s@LoadBalancersConfig' {} Maybe ClassicLoadBalancersConfig
a -> LoadBalancersConfig
s {$sel:classicLoadBalancersConfig:LoadBalancersConfig' :: Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig = Maybe ClassicLoadBalancersConfig
a} :: LoadBalancersConfig)

-- | The target groups.
loadBalancersConfig_targetGroupsConfig :: Lens.Lens' LoadBalancersConfig (Prelude.Maybe TargetGroupsConfig)
loadBalancersConfig_targetGroupsConfig :: Lens' LoadBalancersConfig (Maybe TargetGroupsConfig)
loadBalancersConfig_targetGroupsConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LoadBalancersConfig' {Maybe TargetGroupsConfig
targetGroupsConfig :: Maybe TargetGroupsConfig
$sel:targetGroupsConfig:LoadBalancersConfig' :: LoadBalancersConfig -> Maybe TargetGroupsConfig
targetGroupsConfig} -> Maybe TargetGroupsConfig
targetGroupsConfig) (\s :: LoadBalancersConfig
s@LoadBalancersConfig' {} Maybe TargetGroupsConfig
a -> LoadBalancersConfig
s {$sel:targetGroupsConfig:LoadBalancersConfig' :: Maybe TargetGroupsConfig
targetGroupsConfig = Maybe TargetGroupsConfig
a} :: LoadBalancersConfig)

instance Data.FromXML LoadBalancersConfig where
  parseXML :: [Node] -> Either String LoadBalancersConfig
parseXML [Node]
x =
    Maybe ClassicLoadBalancersConfig
-> Maybe TargetGroupsConfig -> LoadBalancersConfig
LoadBalancersConfig'
      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
"classicLoadBalancersConfig")
      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
"targetGroupsConfig")

instance Prelude.Hashable LoadBalancersConfig where
  hashWithSalt :: Int -> LoadBalancersConfig -> Int
hashWithSalt Int
_salt LoadBalancersConfig' {Maybe ClassicLoadBalancersConfig
Maybe TargetGroupsConfig
targetGroupsConfig :: Maybe TargetGroupsConfig
classicLoadBalancersConfig :: Maybe ClassicLoadBalancersConfig
$sel:targetGroupsConfig:LoadBalancersConfig' :: LoadBalancersConfig -> Maybe TargetGroupsConfig
$sel:classicLoadBalancersConfig:LoadBalancersConfig' :: LoadBalancersConfig -> Maybe ClassicLoadBalancersConfig
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TargetGroupsConfig
targetGroupsConfig

instance Prelude.NFData LoadBalancersConfig where
  rnf :: LoadBalancersConfig -> ()
rnf LoadBalancersConfig' {Maybe ClassicLoadBalancersConfig
Maybe TargetGroupsConfig
targetGroupsConfig :: Maybe TargetGroupsConfig
classicLoadBalancersConfig :: Maybe ClassicLoadBalancersConfig
$sel:targetGroupsConfig:LoadBalancersConfig' :: LoadBalancersConfig -> Maybe TargetGroupsConfig
$sel:classicLoadBalancersConfig:LoadBalancersConfig' :: LoadBalancersConfig -> Maybe ClassicLoadBalancersConfig
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TargetGroupsConfig
targetGroupsConfig

instance Data.ToQuery LoadBalancersConfig where
  toQuery :: LoadBalancersConfig -> QueryString
toQuery LoadBalancersConfig' {Maybe ClassicLoadBalancersConfig
Maybe TargetGroupsConfig
targetGroupsConfig :: Maybe TargetGroupsConfig
classicLoadBalancersConfig :: Maybe ClassicLoadBalancersConfig
$sel:targetGroupsConfig:LoadBalancersConfig' :: LoadBalancersConfig -> Maybe TargetGroupsConfig
$sel:classicLoadBalancersConfig:LoadBalancersConfig' :: LoadBalancersConfig -> Maybe ClassicLoadBalancersConfig
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"ClassicLoadBalancersConfig"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe ClassicLoadBalancersConfig
classicLoadBalancersConfig,
        ByteString
"TargetGroupsConfig" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe TargetGroupsConfig
targetGroupsConfig
      ]