{-# 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.Outposts.Types.ConnectionDetails
-- 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.Outposts.Types.ConnectionDetails where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | Information about a connection.
--
-- /See:/ 'newConnectionDetails' smart constructor.
data ConnectionDetails = ConnectionDetails'
  { -- | The allowed IP addresses.
    ConnectionDetails -> Maybe [Text]
allowedIps :: Prelude.Maybe [Prelude.Text],
    -- | The public key of the client.
    ConnectionDetails -> Maybe Text
clientPublicKey :: Prelude.Maybe Prelude.Text,
    -- | The client tunnel address.
    ConnectionDetails -> Maybe Text
clientTunnelAddress :: Prelude.Maybe Prelude.Text,
    -- | The endpoint for the server.
    ConnectionDetails -> Maybe Text
serverEndpoint :: Prelude.Maybe Prelude.Text,
    -- | The public key of the server.
    ConnectionDetails -> Maybe Text
serverPublicKey :: Prelude.Maybe Prelude.Text,
    -- | The server tunnel address.
    ConnectionDetails -> Maybe Text
serverTunnelAddress :: Prelude.Maybe Prelude.Text
  }
  deriving (ConnectionDetails -> ConnectionDetails -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ConnectionDetails -> ConnectionDetails -> Bool
$c/= :: ConnectionDetails -> ConnectionDetails -> Bool
== :: ConnectionDetails -> ConnectionDetails -> Bool
$c== :: ConnectionDetails -> ConnectionDetails -> Bool
Prelude.Eq, ReadPrec [ConnectionDetails]
ReadPrec ConnectionDetails
Int -> ReadS ConnectionDetails
ReadS [ConnectionDetails]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ConnectionDetails]
$creadListPrec :: ReadPrec [ConnectionDetails]
readPrec :: ReadPrec ConnectionDetails
$creadPrec :: ReadPrec ConnectionDetails
readList :: ReadS [ConnectionDetails]
$creadList :: ReadS [ConnectionDetails]
readsPrec :: Int -> ReadS ConnectionDetails
$creadsPrec :: Int -> ReadS ConnectionDetails
Prelude.Read, Int -> ConnectionDetails -> ShowS
[ConnectionDetails] -> ShowS
ConnectionDetails -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ConnectionDetails] -> ShowS
$cshowList :: [ConnectionDetails] -> ShowS
show :: ConnectionDetails -> String
$cshow :: ConnectionDetails -> String
showsPrec :: Int -> ConnectionDetails -> ShowS
$cshowsPrec :: Int -> ConnectionDetails -> ShowS
Prelude.Show, forall x. Rep ConnectionDetails x -> ConnectionDetails
forall x. ConnectionDetails -> Rep ConnectionDetails x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ConnectionDetails x -> ConnectionDetails
$cfrom :: forall x. ConnectionDetails -> Rep ConnectionDetails x
Prelude.Generic)

-- |
-- Create a value of 'ConnectionDetails' 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:
--
-- 'allowedIps', 'connectionDetails_allowedIps' - The allowed IP addresses.
--
-- 'clientPublicKey', 'connectionDetails_clientPublicKey' - The public key of the client.
--
-- 'clientTunnelAddress', 'connectionDetails_clientTunnelAddress' - The client tunnel address.
--
-- 'serverEndpoint', 'connectionDetails_serverEndpoint' - The endpoint for the server.
--
-- 'serverPublicKey', 'connectionDetails_serverPublicKey' - The public key of the server.
--
-- 'serverTunnelAddress', 'connectionDetails_serverTunnelAddress' - The server tunnel address.
newConnectionDetails ::
  ConnectionDetails
newConnectionDetails :: ConnectionDetails
newConnectionDetails =
  ConnectionDetails'
    { $sel:allowedIps:ConnectionDetails' :: Maybe [Text]
allowedIps = forall a. Maybe a
Prelude.Nothing,
      $sel:clientPublicKey:ConnectionDetails' :: Maybe Text
clientPublicKey = forall a. Maybe a
Prelude.Nothing,
      $sel:clientTunnelAddress:ConnectionDetails' :: Maybe Text
clientTunnelAddress = forall a. Maybe a
Prelude.Nothing,
      $sel:serverEndpoint:ConnectionDetails' :: Maybe Text
serverEndpoint = forall a. Maybe a
Prelude.Nothing,
      $sel:serverPublicKey:ConnectionDetails' :: Maybe Text
serverPublicKey = forall a. Maybe a
Prelude.Nothing,
      $sel:serverTunnelAddress:ConnectionDetails' :: Maybe Text
serverTunnelAddress = forall a. Maybe a
Prelude.Nothing
    }

-- | The allowed IP addresses.
connectionDetails_allowedIps :: Lens.Lens' ConnectionDetails (Prelude.Maybe [Prelude.Text])
connectionDetails_allowedIps :: Lens' ConnectionDetails (Maybe [Text])
connectionDetails_allowedIps = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConnectionDetails' {Maybe [Text]
allowedIps :: Maybe [Text]
$sel:allowedIps:ConnectionDetails' :: ConnectionDetails -> Maybe [Text]
allowedIps} -> Maybe [Text]
allowedIps) (\s :: ConnectionDetails
s@ConnectionDetails' {} Maybe [Text]
a -> ConnectionDetails
s {$sel:allowedIps:ConnectionDetails' :: Maybe [Text]
allowedIps = Maybe [Text]
a} :: ConnectionDetails) 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

-- | The public key of the client.
connectionDetails_clientPublicKey :: Lens.Lens' ConnectionDetails (Prelude.Maybe Prelude.Text)
connectionDetails_clientPublicKey :: Lens' ConnectionDetails (Maybe Text)
connectionDetails_clientPublicKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConnectionDetails' {Maybe Text
clientPublicKey :: Maybe Text
$sel:clientPublicKey:ConnectionDetails' :: ConnectionDetails -> Maybe Text
clientPublicKey} -> Maybe Text
clientPublicKey) (\s :: ConnectionDetails
s@ConnectionDetails' {} Maybe Text
a -> ConnectionDetails
s {$sel:clientPublicKey:ConnectionDetails' :: Maybe Text
clientPublicKey = Maybe Text
a} :: ConnectionDetails)

-- | The client tunnel address.
connectionDetails_clientTunnelAddress :: Lens.Lens' ConnectionDetails (Prelude.Maybe Prelude.Text)
connectionDetails_clientTunnelAddress :: Lens' ConnectionDetails (Maybe Text)
connectionDetails_clientTunnelAddress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConnectionDetails' {Maybe Text
clientTunnelAddress :: Maybe Text
$sel:clientTunnelAddress:ConnectionDetails' :: ConnectionDetails -> Maybe Text
clientTunnelAddress} -> Maybe Text
clientTunnelAddress) (\s :: ConnectionDetails
s@ConnectionDetails' {} Maybe Text
a -> ConnectionDetails
s {$sel:clientTunnelAddress:ConnectionDetails' :: Maybe Text
clientTunnelAddress = Maybe Text
a} :: ConnectionDetails)

-- | The endpoint for the server.
connectionDetails_serverEndpoint :: Lens.Lens' ConnectionDetails (Prelude.Maybe Prelude.Text)
connectionDetails_serverEndpoint :: Lens' ConnectionDetails (Maybe Text)
connectionDetails_serverEndpoint = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConnectionDetails' {Maybe Text
serverEndpoint :: Maybe Text
$sel:serverEndpoint:ConnectionDetails' :: ConnectionDetails -> Maybe Text
serverEndpoint} -> Maybe Text
serverEndpoint) (\s :: ConnectionDetails
s@ConnectionDetails' {} Maybe Text
a -> ConnectionDetails
s {$sel:serverEndpoint:ConnectionDetails' :: Maybe Text
serverEndpoint = Maybe Text
a} :: ConnectionDetails)

-- | The public key of the server.
connectionDetails_serverPublicKey :: Lens.Lens' ConnectionDetails (Prelude.Maybe Prelude.Text)
connectionDetails_serverPublicKey :: Lens' ConnectionDetails (Maybe Text)
connectionDetails_serverPublicKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConnectionDetails' {Maybe Text
serverPublicKey :: Maybe Text
$sel:serverPublicKey:ConnectionDetails' :: ConnectionDetails -> Maybe Text
serverPublicKey} -> Maybe Text
serverPublicKey) (\s :: ConnectionDetails
s@ConnectionDetails' {} Maybe Text
a -> ConnectionDetails
s {$sel:serverPublicKey:ConnectionDetails' :: Maybe Text
serverPublicKey = Maybe Text
a} :: ConnectionDetails)

-- | The server tunnel address.
connectionDetails_serverTunnelAddress :: Lens.Lens' ConnectionDetails (Prelude.Maybe Prelude.Text)
connectionDetails_serverTunnelAddress :: Lens' ConnectionDetails (Maybe Text)
connectionDetails_serverTunnelAddress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConnectionDetails' {Maybe Text
serverTunnelAddress :: Maybe Text
$sel:serverTunnelAddress:ConnectionDetails' :: ConnectionDetails -> Maybe Text
serverTunnelAddress} -> Maybe Text
serverTunnelAddress) (\s :: ConnectionDetails
s@ConnectionDetails' {} Maybe Text
a -> ConnectionDetails
s {$sel:serverTunnelAddress:ConnectionDetails' :: Maybe Text
serverTunnelAddress = Maybe Text
a} :: ConnectionDetails)

instance Data.FromJSON ConnectionDetails where
  parseJSON :: Value -> Parser ConnectionDetails
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ConnectionDetails"
      ( \Object
x ->
          Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> ConnectionDetails
ConnectionDetails'
            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
"AllowedIps" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            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
"ClientPublicKey")
            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
"ClientTunnelAddress")
            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
"ServerEndpoint")
            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
"ServerPublicKey")
            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
"ServerTunnelAddress")
      )

instance Prelude.Hashable ConnectionDetails where
  hashWithSalt :: Int -> ConnectionDetails -> Int
hashWithSalt Int
_salt ConnectionDetails' {Maybe [Text]
Maybe Text
serverTunnelAddress :: Maybe Text
serverPublicKey :: Maybe Text
serverEndpoint :: Maybe Text
clientTunnelAddress :: Maybe Text
clientPublicKey :: Maybe Text
allowedIps :: Maybe [Text]
$sel:serverTunnelAddress:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:serverPublicKey:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:serverEndpoint:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:clientTunnelAddress:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:clientPublicKey:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:allowedIps:ConnectionDetails' :: ConnectionDetails -> Maybe [Text]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
allowedIps
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientPublicKey
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientTunnelAddress
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
serverEndpoint
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
serverPublicKey
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
serverTunnelAddress

instance Prelude.NFData ConnectionDetails where
  rnf :: ConnectionDetails -> ()
rnf ConnectionDetails' {Maybe [Text]
Maybe Text
serverTunnelAddress :: Maybe Text
serverPublicKey :: Maybe Text
serverEndpoint :: Maybe Text
clientTunnelAddress :: Maybe Text
clientPublicKey :: Maybe Text
allowedIps :: Maybe [Text]
$sel:serverTunnelAddress:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:serverPublicKey:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:serverEndpoint:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:clientTunnelAddress:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:clientPublicKey:ConnectionDetails' :: ConnectionDetails -> Maybe Text
$sel:allowedIps:ConnectionDetails' :: ConnectionDetails -> Maybe [Text]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
allowedIps
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientPublicKey
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientTunnelAddress
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
serverEndpoint
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
serverPublicKey
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
serverTunnelAddress