{-# 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.ClientVpnEndpoint
-- 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.ClientVpnEndpoint 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.AssociatedTargetNetwork
import Amazonka.EC2.Types.ClientConnectResponseOptions
import Amazonka.EC2.Types.ClientLoginBannerResponseOptions
import Amazonka.EC2.Types.ClientVpnAuthentication
import Amazonka.EC2.Types.ClientVpnEndpointStatus
import Amazonka.EC2.Types.ConnectionLogResponseOptions
import Amazonka.EC2.Types.Tag
import Amazonka.EC2.Types.TransportProtocol
import Amazonka.EC2.Types.VpnProtocol
import qualified Amazonka.Prelude as Prelude

-- | Describes a Client VPN endpoint.
--
-- /See:/ 'newClientVpnEndpoint' smart constructor.
data ClientVpnEndpoint = ClientVpnEndpoint'
  { -- | Information about the associated target networks. A target network is a
    -- subnet in a VPC.
    ClientVpnEndpoint -> Maybe [AssociatedTargetNetwork]
associatedTargetNetworks :: Prelude.Maybe [AssociatedTargetNetwork],
    -- | Information about the authentication method used by the Client VPN
    -- endpoint.
    ClientVpnEndpoint -> Maybe [ClientVpnAuthentication]
authenticationOptions :: Prelude.Maybe [ClientVpnAuthentication],
    -- | The IPv4 address range, in CIDR notation, from which client IP addresses
    -- are assigned.
    ClientVpnEndpoint -> Maybe Text
clientCidrBlock :: Prelude.Maybe Prelude.Text,
    -- | The options for managing connection authorization for new client
    -- connections.
    ClientVpnEndpoint -> Maybe ClientConnectResponseOptions
clientConnectOptions :: Prelude.Maybe ClientConnectResponseOptions,
    -- | Options for enabling a customizable text banner that will be displayed
    -- on Amazon Web Services provided clients when a VPN session is
    -- established.
    ClientVpnEndpoint -> Maybe ClientLoginBannerResponseOptions
clientLoginBannerOptions :: Prelude.Maybe ClientLoginBannerResponseOptions,
    -- | The ID of the Client VPN endpoint.
    ClientVpnEndpoint -> Maybe Text
clientVpnEndpointId :: Prelude.Maybe Prelude.Text,
    -- | Information about the client connection logging options for the Client
    -- VPN endpoint.
    ClientVpnEndpoint -> Maybe ConnectionLogResponseOptions
connectionLogOptions :: Prelude.Maybe ConnectionLogResponseOptions,
    -- | The date and time the Client VPN endpoint was created.
    ClientVpnEndpoint -> Maybe Text
creationTime :: Prelude.Maybe Prelude.Text,
    -- | The date and time the Client VPN endpoint was deleted, if applicable.
    ClientVpnEndpoint -> Maybe Text
deletionTime :: Prelude.Maybe Prelude.Text,
    -- | A brief description of the endpoint.
    ClientVpnEndpoint -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The DNS name to be used by clients when connecting to the Client VPN
    -- endpoint.
    ClientVpnEndpoint -> Maybe Text
dnsName :: Prelude.Maybe Prelude.Text,
    -- | Information about the DNS servers to be used for DNS resolution.
    ClientVpnEndpoint -> Maybe [Text]
dnsServers :: Prelude.Maybe [Prelude.Text],
    -- | The IDs of the security groups for the target network.
    ClientVpnEndpoint -> Maybe [Text]
securityGroupIds :: Prelude.Maybe [Prelude.Text],
    -- | The URL of the self-service portal.
    ClientVpnEndpoint -> Maybe Text
selfServicePortalUrl :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the server certificate.
    ClientVpnEndpoint -> Maybe Text
serverCertificateArn :: Prelude.Maybe Prelude.Text,
    -- | The maximum VPN session duration time in hours.
    --
    -- Valid values: @8 | 10 | 12 | 24@
    --
    -- Default value: @24@
    ClientVpnEndpoint -> Maybe Int
sessionTimeoutHours :: Prelude.Maybe Prelude.Int,
    -- | Indicates whether split-tunnel is enabled in the Client VPN endpoint.
    --
    -- For information about split-tunnel VPN endpoints, see
    -- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-Tunnel Client VPN endpoint>
    -- in the /Client VPN Administrator Guide/.
    ClientVpnEndpoint -> Maybe Bool
splitTunnel :: Prelude.Maybe Prelude.Bool,
    -- | The current state of the Client VPN endpoint.
    ClientVpnEndpoint -> Maybe ClientVpnEndpointStatus
status :: Prelude.Maybe ClientVpnEndpointStatus,
    -- | Any tags assigned to the Client VPN endpoint.
    ClientVpnEndpoint -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The transport protocol used by the Client VPN endpoint.
    ClientVpnEndpoint -> Maybe TransportProtocol
transportProtocol :: Prelude.Maybe TransportProtocol,
    -- | The ID of the VPC.
    ClientVpnEndpoint -> Maybe Text
vpcId :: Prelude.Maybe Prelude.Text,
    -- | The port number for the Client VPN endpoint.
    ClientVpnEndpoint -> Maybe Int
vpnPort :: Prelude.Maybe Prelude.Int,
    -- | The protocol used by the VPN session.
    ClientVpnEndpoint -> Maybe VpnProtocol
vpnProtocol :: Prelude.Maybe VpnProtocol
  }
  deriving (ClientVpnEndpoint -> ClientVpnEndpoint -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ClientVpnEndpoint -> ClientVpnEndpoint -> Bool
$c/= :: ClientVpnEndpoint -> ClientVpnEndpoint -> Bool
== :: ClientVpnEndpoint -> ClientVpnEndpoint -> Bool
$c== :: ClientVpnEndpoint -> ClientVpnEndpoint -> Bool
Prelude.Eq, ReadPrec [ClientVpnEndpoint]
ReadPrec ClientVpnEndpoint
Int -> ReadS ClientVpnEndpoint
ReadS [ClientVpnEndpoint]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ClientVpnEndpoint]
$creadListPrec :: ReadPrec [ClientVpnEndpoint]
readPrec :: ReadPrec ClientVpnEndpoint
$creadPrec :: ReadPrec ClientVpnEndpoint
readList :: ReadS [ClientVpnEndpoint]
$creadList :: ReadS [ClientVpnEndpoint]
readsPrec :: Int -> ReadS ClientVpnEndpoint
$creadsPrec :: Int -> ReadS ClientVpnEndpoint
Prelude.Read, Int -> ClientVpnEndpoint -> ShowS
[ClientVpnEndpoint] -> ShowS
ClientVpnEndpoint -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ClientVpnEndpoint] -> ShowS
$cshowList :: [ClientVpnEndpoint] -> ShowS
show :: ClientVpnEndpoint -> String
$cshow :: ClientVpnEndpoint -> String
showsPrec :: Int -> ClientVpnEndpoint -> ShowS
$cshowsPrec :: Int -> ClientVpnEndpoint -> ShowS
Prelude.Show, forall x. Rep ClientVpnEndpoint x -> ClientVpnEndpoint
forall x. ClientVpnEndpoint -> Rep ClientVpnEndpoint x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ClientVpnEndpoint x -> ClientVpnEndpoint
$cfrom :: forall x. ClientVpnEndpoint -> Rep ClientVpnEndpoint x
Prelude.Generic)

-- |
-- Create a value of 'ClientVpnEndpoint' 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:
--
-- 'associatedTargetNetworks', 'clientVpnEndpoint_associatedTargetNetworks' - Information about the associated target networks. A target network is a
-- subnet in a VPC.
--
-- 'authenticationOptions', 'clientVpnEndpoint_authenticationOptions' - Information about the authentication method used by the Client VPN
-- endpoint.
--
-- 'clientCidrBlock', 'clientVpnEndpoint_clientCidrBlock' - The IPv4 address range, in CIDR notation, from which client IP addresses
-- are assigned.
--
-- 'clientConnectOptions', 'clientVpnEndpoint_clientConnectOptions' - The options for managing connection authorization for new client
-- connections.
--
-- 'clientLoginBannerOptions', 'clientVpnEndpoint_clientLoginBannerOptions' - Options for enabling a customizable text banner that will be displayed
-- on Amazon Web Services provided clients when a VPN session is
-- established.
--
-- 'clientVpnEndpointId', 'clientVpnEndpoint_clientVpnEndpointId' - The ID of the Client VPN endpoint.
--
-- 'connectionLogOptions', 'clientVpnEndpoint_connectionLogOptions' - Information about the client connection logging options for the Client
-- VPN endpoint.
--
-- 'creationTime', 'clientVpnEndpoint_creationTime' - The date and time the Client VPN endpoint was created.
--
-- 'deletionTime', 'clientVpnEndpoint_deletionTime' - The date and time the Client VPN endpoint was deleted, if applicable.
--
-- 'description', 'clientVpnEndpoint_description' - A brief description of the endpoint.
--
-- 'dnsName', 'clientVpnEndpoint_dnsName' - The DNS name to be used by clients when connecting to the Client VPN
-- endpoint.
--
-- 'dnsServers', 'clientVpnEndpoint_dnsServers' - Information about the DNS servers to be used for DNS resolution.
--
-- 'securityGroupIds', 'clientVpnEndpoint_securityGroupIds' - The IDs of the security groups for the target network.
--
-- 'selfServicePortalUrl', 'clientVpnEndpoint_selfServicePortalUrl' - The URL of the self-service portal.
--
-- 'serverCertificateArn', 'clientVpnEndpoint_serverCertificateArn' - The ARN of the server certificate.
--
-- 'sessionTimeoutHours', 'clientVpnEndpoint_sessionTimeoutHours' - The maximum VPN session duration time in hours.
--
-- Valid values: @8 | 10 | 12 | 24@
--
-- Default value: @24@
--
-- 'splitTunnel', 'clientVpnEndpoint_splitTunnel' - Indicates whether split-tunnel is enabled in the Client VPN endpoint.
--
-- For information about split-tunnel VPN endpoints, see
-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-Tunnel Client VPN endpoint>
-- in the /Client VPN Administrator Guide/.
--
-- 'status', 'clientVpnEndpoint_status' - The current state of the Client VPN endpoint.
--
-- 'tags', 'clientVpnEndpoint_tags' - Any tags assigned to the Client VPN endpoint.
--
-- 'transportProtocol', 'clientVpnEndpoint_transportProtocol' - The transport protocol used by the Client VPN endpoint.
--
-- 'vpcId', 'clientVpnEndpoint_vpcId' - The ID of the VPC.
--
-- 'vpnPort', 'clientVpnEndpoint_vpnPort' - The port number for the Client VPN endpoint.
--
-- 'vpnProtocol', 'clientVpnEndpoint_vpnProtocol' - The protocol used by the VPN session.
newClientVpnEndpoint ::
  ClientVpnEndpoint
newClientVpnEndpoint :: ClientVpnEndpoint
newClientVpnEndpoint =
  ClientVpnEndpoint'
    { $sel:associatedTargetNetworks:ClientVpnEndpoint' :: Maybe [AssociatedTargetNetwork]
associatedTargetNetworks =
        forall a. Maybe a
Prelude.Nothing,
      $sel:authenticationOptions:ClientVpnEndpoint' :: Maybe [ClientVpnAuthentication]
authenticationOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:clientCidrBlock:ClientVpnEndpoint' :: Maybe Text
clientCidrBlock = forall a. Maybe a
Prelude.Nothing,
      $sel:clientConnectOptions:ClientVpnEndpoint' :: Maybe ClientConnectResponseOptions
clientConnectOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:clientLoginBannerOptions:ClientVpnEndpoint' :: Maybe ClientLoginBannerResponseOptions
clientLoginBannerOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:clientVpnEndpointId:ClientVpnEndpoint' :: Maybe Text
clientVpnEndpointId = forall a. Maybe a
Prelude.Nothing,
      $sel:connectionLogOptions:ClientVpnEndpoint' :: Maybe ConnectionLogResponseOptions
connectionLogOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:creationTime:ClientVpnEndpoint' :: Maybe Text
creationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:deletionTime:ClientVpnEndpoint' :: Maybe Text
deletionTime = forall a. Maybe a
Prelude.Nothing,
      $sel:description:ClientVpnEndpoint' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:dnsName:ClientVpnEndpoint' :: Maybe Text
dnsName = forall a. Maybe a
Prelude.Nothing,
      $sel:dnsServers:ClientVpnEndpoint' :: Maybe [Text]
dnsServers = forall a. Maybe a
Prelude.Nothing,
      $sel:securityGroupIds:ClientVpnEndpoint' :: Maybe [Text]
securityGroupIds = forall a. Maybe a
Prelude.Nothing,
      $sel:selfServicePortalUrl:ClientVpnEndpoint' :: Maybe Text
selfServicePortalUrl = forall a. Maybe a
Prelude.Nothing,
      $sel:serverCertificateArn:ClientVpnEndpoint' :: Maybe Text
serverCertificateArn = forall a. Maybe a
Prelude.Nothing,
      $sel:sessionTimeoutHours:ClientVpnEndpoint' :: Maybe Int
sessionTimeoutHours = forall a. Maybe a
Prelude.Nothing,
      $sel:splitTunnel:ClientVpnEndpoint' :: Maybe Bool
splitTunnel = forall a. Maybe a
Prelude.Nothing,
      $sel:status:ClientVpnEndpoint' :: Maybe ClientVpnEndpointStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:ClientVpnEndpoint' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:transportProtocol:ClientVpnEndpoint' :: Maybe TransportProtocol
transportProtocol = forall a. Maybe a
Prelude.Nothing,
      $sel:vpcId:ClientVpnEndpoint' :: Maybe Text
vpcId = forall a. Maybe a
Prelude.Nothing,
      $sel:vpnPort:ClientVpnEndpoint' :: Maybe Int
vpnPort = forall a. Maybe a
Prelude.Nothing,
      $sel:vpnProtocol:ClientVpnEndpoint' :: Maybe VpnProtocol
vpnProtocol = forall a. Maybe a
Prelude.Nothing
    }

-- | Information about the associated target networks. A target network is a
-- subnet in a VPC.
clientVpnEndpoint_associatedTargetNetworks :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [AssociatedTargetNetwork])
clientVpnEndpoint_associatedTargetNetworks :: Lens' ClientVpnEndpoint (Maybe [AssociatedTargetNetwork])
clientVpnEndpoint_associatedTargetNetworks = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe [AssociatedTargetNetwork]
associatedTargetNetworks :: Maybe [AssociatedTargetNetwork]
$sel:associatedTargetNetworks:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [AssociatedTargetNetwork]
associatedTargetNetworks} -> Maybe [AssociatedTargetNetwork]
associatedTargetNetworks) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe [AssociatedTargetNetwork]
a -> ClientVpnEndpoint
s {$sel:associatedTargetNetworks:ClientVpnEndpoint' :: Maybe [AssociatedTargetNetwork]
associatedTargetNetworks = Maybe [AssociatedTargetNetwork]
a} :: ClientVpnEndpoint) 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

-- | Information about the authentication method used by the Client VPN
-- endpoint.
clientVpnEndpoint_authenticationOptions :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [ClientVpnAuthentication])
clientVpnEndpoint_authenticationOptions :: Lens' ClientVpnEndpoint (Maybe [ClientVpnAuthentication])
clientVpnEndpoint_authenticationOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe [ClientVpnAuthentication]
authenticationOptions :: Maybe [ClientVpnAuthentication]
$sel:authenticationOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [ClientVpnAuthentication]
authenticationOptions} -> Maybe [ClientVpnAuthentication]
authenticationOptions) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe [ClientVpnAuthentication]
a -> ClientVpnEndpoint
s {$sel:authenticationOptions:ClientVpnEndpoint' :: Maybe [ClientVpnAuthentication]
authenticationOptions = Maybe [ClientVpnAuthentication]
a} :: ClientVpnEndpoint) 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 IPv4 address range, in CIDR notation, from which client IP addresses
-- are assigned.
clientVpnEndpoint_clientCidrBlock :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_clientCidrBlock :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_clientCidrBlock = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
clientCidrBlock :: Maybe Text
$sel:clientCidrBlock:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
clientCidrBlock} -> Maybe Text
clientCidrBlock) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:clientCidrBlock:ClientVpnEndpoint' :: Maybe Text
clientCidrBlock = Maybe Text
a} :: ClientVpnEndpoint)

-- | The options for managing connection authorization for new client
-- connections.
clientVpnEndpoint_clientConnectOptions :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe ClientConnectResponseOptions)
clientVpnEndpoint_clientConnectOptions :: Lens' ClientVpnEndpoint (Maybe ClientConnectResponseOptions)
clientVpnEndpoint_clientConnectOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe ClientConnectResponseOptions
clientConnectOptions :: Maybe ClientConnectResponseOptions
$sel:clientConnectOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientConnectResponseOptions
clientConnectOptions} -> Maybe ClientConnectResponseOptions
clientConnectOptions) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe ClientConnectResponseOptions
a -> ClientVpnEndpoint
s {$sel:clientConnectOptions:ClientVpnEndpoint' :: Maybe ClientConnectResponseOptions
clientConnectOptions = Maybe ClientConnectResponseOptions
a} :: ClientVpnEndpoint)

-- | Options for enabling a customizable text banner that will be displayed
-- on Amazon Web Services provided clients when a VPN session is
-- established.
clientVpnEndpoint_clientLoginBannerOptions :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe ClientLoginBannerResponseOptions)
clientVpnEndpoint_clientLoginBannerOptions :: Lens' ClientVpnEndpoint (Maybe ClientLoginBannerResponseOptions)
clientVpnEndpoint_clientLoginBannerOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe ClientLoginBannerResponseOptions
clientLoginBannerOptions :: Maybe ClientLoginBannerResponseOptions
$sel:clientLoginBannerOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientLoginBannerResponseOptions
clientLoginBannerOptions} -> Maybe ClientLoginBannerResponseOptions
clientLoginBannerOptions) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe ClientLoginBannerResponseOptions
a -> ClientVpnEndpoint
s {$sel:clientLoginBannerOptions:ClientVpnEndpoint' :: Maybe ClientLoginBannerResponseOptions
clientLoginBannerOptions = Maybe ClientLoginBannerResponseOptions
a} :: ClientVpnEndpoint)

-- | The ID of the Client VPN endpoint.
clientVpnEndpoint_clientVpnEndpointId :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_clientVpnEndpointId :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_clientVpnEndpointId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
clientVpnEndpointId :: Maybe Text
$sel:clientVpnEndpointId:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
clientVpnEndpointId} -> Maybe Text
clientVpnEndpointId) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:clientVpnEndpointId:ClientVpnEndpoint' :: Maybe Text
clientVpnEndpointId = Maybe Text
a} :: ClientVpnEndpoint)

-- | Information about the client connection logging options for the Client
-- VPN endpoint.
clientVpnEndpoint_connectionLogOptions :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe ConnectionLogResponseOptions)
clientVpnEndpoint_connectionLogOptions :: Lens' ClientVpnEndpoint (Maybe ConnectionLogResponseOptions)
clientVpnEndpoint_connectionLogOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe ConnectionLogResponseOptions
connectionLogOptions :: Maybe ConnectionLogResponseOptions
$sel:connectionLogOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ConnectionLogResponseOptions
connectionLogOptions} -> Maybe ConnectionLogResponseOptions
connectionLogOptions) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe ConnectionLogResponseOptions
a -> ClientVpnEndpoint
s {$sel:connectionLogOptions:ClientVpnEndpoint' :: Maybe ConnectionLogResponseOptions
connectionLogOptions = Maybe ConnectionLogResponseOptions
a} :: ClientVpnEndpoint)

-- | The date and time the Client VPN endpoint was created.
clientVpnEndpoint_creationTime :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_creationTime :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
creationTime :: Maybe Text
$sel:creationTime:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
creationTime} -> Maybe Text
creationTime) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:creationTime:ClientVpnEndpoint' :: Maybe Text
creationTime = Maybe Text
a} :: ClientVpnEndpoint)

-- | The date and time the Client VPN endpoint was deleted, if applicable.
clientVpnEndpoint_deletionTime :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_deletionTime :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_deletionTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
deletionTime :: Maybe Text
$sel:deletionTime:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
deletionTime} -> Maybe Text
deletionTime) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:deletionTime:ClientVpnEndpoint' :: Maybe Text
deletionTime = Maybe Text
a} :: ClientVpnEndpoint)

-- | A brief description of the endpoint.
clientVpnEndpoint_description :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_description :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
description :: Maybe Text
$sel:description:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
description} -> Maybe Text
description) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:description:ClientVpnEndpoint' :: Maybe Text
description = Maybe Text
a} :: ClientVpnEndpoint)

-- | The DNS name to be used by clients when connecting to the Client VPN
-- endpoint.
clientVpnEndpoint_dnsName :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_dnsName :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_dnsName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
dnsName :: Maybe Text
$sel:dnsName:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
dnsName} -> Maybe Text
dnsName) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:dnsName:ClientVpnEndpoint' :: Maybe Text
dnsName = Maybe Text
a} :: ClientVpnEndpoint)

-- | Information about the DNS servers to be used for DNS resolution.
clientVpnEndpoint_dnsServers :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [Prelude.Text])
clientVpnEndpoint_dnsServers :: Lens' ClientVpnEndpoint (Maybe [Text])
clientVpnEndpoint_dnsServers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe [Text]
dnsServers :: Maybe [Text]
$sel:dnsServers:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Text]
dnsServers} -> Maybe [Text]
dnsServers) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe [Text]
a -> ClientVpnEndpoint
s {$sel:dnsServers:ClientVpnEndpoint' :: Maybe [Text]
dnsServers = Maybe [Text]
a} :: ClientVpnEndpoint) 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 IDs of the security groups for the target network.
clientVpnEndpoint_securityGroupIds :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [Prelude.Text])
clientVpnEndpoint_securityGroupIds :: Lens' ClientVpnEndpoint (Maybe [Text])
clientVpnEndpoint_securityGroupIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe [Text]
securityGroupIds :: Maybe [Text]
$sel:securityGroupIds:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Text]
securityGroupIds} -> Maybe [Text]
securityGroupIds) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe [Text]
a -> ClientVpnEndpoint
s {$sel:securityGroupIds:ClientVpnEndpoint' :: Maybe [Text]
securityGroupIds = Maybe [Text]
a} :: ClientVpnEndpoint) 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 URL of the self-service portal.
clientVpnEndpoint_selfServicePortalUrl :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_selfServicePortalUrl :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_selfServicePortalUrl = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
selfServicePortalUrl :: Maybe Text
$sel:selfServicePortalUrl:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
selfServicePortalUrl} -> Maybe Text
selfServicePortalUrl) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:selfServicePortalUrl:ClientVpnEndpoint' :: Maybe Text
selfServicePortalUrl = Maybe Text
a} :: ClientVpnEndpoint)

-- | The ARN of the server certificate.
clientVpnEndpoint_serverCertificateArn :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_serverCertificateArn :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_serverCertificateArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
serverCertificateArn :: Maybe Text
$sel:serverCertificateArn:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
serverCertificateArn} -> Maybe Text
serverCertificateArn) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:serverCertificateArn:ClientVpnEndpoint' :: Maybe Text
serverCertificateArn = Maybe Text
a} :: ClientVpnEndpoint)

-- | The maximum VPN session duration time in hours.
--
-- Valid values: @8 | 10 | 12 | 24@
--
-- Default value: @24@
clientVpnEndpoint_sessionTimeoutHours :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Int)
clientVpnEndpoint_sessionTimeoutHours :: Lens' ClientVpnEndpoint (Maybe Int)
clientVpnEndpoint_sessionTimeoutHours = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Int
sessionTimeoutHours :: Maybe Int
$sel:sessionTimeoutHours:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Int
sessionTimeoutHours} -> Maybe Int
sessionTimeoutHours) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Int
a -> ClientVpnEndpoint
s {$sel:sessionTimeoutHours:ClientVpnEndpoint' :: Maybe Int
sessionTimeoutHours = Maybe Int
a} :: ClientVpnEndpoint)

-- | Indicates whether split-tunnel is enabled in the Client VPN endpoint.
--
-- For information about split-tunnel VPN endpoints, see
-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-Tunnel Client VPN endpoint>
-- in the /Client VPN Administrator Guide/.
clientVpnEndpoint_splitTunnel :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Bool)
clientVpnEndpoint_splitTunnel :: Lens' ClientVpnEndpoint (Maybe Bool)
clientVpnEndpoint_splitTunnel = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Bool
splitTunnel :: Maybe Bool
$sel:splitTunnel:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Bool
splitTunnel} -> Maybe Bool
splitTunnel) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Bool
a -> ClientVpnEndpoint
s {$sel:splitTunnel:ClientVpnEndpoint' :: Maybe Bool
splitTunnel = Maybe Bool
a} :: ClientVpnEndpoint)

-- | The current state of the Client VPN endpoint.
clientVpnEndpoint_status :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe ClientVpnEndpointStatus)
clientVpnEndpoint_status :: Lens' ClientVpnEndpoint (Maybe ClientVpnEndpointStatus)
clientVpnEndpoint_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe ClientVpnEndpointStatus
status :: Maybe ClientVpnEndpointStatus
$sel:status:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientVpnEndpointStatus
status} -> Maybe ClientVpnEndpointStatus
status) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe ClientVpnEndpointStatus
a -> ClientVpnEndpoint
s {$sel:status:ClientVpnEndpoint' :: Maybe ClientVpnEndpointStatus
status = Maybe ClientVpnEndpointStatus
a} :: ClientVpnEndpoint)

-- | Any tags assigned to the Client VPN endpoint.
clientVpnEndpoint_tags :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [Tag])
clientVpnEndpoint_tags :: Lens' ClientVpnEndpoint (Maybe [Tag])
clientVpnEndpoint_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe [Tag]
a -> ClientVpnEndpoint
s {$sel:tags:ClientVpnEndpoint' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: ClientVpnEndpoint) 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 transport protocol used by the Client VPN endpoint.
clientVpnEndpoint_transportProtocol :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe TransportProtocol)
clientVpnEndpoint_transportProtocol :: Lens' ClientVpnEndpoint (Maybe TransportProtocol)
clientVpnEndpoint_transportProtocol = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe TransportProtocol
transportProtocol :: Maybe TransportProtocol
$sel:transportProtocol:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe TransportProtocol
transportProtocol} -> Maybe TransportProtocol
transportProtocol) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe TransportProtocol
a -> ClientVpnEndpoint
s {$sel:transportProtocol:ClientVpnEndpoint' :: Maybe TransportProtocol
transportProtocol = Maybe TransportProtocol
a} :: ClientVpnEndpoint)

-- | The ID of the VPC.
clientVpnEndpoint_vpcId :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
clientVpnEndpoint_vpcId :: Lens' ClientVpnEndpoint (Maybe Text)
clientVpnEndpoint_vpcId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Text
vpcId :: Maybe Text
$sel:vpcId:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
vpcId} -> Maybe Text
vpcId) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Text
a -> ClientVpnEndpoint
s {$sel:vpcId:ClientVpnEndpoint' :: Maybe Text
vpcId = Maybe Text
a} :: ClientVpnEndpoint)

-- | The port number for the Client VPN endpoint.
clientVpnEndpoint_vpnPort :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Int)
clientVpnEndpoint_vpnPort :: Lens' ClientVpnEndpoint (Maybe Int)
clientVpnEndpoint_vpnPort = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe Int
vpnPort :: Maybe Int
$sel:vpnPort:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Int
vpnPort} -> Maybe Int
vpnPort) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe Int
a -> ClientVpnEndpoint
s {$sel:vpnPort:ClientVpnEndpoint' :: Maybe Int
vpnPort = Maybe Int
a} :: ClientVpnEndpoint)

-- | The protocol used by the VPN session.
clientVpnEndpoint_vpnProtocol :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe VpnProtocol)
clientVpnEndpoint_vpnProtocol :: Lens' ClientVpnEndpoint (Maybe VpnProtocol)
clientVpnEndpoint_vpnProtocol = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ClientVpnEndpoint' {Maybe VpnProtocol
vpnProtocol :: Maybe VpnProtocol
$sel:vpnProtocol:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe VpnProtocol
vpnProtocol} -> Maybe VpnProtocol
vpnProtocol) (\s :: ClientVpnEndpoint
s@ClientVpnEndpoint' {} Maybe VpnProtocol
a -> ClientVpnEndpoint
s {$sel:vpnProtocol:ClientVpnEndpoint' :: Maybe VpnProtocol
vpnProtocol = Maybe VpnProtocol
a} :: ClientVpnEndpoint)

instance Data.FromXML ClientVpnEndpoint where
  parseXML :: [Node] -> Either String ClientVpnEndpoint
parseXML [Node]
x =
    Maybe [AssociatedTargetNetwork]
-> Maybe [ClientVpnAuthentication]
-> Maybe Text
-> Maybe ClientConnectResponseOptions
-> Maybe ClientLoginBannerResponseOptions
-> Maybe Text
-> Maybe ConnectionLogResponseOptions
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe [Text]
-> Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe Int
-> Maybe Bool
-> Maybe ClientVpnEndpointStatus
-> Maybe [Tag]
-> Maybe TransportProtocol
-> Maybe Text
-> Maybe Int
-> Maybe VpnProtocol
-> ClientVpnEndpoint
ClientVpnEndpoint'
      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
"associatedTargetNetwork"
                      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")
                  )
      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
"authenticationOptions"
                      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")
                  )
      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
"clientCidrBlock")
      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
"clientConnectOptions")
      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
"clientLoginBannerOptions")
      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
"clientVpnEndpointId")
      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
"connectionLogOptions")
      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
"creationTime")
      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
"deletionTime")
      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
"dnsName")
      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
"dnsServer"
                      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")
                  )
      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
"securityGroupIdSet"
                      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")
                  )
      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
"selfServicePortalUrl")
      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
"serverCertificateArn")
      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
"sessionTimeoutHours")
      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
"splitTunnel")
      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
"status")
      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")
                  )
      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
"transportProtocol")
      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
"vpcId")
      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
"vpnPort")
      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
"vpnProtocol")

instance Prelude.Hashable ClientVpnEndpoint where
  hashWithSalt :: Int -> ClientVpnEndpoint -> Int
hashWithSalt Int
_salt ClientVpnEndpoint' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [AssociatedTargetNetwork]
Maybe [ClientVpnAuthentication]
Maybe [Tag]
Maybe Text
Maybe ClientLoginBannerResponseOptions
Maybe ClientConnectResponseOptions
Maybe ClientVpnEndpointStatus
Maybe ConnectionLogResponseOptions
Maybe TransportProtocol
Maybe VpnProtocol
vpnProtocol :: Maybe VpnProtocol
vpnPort :: Maybe Int
vpcId :: Maybe Text
transportProtocol :: Maybe TransportProtocol
tags :: Maybe [Tag]
status :: Maybe ClientVpnEndpointStatus
splitTunnel :: Maybe Bool
sessionTimeoutHours :: Maybe Int
serverCertificateArn :: Maybe Text
selfServicePortalUrl :: Maybe Text
securityGroupIds :: Maybe [Text]
dnsServers :: Maybe [Text]
dnsName :: Maybe Text
description :: Maybe Text
deletionTime :: Maybe Text
creationTime :: Maybe Text
connectionLogOptions :: Maybe ConnectionLogResponseOptions
clientVpnEndpointId :: Maybe Text
clientLoginBannerOptions :: Maybe ClientLoginBannerResponseOptions
clientConnectOptions :: Maybe ClientConnectResponseOptions
clientCidrBlock :: Maybe Text
authenticationOptions :: Maybe [ClientVpnAuthentication]
associatedTargetNetworks :: Maybe [AssociatedTargetNetwork]
$sel:vpnProtocol:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe VpnProtocol
$sel:vpnPort:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Int
$sel:vpcId:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:transportProtocol:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe TransportProtocol
$sel:tags:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Tag]
$sel:status:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientVpnEndpointStatus
$sel:splitTunnel:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Bool
$sel:sessionTimeoutHours:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Int
$sel:serverCertificateArn:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:selfServicePortalUrl:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:securityGroupIds:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Text]
$sel:dnsServers:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Text]
$sel:dnsName:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:description:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:deletionTime:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:creationTime:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:connectionLogOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ConnectionLogResponseOptions
$sel:clientVpnEndpointId:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:clientLoginBannerOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientLoginBannerResponseOptions
$sel:clientConnectOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientConnectResponseOptions
$sel:clientCidrBlock:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:authenticationOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [ClientVpnAuthentication]
$sel:associatedTargetNetworks:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [AssociatedTargetNetwork]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AssociatedTargetNetwork]
associatedTargetNetworks
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [ClientVpnAuthentication]
authenticationOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientCidrBlock
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ClientConnectResponseOptions
clientConnectOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ClientLoginBannerResponseOptions
clientLoginBannerOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientVpnEndpointId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ConnectionLogResponseOptions
connectionLogOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
creationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
deletionTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
dnsName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
dnsServers
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
securityGroupIds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
selfServicePortalUrl
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
serverCertificateArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
sessionTimeoutHours
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
splitTunnel
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ClientVpnEndpointStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TransportProtocol
transportProtocol
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
vpcId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
vpnPort
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VpnProtocol
vpnProtocol

instance Prelude.NFData ClientVpnEndpoint where
  rnf :: ClientVpnEndpoint -> ()
rnf ClientVpnEndpoint' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [AssociatedTargetNetwork]
Maybe [ClientVpnAuthentication]
Maybe [Tag]
Maybe Text
Maybe ClientLoginBannerResponseOptions
Maybe ClientConnectResponseOptions
Maybe ClientVpnEndpointStatus
Maybe ConnectionLogResponseOptions
Maybe TransportProtocol
Maybe VpnProtocol
vpnProtocol :: Maybe VpnProtocol
vpnPort :: Maybe Int
vpcId :: Maybe Text
transportProtocol :: Maybe TransportProtocol
tags :: Maybe [Tag]
status :: Maybe ClientVpnEndpointStatus
splitTunnel :: Maybe Bool
sessionTimeoutHours :: Maybe Int
serverCertificateArn :: Maybe Text
selfServicePortalUrl :: Maybe Text
securityGroupIds :: Maybe [Text]
dnsServers :: Maybe [Text]
dnsName :: Maybe Text
description :: Maybe Text
deletionTime :: Maybe Text
creationTime :: Maybe Text
connectionLogOptions :: Maybe ConnectionLogResponseOptions
clientVpnEndpointId :: Maybe Text
clientLoginBannerOptions :: Maybe ClientLoginBannerResponseOptions
clientConnectOptions :: Maybe ClientConnectResponseOptions
clientCidrBlock :: Maybe Text
authenticationOptions :: Maybe [ClientVpnAuthentication]
associatedTargetNetworks :: Maybe [AssociatedTargetNetwork]
$sel:vpnProtocol:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe VpnProtocol
$sel:vpnPort:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Int
$sel:vpcId:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:transportProtocol:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe TransportProtocol
$sel:tags:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Tag]
$sel:status:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientVpnEndpointStatus
$sel:splitTunnel:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Bool
$sel:sessionTimeoutHours:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Int
$sel:serverCertificateArn:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:selfServicePortalUrl:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:securityGroupIds:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Text]
$sel:dnsServers:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [Text]
$sel:dnsName:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:description:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:deletionTime:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:creationTime:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:connectionLogOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ConnectionLogResponseOptions
$sel:clientVpnEndpointId:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:clientLoginBannerOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientLoginBannerResponseOptions
$sel:clientConnectOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe ClientConnectResponseOptions
$sel:clientCidrBlock:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe Text
$sel:authenticationOptions:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [ClientVpnAuthentication]
$sel:associatedTargetNetworks:ClientVpnEndpoint' :: ClientVpnEndpoint -> Maybe [AssociatedTargetNetwork]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AssociatedTargetNetwork]
associatedTargetNetworks
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [ClientVpnAuthentication]
authenticationOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientCidrBlock
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ClientConnectResponseOptions
clientConnectOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ClientLoginBannerResponseOptions
clientLoginBannerOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientVpnEndpointId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ConnectionLogResponseOptions
connectionLogOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
creationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
deletionTime
      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
dnsName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
dnsServers
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
securityGroupIds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
selfServicePortalUrl
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
serverCertificateArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
sessionTimeoutHours
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
splitTunnel
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ClientVpnEndpointStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TransportProtocol
transportProtocol
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
vpcId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
vpnPort
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VpnProtocol
vpnProtocol