{-# 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.AppMesh.Types.VirtualNodeConnectionPool
-- 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.AppMesh.Types.VirtualNodeConnectionPool where

import Amazonka.AppMesh.Types.VirtualNodeGrpcConnectionPool
import Amazonka.AppMesh.Types.VirtualNodeHttp2ConnectionPool
import Amazonka.AppMesh.Types.VirtualNodeHttpConnectionPool
import Amazonka.AppMesh.Types.VirtualNodeTcpConnectionPool
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 object that represents the type of virtual node connection pool.
--
-- Only one protocol is used at a time and should be the same protocol as
-- the one chosen under port mapping.
--
-- If not present the default value for @maxPendingRequests@ is
-- @2147483647@.
--
-- /See:/ 'newVirtualNodeConnectionPool' smart constructor.
data VirtualNodeConnectionPool = VirtualNodeConnectionPool'
  { -- | An object that represents a type of connection pool.
    VirtualNodeConnectionPool -> Maybe VirtualNodeGrpcConnectionPool
grpc :: Prelude.Maybe VirtualNodeGrpcConnectionPool,
    -- | An object that represents a type of connection pool.
    VirtualNodeConnectionPool -> Maybe VirtualNodeHttpConnectionPool
http :: Prelude.Maybe VirtualNodeHttpConnectionPool,
    -- | An object that represents a type of connection pool.
    VirtualNodeConnectionPool -> Maybe VirtualNodeHttp2ConnectionPool
http2 :: Prelude.Maybe VirtualNodeHttp2ConnectionPool,
    -- | An object that represents a type of connection pool.
    VirtualNodeConnectionPool -> Maybe VirtualNodeTcpConnectionPool
tcp :: Prelude.Maybe VirtualNodeTcpConnectionPool
  }
  deriving (VirtualNodeConnectionPool -> VirtualNodeConnectionPool -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VirtualNodeConnectionPool -> VirtualNodeConnectionPool -> Bool
$c/= :: VirtualNodeConnectionPool -> VirtualNodeConnectionPool -> Bool
== :: VirtualNodeConnectionPool -> VirtualNodeConnectionPool -> Bool
$c== :: VirtualNodeConnectionPool -> VirtualNodeConnectionPool -> Bool
Prelude.Eq, ReadPrec [VirtualNodeConnectionPool]
ReadPrec VirtualNodeConnectionPool
Int -> ReadS VirtualNodeConnectionPool
ReadS [VirtualNodeConnectionPool]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [VirtualNodeConnectionPool]
$creadListPrec :: ReadPrec [VirtualNodeConnectionPool]
readPrec :: ReadPrec VirtualNodeConnectionPool
$creadPrec :: ReadPrec VirtualNodeConnectionPool
readList :: ReadS [VirtualNodeConnectionPool]
$creadList :: ReadS [VirtualNodeConnectionPool]
readsPrec :: Int -> ReadS VirtualNodeConnectionPool
$creadsPrec :: Int -> ReadS VirtualNodeConnectionPool
Prelude.Read, Int -> VirtualNodeConnectionPool -> ShowS
[VirtualNodeConnectionPool] -> ShowS
VirtualNodeConnectionPool -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VirtualNodeConnectionPool] -> ShowS
$cshowList :: [VirtualNodeConnectionPool] -> ShowS
show :: VirtualNodeConnectionPool -> String
$cshow :: VirtualNodeConnectionPool -> String
showsPrec :: Int -> VirtualNodeConnectionPool -> ShowS
$cshowsPrec :: Int -> VirtualNodeConnectionPool -> ShowS
Prelude.Show, forall x.
Rep VirtualNodeConnectionPool x -> VirtualNodeConnectionPool
forall x.
VirtualNodeConnectionPool -> Rep VirtualNodeConnectionPool x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep VirtualNodeConnectionPool x -> VirtualNodeConnectionPool
$cfrom :: forall x.
VirtualNodeConnectionPool -> Rep VirtualNodeConnectionPool x
Prelude.Generic)

-- |
-- Create a value of 'VirtualNodeConnectionPool' 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:
--
-- 'grpc', 'virtualNodeConnectionPool_grpc' - An object that represents a type of connection pool.
--
-- 'http', 'virtualNodeConnectionPool_http' - An object that represents a type of connection pool.
--
-- 'http2', 'virtualNodeConnectionPool_http2' - An object that represents a type of connection pool.
--
-- 'tcp', 'virtualNodeConnectionPool_tcp' - An object that represents a type of connection pool.
newVirtualNodeConnectionPool ::
  VirtualNodeConnectionPool
newVirtualNodeConnectionPool :: VirtualNodeConnectionPool
newVirtualNodeConnectionPool =
  VirtualNodeConnectionPool'
    { $sel:grpc:VirtualNodeConnectionPool' :: Maybe VirtualNodeGrpcConnectionPool
grpc = forall a. Maybe a
Prelude.Nothing,
      $sel:http:VirtualNodeConnectionPool' :: Maybe VirtualNodeHttpConnectionPool
http = forall a. Maybe a
Prelude.Nothing,
      $sel:http2:VirtualNodeConnectionPool' :: Maybe VirtualNodeHttp2ConnectionPool
http2 = forall a. Maybe a
Prelude.Nothing,
      $sel:tcp:VirtualNodeConnectionPool' :: Maybe VirtualNodeTcpConnectionPool
tcp = forall a. Maybe a
Prelude.Nothing
    }

-- | An object that represents a type of connection pool.
virtualNodeConnectionPool_grpc :: Lens.Lens' VirtualNodeConnectionPool (Prelude.Maybe VirtualNodeGrpcConnectionPool)
virtualNodeConnectionPool_grpc :: Lens'
  VirtualNodeConnectionPool (Maybe VirtualNodeGrpcConnectionPool)
virtualNodeConnectionPool_grpc = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeConnectionPool' {Maybe VirtualNodeGrpcConnectionPool
grpc :: Maybe VirtualNodeGrpcConnectionPool
$sel:grpc:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeGrpcConnectionPool
grpc} -> Maybe VirtualNodeGrpcConnectionPool
grpc) (\s :: VirtualNodeConnectionPool
s@VirtualNodeConnectionPool' {} Maybe VirtualNodeGrpcConnectionPool
a -> VirtualNodeConnectionPool
s {$sel:grpc:VirtualNodeConnectionPool' :: Maybe VirtualNodeGrpcConnectionPool
grpc = Maybe VirtualNodeGrpcConnectionPool
a} :: VirtualNodeConnectionPool)

-- | An object that represents a type of connection pool.
virtualNodeConnectionPool_http :: Lens.Lens' VirtualNodeConnectionPool (Prelude.Maybe VirtualNodeHttpConnectionPool)
virtualNodeConnectionPool_http :: Lens'
  VirtualNodeConnectionPool (Maybe VirtualNodeHttpConnectionPool)
virtualNodeConnectionPool_http = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeConnectionPool' {Maybe VirtualNodeHttpConnectionPool
http :: Maybe VirtualNodeHttpConnectionPool
$sel:http:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeHttpConnectionPool
http} -> Maybe VirtualNodeHttpConnectionPool
http) (\s :: VirtualNodeConnectionPool
s@VirtualNodeConnectionPool' {} Maybe VirtualNodeHttpConnectionPool
a -> VirtualNodeConnectionPool
s {$sel:http:VirtualNodeConnectionPool' :: Maybe VirtualNodeHttpConnectionPool
http = Maybe VirtualNodeHttpConnectionPool
a} :: VirtualNodeConnectionPool)

-- | An object that represents a type of connection pool.
virtualNodeConnectionPool_http2 :: Lens.Lens' VirtualNodeConnectionPool (Prelude.Maybe VirtualNodeHttp2ConnectionPool)
virtualNodeConnectionPool_http2 :: Lens'
  VirtualNodeConnectionPool (Maybe VirtualNodeHttp2ConnectionPool)
virtualNodeConnectionPool_http2 = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeConnectionPool' {Maybe VirtualNodeHttp2ConnectionPool
http2 :: Maybe VirtualNodeHttp2ConnectionPool
$sel:http2:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeHttp2ConnectionPool
http2} -> Maybe VirtualNodeHttp2ConnectionPool
http2) (\s :: VirtualNodeConnectionPool
s@VirtualNodeConnectionPool' {} Maybe VirtualNodeHttp2ConnectionPool
a -> VirtualNodeConnectionPool
s {$sel:http2:VirtualNodeConnectionPool' :: Maybe VirtualNodeHttp2ConnectionPool
http2 = Maybe VirtualNodeHttp2ConnectionPool
a} :: VirtualNodeConnectionPool)

-- | An object that represents a type of connection pool.
virtualNodeConnectionPool_tcp :: Lens.Lens' VirtualNodeConnectionPool (Prelude.Maybe VirtualNodeTcpConnectionPool)
virtualNodeConnectionPool_tcp :: Lens'
  VirtualNodeConnectionPool (Maybe VirtualNodeTcpConnectionPool)
virtualNodeConnectionPool_tcp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeConnectionPool' {Maybe VirtualNodeTcpConnectionPool
tcp :: Maybe VirtualNodeTcpConnectionPool
$sel:tcp:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeTcpConnectionPool
tcp} -> Maybe VirtualNodeTcpConnectionPool
tcp) (\s :: VirtualNodeConnectionPool
s@VirtualNodeConnectionPool' {} Maybe VirtualNodeTcpConnectionPool
a -> VirtualNodeConnectionPool
s {$sel:tcp:VirtualNodeConnectionPool' :: Maybe VirtualNodeTcpConnectionPool
tcp = Maybe VirtualNodeTcpConnectionPool
a} :: VirtualNodeConnectionPool)

instance Data.FromJSON VirtualNodeConnectionPool where
  parseJSON :: Value -> Parser VirtualNodeConnectionPool
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"VirtualNodeConnectionPool"
      ( \Object
x ->
          Maybe VirtualNodeGrpcConnectionPool
-> Maybe VirtualNodeHttpConnectionPool
-> Maybe VirtualNodeHttp2ConnectionPool
-> Maybe VirtualNodeTcpConnectionPool
-> VirtualNodeConnectionPool
VirtualNodeConnectionPool'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"grpc")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"http")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"http2")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"tcp")
      )

instance Prelude.Hashable VirtualNodeConnectionPool where
  hashWithSalt :: Int -> VirtualNodeConnectionPool -> Int
hashWithSalt Int
_salt VirtualNodeConnectionPool' {Maybe VirtualNodeGrpcConnectionPool
Maybe VirtualNodeHttp2ConnectionPool
Maybe VirtualNodeHttpConnectionPool
Maybe VirtualNodeTcpConnectionPool
tcp :: Maybe VirtualNodeTcpConnectionPool
http2 :: Maybe VirtualNodeHttp2ConnectionPool
http :: Maybe VirtualNodeHttpConnectionPool
grpc :: Maybe VirtualNodeGrpcConnectionPool
$sel:tcp:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeTcpConnectionPool
$sel:http2:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeHttp2ConnectionPool
$sel:http:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeHttpConnectionPool
$sel:grpc:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeGrpcConnectionPool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VirtualNodeGrpcConnectionPool
grpc
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VirtualNodeHttpConnectionPool
http
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VirtualNodeHttp2ConnectionPool
http2
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VirtualNodeTcpConnectionPool
tcp

instance Prelude.NFData VirtualNodeConnectionPool where
  rnf :: VirtualNodeConnectionPool -> ()
rnf VirtualNodeConnectionPool' {Maybe VirtualNodeGrpcConnectionPool
Maybe VirtualNodeHttp2ConnectionPool
Maybe VirtualNodeHttpConnectionPool
Maybe VirtualNodeTcpConnectionPool
tcp :: Maybe VirtualNodeTcpConnectionPool
http2 :: Maybe VirtualNodeHttp2ConnectionPool
http :: Maybe VirtualNodeHttpConnectionPool
grpc :: Maybe VirtualNodeGrpcConnectionPool
$sel:tcp:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeTcpConnectionPool
$sel:http2:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeHttp2ConnectionPool
$sel:http:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeHttpConnectionPool
$sel:grpc:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeGrpcConnectionPool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe VirtualNodeGrpcConnectionPool
grpc
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VirtualNodeHttpConnectionPool
http
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VirtualNodeHttp2ConnectionPool
http2
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VirtualNodeTcpConnectionPool
tcp

instance Data.ToJSON VirtualNodeConnectionPool where
  toJSON :: VirtualNodeConnectionPool -> Value
toJSON VirtualNodeConnectionPool' {Maybe VirtualNodeGrpcConnectionPool
Maybe VirtualNodeHttp2ConnectionPool
Maybe VirtualNodeHttpConnectionPool
Maybe VirtualNodeTcpConnectionPool
tcp :: Maybe VirtualNodeTcpConnectionPool
http2 :: Maybe VirtualNodeHttp2ConnectionPool
http :: Maybe VirtualNodeHttpConnectionPool
grpc :: Maybe VirtualNodeGrpcConnectionPool
$sel:tcp:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeTcpConnectionPool
$sel:http2:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeHttp2ConnectionPool
$sel:http:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeHttpConnectionPool
$sel:grpc:VirtualNodeConnectionPool' :: VirtualNodeConnectionPool -> Maybe VirtualNodeGrpcConnectionPool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"grpc" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VirtualNodeGrpcConnectionPool
grpc,
            (Key
"http" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VirtualNodeHttpConnectionPool
http,
            (Key
"http2" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VirtualNodeHttp2ConnectionPool
http2,
            (Key
"tcp" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VirtualNodeTcpConnectionPool
tcp
          ]
      )