{-# 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.VpnConnectionOptionsSpecification
-- 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.VpnConnectionOptionsSpecification 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.TunnelInsideIpVersion
import Amazonka.EC2.Types.VpnTunnelOptionsSpecification
import qualified Amazonka.Prelude as Prelude

-- | Describes VPN connection options.
--
-- /See:/ 'newVpnConnectionOptionsSpecification' smart constructor.
data VpnConnectionOptionsSpecification = VpnConnectionOptionsSpecification'
  { -- | Indicate whether to enable acceleration for the VPN connection.
    --
    -- Default: @false@
    VpnConnectionOptionsSpecification -> Maybe Bool
enableAcceleration :: Prelude.Maybe Prelude.Bool,
    -- | The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
    -- connection.
    --
    -- Default: @0.0.0.0\/0@
    VpnConnectionOptionsSpecification -> Maybe Text
localIpv4NetworkCidr :: Prelude.Maybe Prelude.Text,
    -- | The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
    -- connection.
    --
    -- Default: @::\/0@
    VpnConnectionOptionsSpecification -> Maybe Text
localIpv6NetworkCidr :: Prelude.Maybe Prelude.Text,
    -- | The type of IPv4 address assigned to the outside interface of the
    -- customer gateway device.
    --
    -- Valid values: @PrivateIpv4@ | @PublicIpv4@
    --
    -- Default: @PublicIpv4@
    VpnConnectionOptionsSpecification -> Maybe Text
outsideIpAddressType :: Prelude.Maybe Prelude.Text,
    -- | The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
    --
    -- Default: @0.0.0.0\/0@
    VpnConnectionOptionsSpecification -> Maybe Text
remoteIpv4NetworkCidr :: Prelude.Maybe Prelude.Text,
    -- | The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
    --
    -- Default: @::\/0@
    VpnConnectionOptionsSpecification -> Maybe Text
remoteIpv6NetworkCidr :: Prelude.Maybe Prelude.Text,
    -- | Indicate whether the VPN connection uses static routes only. If you are
    -- creating a VPN connection for a device that does not support BGP, you
    -- must specify @true@. Use CreateVpnConnectionRoute to create a static
    -- route.
    --
    -- Default: @false@
    VpnConnectionOptionsSpecification -> Maybe Bool
staticRoutesOnly :: Prelude.Maybe Prelude.Bool,
    -- | The transit gateway attachment ID to use for the VPN tunnel.
    --
    -- Required if @OutsideIpAddressType@ is set to @PrivateIpv4@.
    VpnConnectionOptionsSpecification -> Maybe Text
transportTransitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
    -- | Indicate whether the VPN tunnels process IPv4 or IPv6 traffic.
    --
    -- Default: @ipv4@
    VpnConnectionOptionsSpecification -> Maybe TunnelInsideIpVersion
tunnelInsideIpVersion :: Prelude.Maybe TunnelInsideIpVersion,
    -- | The tunnel options for the VPN connection.
    VpnConnectionOptionsSpecification
-> Maybe [VpnTunnelOptionsSpecification]
tunnelOptions :: Prelude.Maybe [VpnTunnelOptionsSpecification]
  }
  deriving (VpnConnectionOptionsSpecification
-> VpnConnectionOptionsSpecification -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VpnConnectionOptionsSpecification
-> VpnConnectionOptionsSpecification -> Bool
$c/= :: VpnConnectionOptionsSpecification
-> VpnConnectionOptionsSpecification -> Bool
== :: VpnConnectionOptionsSpecification
-> VpnConnectionOptionsSpecification -> Bool
$c== :: VpnConnectionOptionsSpecification
-> VpnConnectionOptionsSpecification -> Bool
Prelude.Eq, ReadPrec [VpnConnectionOptionsSpecification]
ReadPrec VpnConnectionOptionsSpecification
Int -> ReadS VpnConnectionOptionsSpecification
ReadS [VpnConnectionOptionsSpecification]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [VpnConnectionOptionsSpecification]
$creadListPrec :: ReadPrec [VpnConnectionOptionsSpecification]
readPrec :: ReadPrec VpnConnectionOptionsSpecification
$creadPrec :: ReadPrec VpnConnectionOptionsSpecification
readList :: ReadS [VpnConnectionOptionsSpecification]
$creadList :: ReadS [VpnConnectionOptionsSpecification]
readsPrec :: Int -> ReadS VpnConnectionOptionsSpecification
$creadsPrec :: Int -> ReadS VpnConnectionOptionsSpecification
Prelude.Read, Int -> VpnConnectionOptionsSpecification -> ShowS
[VpnConnectionOptionsSpecification] -> ShowS
VpnConnectionOptionsSpecification -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VpnConnectionOptionsSpecification] -> ShowS
$cshowList :: [VpnConnectionOptionsSpecification] -> ShowS
show :: VpnConnectionOptionsSpecification -> String
$cshow :: VpnConnectionOptionsSpecification -> String
showsPrec :: Int -> VpnConnectionOptionsSpecification -> ShowS
$cshowsPrec :: Int -> VpnConnectionOptionsSpecification -> ShowS
Prelude.Show, forall x.
Rep VpnConnectionOptionsSpecification x
-> VpnConnectionOptionsSpecification
forall x.
VpnConnectionOptionsSpecification
-> Rep VpnConnectionOptionsSpecification x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep VpnConnectionOptionsSpecification x
-> VpnConnectionOptionsSpecification
$cfrom :: forall x.
VpnConnectionOptionsSpecification
-> Rep VpnConnectionOptionsSpecification x
Prelude.Generic)

-- |
-- Create a value of 'VpnConnectionOptionsSpecification' 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:
--
-- 'enableAcceleration', 'vpnConnectionOptionsSpecification_enableAcceleration' - Indicate whether to enable acceleration for the VPN connection.
--
-- Default: @false@
--
-- 'localIpv4NetworkCidr', 'vpnConnectionOptionsSpecification_localIpv4NetworkCidr' - The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
-- connection.
--
-- Default: @0.0.0.0\/0@
--
-- 'localIpv6NetworkCidr', 'vpnConnectionOptionsSpecification_localIpv6NetworkCidr' - The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
-- connection.
--
-- Default: @::\/0@
--
-- 'outsideIpAddressType', 'vpnConnectionOptionsSpecification_outsideIpAddressType' - The type of IPv4 address assigned to the outside interface of the
-- customer gateway device.
--
-- Valid values: @PrivateIpv4@ | @PublicIpv4@
--
-- Default: @PublicIpv4@
--
-- 'remoteIpv4NetworkCidr', 'vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr' - The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
--
-- Default: @0.0.0.0\/0@
--
-- 'remoteIpv6NetworkCidr', 'vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr' - The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
--
-- Default: @::\/0@
--
-- 'staticRoutesOnly', 'vpnConnectionOptionsSpecification_staticRoutesOnly' - Indicate whether the VPN connection uses static routes only. If you are
-- creating a VPN connection for a device that does not support BGP, you
-- must specify @true@. Use CreateVpnConnectionRoute to create a static
-- route.
--
-- Default: @false@
--
-- 'transportTransitGatewayAttachmentId', 'vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId' - The transit gateway attachment ID to use for the VPN tunnel.
--
-- Required if @OutsideIpAddressType@ is set to @PrivateIpv4@.
--
-- 'tunnelInsideIpVersion', 'vpnConnectionOptionsSpecification_tunnelInsideIpVersion' - Indicate whether the VPN tunnels process IPv4 or IPv6 traffic.
--
-- Default: @ipv4@
--
-- 'tunnelOptions', 'vpnConnectionOptionsSpecification_tunnelOptions' - The tunnel options for the VPN connection.
newVpnConnectionOptionsSpecification ::
  VpnConnectionOptionsSpecification
newVpnConnectionOptionsSpecification :: VpnConnectionOptionsSpecification
newVpnConnectionOptionsSpecification =
  VpnConnectionOptionsSpecification'
    { $sel:enableAcceleration:VpnConnectionOptionsSpecification' :: Maybe Bool
enableAcceleration =
        forall a. Maybe a
Prelude.Nothing,
      $sel:localIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: Maybe Text
localIpv4NetworkCidr = forall a. Maybe a
Prelude.Nothing,
      $sel:localIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: Maybe Text
localIpv6NetworkCidr = forall a. Maybe a
Prelude.Nothing,
      $sel:outsideIpAddressType:VpnConnectionOptionsSpecification' :: Maybe Text
outsideIpAddressType = forall a. Maybe a
Prelude.Nothing,
      $sel:remoteIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: Maybe Text
remoteIpv4NetworkCidr = forall a. Maybe a
Prelude.Nothing,
      $sel:remoteIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: Maybe Text
remoteIpv6NetworkCidr = forall a. Maybe a
Prelude.Nothing,
      $sel:staticRoutesOnly:VpnConnectionOptionsSpecification' :: Maybe Bool
staticRoutesOnly = forall a. Maybe a
Prelude.Nothing,
      $sel:transportTransitGatewayAttachmentId:VpnConnectionOptionsSpecification' :: Maybe Text
transportTransitGatewayAttachmentId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:tunnelInsideIpVersion:VpnConnectionOptionsSpecification' :: Maybe TunnelInsideIpVersion
tunnelInsideIpVersion = forall a. Maybe a
Prelude.Nothing,
      $sel:tunnelOptions:VpnConnectionOptionsSpecification' :: Maybe [VpnTunnelOptionsSpecification]
tunnelOptions = forall a. Maybe a
Prelude.Nothing
    }

-- | Indicate whether to enable acceleration for the VPN connection.
--
-- Default: @false@
vpnConnectionOptionsSpecification_enableAcceleration :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Bool)
vpnConnectionOptionsSpecification_enableAcceleration :: Lens' VpnConnectionOptionsSpecification (Maybe Bool)
vpnConnectionOptionsSpecification_enableAcceleration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe Bool
enableAcceleration :: Maybe Bool
$sel:enableAcceleration:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Bool
enableAcceleration} -> Maybe Bool
enableAcceleration) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe Bool
a -> VpnConnectionOptionsSpecification
s {$sel:enableAcceleration:VpnConnectionOptionsSpecification' :: Maybe Bool
enableAcceleration = Maybe Bool
a} :: VpnConnectionOptionsSpecification)

-- | The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
-- connection.
--
-- Default: @0.0.0.0\/0@
vpnConnectionOptionsSpecification_localIpv4NetworkCidr :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
vpnConnectionOptionsSpecification_localIpv4NetworkCidr :: Lens' VpnConnectionOptionsSpecification (Maybe Text)
vpnConnectionOptionsSpecification_localIpv4NetworkCidr = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe Text
localIpv4NetworkCidr :: Maybe Text
$sel:localIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
localIpv4NetworkCidr} -> Maybe Text
localIpv4NetworkCidr) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe Text
a -> VpnConnectionOptionsSpecification
s {$sel:localIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: Maybe Text
localIpv4NetworkCidr = Maybe Text
a} :: VpnConnectionOptionsSpecification)

-- | The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
-- connection.
--
-- Default: @::\/0@
vpnConnectionOptionsSpecification_localIpv6NetworkCidr :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
vpnConnectionOptionsSpecification_localIpv6NetworkCidr :: Lens' VpnConnectionOptionsSpecification (Maybe Text)
vpnConnectionOptionsSpecification_localIpv6NetworkCidr = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe Text
localIpv6NetworkCidr :: Maybe Text
$sel:localIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
localIpv6NetworkCidr} -> Maybe Text
localIpv6NetworkCidr) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe Text
a -> VpnConnectionOptionsSpecification
s {$sel:localIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: Maybe Text
localIpv6NetworkCidr = Maybe Text
a} :: VpnConnectionOptionsSpecification)

-- | The type of IPv4 address assigned to the outside interface of the
-- customer gateway device.
--
-- Valid values: @PrivateIpv4@ | @PublicIpv4@
--
-- Default: @PublicIpv4@
vpnConnectionOptionsSpecification_outsideIpAddressType :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
vpnConnectionOptionsSpecification_outsideIpAddressType :: Lens' VpnConnectionOptionsSpecification (Maybe Text)
vpnConnectionOptionsSpecification_outsideIpAddressType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe Text
outsideIpAddressType :: Maybe Text
$sel:outsideIpAddressType:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
outsideIpAddressType} -> Maybe Text
outsideIpAddressType) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe Text
a -> VpnConnectionOptionsSpecification
s {$sel:outsideIpAddressType:VpnConnectionOptionsSpecification' :: Maybe Text
outsideIpAddressType = Maybe Text
a} :: VpnConnectionOptionsSpecification)

-- | The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
--
-- Default: @0.0.0.0\/0@
vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr :: Lens' VpnConnectionOptionsSpecification (Maybe Text)
vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe Text
remoteIpv4NetworkCidr :: Maybe Text
$sel:remoteIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
remoteIpv4NetworkCidr} -> Maybe Text
remoteIpv4NetworkCidr) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe Text
a -> VpnConnectionOptionsSpecification
s {$sel:remoteIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: Maybe Text
remoteIpv4NetworkCidr = Maybe Text
a} :: VpnConnectionOptionsSpecification)

-- | The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
--
-- Default: @::\/0@
vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr :: Lens' VpnConnectionOptionsSpecification (Maybe Text)
vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe Text
remoteIpv6NetworkCidr :: Maybe Text
$sel:remoteIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
remoteIpv6NetworkCidr} -> Maybe Text
remoteIpv6NetworkCidr) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe Text
a -> VpnConnectionOptionsSpecification
s {$sel:remoteIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: Maybe Text
remoteIpv6NetworkCidr = Maybe Text
a} :: VpnConnectionOptionsSpecification)

-- | Indicate whether the VPN connection uses static routes only. If you are
-- creating a VPN connection for a device that does not support BGP, you
-- must specify @true@. Use CreateVpnConnectionRoute to create a static
-- route.
--
-- Default: @false@
vpnConnectionOptionsSpecification_staticRoutesOnly :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Bool)
vpnConnectionOptionsSpecification_staticRoutesOnly :: Lens' VpnConnectionOptionsSpecification (Maybe Bool)
vpnConnectionOptionsSpecification_staticRoutesOnly = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe Bool
staticRoutesOnly :: Maybe Bool
$sel:staticRoutesOnly:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Bool
staticRoutesOnly} -> Maybe Bool
staticRoutesOnly) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe Bool
a -> VpnConnectionOptionsSpecification
s {$sel:staticRoutesOnly:VpnConnectionOptionsSpecification' :: Maybe Bool
staticRoutesOnly = Maybe Bool
a} :: VpnConnectionOptionsSpecification)

-- | The transit gateway attachment ID to use for the VPN tunnel.
--
-- Required if @OutsideIpAddressType@ is set to @PrivateIpv4@.
vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId :: Lens' VpnConnectionOptionsSpecification (Maybe Text)
vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe Text
transportTransitGatewayAttachmentId :: Maybe Text
$sel:transportTransitGatewayAttachmentId:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
transportTransitGatewayAttachmentId} -> Maybe Text
transportTransitGatewayAttachmentId) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe Text
a -> VpnConnectionOptionsSpecification
s {$sel:transportTransitGatewayAttachmentId:VpnConnectionOptionsSpecification' :: Maybe Text
transportTransitGatewayAttachmentId = Maybe Text
a} :: VpnConnectionOptionsSpecification)

-- | Indicate whether the VPN tunnels process IPv4 or IPv6 traffic.
--
-- Default: @ipv4@
vpnConnectionOptionsSpecification_tunnelInsideIpVersion :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe TunnelInsideIpVersion)
vpnConnectionOptionsSpecification_tunnelInsideIpVersion :: Lens'
  VpnConnectionOptionsSpecification (Maybe TunnelInsideIpVersion)
vpnConnectionOptionsSpecification_tunnelInsideIpVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe TunnelInsideIpVersion
tunnelInsideIpVersion :: Maybe TunnelInsideIpVersion
$sel:tunnelInsideIpVersion:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe TunnelInsideIpVersion
tunnelInsideIpVersion} -> Maybe TunnelInsideIpVersion
tunnelInsideIpVersion) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe TunnelInsideIpVersion
a -> VpnConnectionOptionsSpecification
s {$sel:tunnelInsideIpVersion:VpnConnectionOptionsSpecification' :: Maybe TunnelInsideIpVersion
tunnelInsideIpVersion = Maybe TunnelInsideIpVersion
a} :: VpnConnectionOptionsSpecification)

-- | The tunnel options for the VPN connection.
vpnConnectionOptionsSpecification_tunnelOptions :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe [VpnTunnelOptionsSpecification])
vpnConnectionOptionsSpecification_tunnelOptions :: Lens'
  VpnConnectionOptionsSpecification
  (Maybe [VpnTunnelOptionsSpecification])
vpnConnectionOptionsSpecification_tunnelOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VpnConnectionOptionsSpecification' {Maybe [VpnTunnelOptionsSpecification]
tunnelOptions :: Maybe [VpnTunnelOptionsSpecification]
$sel:tunnelOptions:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification
-> Maybe [VpnTunnelOptionsSpecification]
tunnelOptions} -> Maybe [VpnTunnelOptionsSpecification]
tunnelOptions) (\s :: VpnConnectionOptionsSpecification
s@VpnConnectionOptionsSpecification' {} Maybe [VpnTunnelOptionsSpecification]
a -> VpnConnectionOptionsSpecification
s {$sel:tunnelOptions:VpnConnectionOptionsSpecification' :: Maybe [VpnTunnelOptionsSpecification]
tunnelOptions = Maybe [VpnTunnelOptionsSpecification]
a} :: VpnConnectionOptionsSpecification) 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

instance
  Prelude.Hashable
    VpnConnectionOptionsSpecification
  where
  hashWithSalt :: Int -> VpnConnectionOptionsSpecification -> Int
hashWithSalt
    Int
_salt
    VpnConnectionOptionsSpecification' {Maybe Bool
Maybe [VpnTunnelOptionsSpecification]
Maybe Text
Maybe TunnelInsideIpVersion
tunnelOptions :: Maybe [VpnTunnelOptionsSpecification]
tunnelInsideIpVersion :: Maybe TunnelInsideIpVersion
transportTransitGatewayAttachmentId :: Maybe Text
staticRoutesOnly :: Maybe Bool
remoteIpv6NetworkCidr :: Maybe Text
remoteIpv4NetworkCidr :: Maybe Text
outsideIpAddressType :: Maybe Text
localIpv6NetworkCidr :: Maybe Text
localIpv4NetworkCidr :: Maybe Text
enableAcceleration :: Maybe Bool
$sel:tunnelOptions:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification
-> Maybe [VpnTunnelOptionsSpecification]
$sel:tunnelInsideIpVersion:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe TunnelInsideIpVersion
$sel:transportTransitGatewayAttachmentId:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:staticRoutesOnly:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Bool
$sel:remoteIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:remoteIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:outsideIpAddressType:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:localIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:localIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:enableAcceleration:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Bool
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
enableAcceleration
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
localIpv4NetworkCidr
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
localIpv6NetworkCidr
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
outsideIpAddressType
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
remoteIpv4NetworkCidr
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
remoteIpv6NetworkCidr
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
staticRoutesOnly
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transportTransitGatewayAttachmentId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TunnelInsideIpVersion
tunnelInsideIpVersion
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [VpnTunnelOptionsSpecification]
tunnelOptions

instance
  Prelude.NFData
    VpnConnectionOptionsSpecification
  where
  rnf :: VpnConnectionOptionsSpecification -> ()
rnf VpnConnectionOptionsSpecification' {Maybe Bool
Maybe [VpnTunnelOptionsSpecification]
Maybe Text
Maybe TunnelInsideIpVersion
tunnelOptions :: Maybe [VpnTunnelOptionsSpecification]
tunnelInsideIpVersion :: Maybe TunnelInsideIpVersion
transportTransitGatewayAttachmentId :: Maybe Text
staticRoutesOnly :: Maybe Bool
remoteIpv6NetworkCidr :: Maybe Text
remoteIpv4NetworkCidr :: Maybe Text
outsideIpAddressType :: Maybe Text
localIpv6NetworkCidr :: Maybe Text
localIpv4NetworkCidr :: Maybe Text
enableAcceleration :: Maybe Bool
$sel:tunnelOptions:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification
-> Maybe [VpnTunnelOptionsSpecification]
$sel:tunnelInsideIpVersion:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe TunnelInsideIpVersion
$sel:transportTransitGatewayAttachmentId:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:staticRoutesOnly:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Bool
$sel:remoteIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:remoteIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:outsideIpAddressType:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:localIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:localIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:enableAcceleration:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
enableAcceleration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
localIpv4NetworkCidr
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
localIpv6NetworkCidr
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
outsideIpAddressType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
remoteIpv4NetworkCidr
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
remoteIpv6NetworkCidr
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
staticRoutesOnly
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
transportTransitGatewayAttachmentId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TunnelInsideIpVersion
tunnelInsideIpVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [VpnTunnelOptionsSpecification]
tunnelOptions

instance
  Data.ToQuery
    VpnConnectionOptionsSpecification
  where
  toQuery :: VpnConnectionOptionsSpecification -> QueryString
toQuery VpnConnectionOptionsSpecification' {Maybe Bool
Maybe [VpnTunnelOptionsSpecification]
Maybe Text
Maybe TunnelInsideIpVersion
tunnelOptions :: Maybe [VpnTunnelOptionsSpecification]
tunnelInsideIpVersion :: Maybe TunnelInsideIpVersion
transportTransitGatewayAttachmentId :: Maybe Text
staticRoutesOnly :: Maybe Bool
remoteIpv6NetworkCidr :: Maybe Text
remoteIpv4NetworkCidr :: Maybe Text
outsideIpAddressType :: Maybe Text
localIpv6NetworkCidr :: Maybe Text
localIpv4NetworkCidr :: Maybe Text
enableAcceleration :: Maybe Bool
$sel:tunnelOptions:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification
-> Maybe [VpnTunnelOptionsSpecification]
$sel:tunnelInsideIpVersion:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe TunnelInsideIpVersion
$sel:transportTransitGatewayAttachmentId:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:staticRoutesOnly:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Bool
$sel:remoteIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:remoteIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:outsideIpAddressType:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:localIpv6NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:localIpv4NetworkCidr:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Text
$sel:enableAcceleration:VpnConnectionOptionsSpecification' :: VpnConnectionOptionsSpecification -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"EnableAcceleration" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
enableAcceleration,
        ByteString
"LocalIpv4NetworkCidr" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
localIpv4NetworkCidr,
        ByteString
"LocalIpv6NetworkCidr" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
localIpv6NetworkCidr,
        ByteString
"OutsideIpAddressType" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
outsideIpAddressType,
        ByteString
"RemoteIpv4NetworkCidr"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
remoteIpv4NetworkCidr,
        ByteString
"RemoteIpv6NetworkCidr"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
remoteIpv6NetworkCidr,
        ByteString
"StaticRoutesOnly" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
staticRoutesOnly,
        ByteString
"TransportTransitGatewayAttachmentId"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
transportTransitGatewayAttachmentId,
        ByteString
"TunnelInsideIpVersion"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe TunnelInsideIpVersion
tunnelInsideIpVersion,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"TunnelOptions"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [VpnTunnelOptionsSpecification]
tunnelOptions
          )
      ]