{-# 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.Lightsail.Types.PortInfo
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Lightsail.Types.PortInfo where

import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import Amazonka.Lightsail.Types.NetworkProtocol
import qualified Amazonka.Prelude as Prelude

-- | Describes ports to open on an instance, the IP addresses allowed to
-- connect to the instance through the ports, and the protocol.
--
-- /See:/ 'newPortInfo' smart constructor.
data PortInfo = PortInfo'
  { -- | The first port in a range of open ports on an instance.
    --
    -- Allowed ports:
    --
    -- -   TCP and UDP - @0@ to @65535@
    --
    -- -   ICMP - The ICMP type for IPv4 addresses. For example, specify @8@ as
    --     the @fromPort@ (ICMP type), and @-1@ as the @toPort@ (ICMP code), to
    --     enable ICMP Ping. For more information, see
    --     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages Control Messages>
    --     on /Wikipedia/.
    --
    -- -   ICMPv6 - The ICMP type for IPv6 addresses. For example, specify
    --     @128@ as the @fromPort@ (ICMPv6 type), and @0@ as @toPort@ (ICMPv6
    --     code). For more information, see
    --     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 Internet Control Message Protocol for IPv6>.
    PortInfo -> Maybe Int
fromPort :: Prelude.Maybe Prelude.Int,
    -- | The IPv4 address, or range of IPv4 addresses (in CIDR notation) that are
    -- allowed to connect to an instance through the ports, and the protocol.
    --
    -- The @ipv6Cidrs@ parameter lists the IPv6 addresses that are allowed to
    -- connect to an instance.
    --
    -- Examples:
    --
    -- -   To allow the IP address @192.0.2.44@, specify @192.0.2.44@ or
    --     @192.0.2.44\/32@.
    --
    -- -   To allow the IP addresses @192.0.2.0@ to @192.0.2.255@, specify
    --     @192.0.2.0\/24@.
    --
    -- For more information about CIDR block notation, see
    -- <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation Classless Inter-Domain Routing>
    -- on /Wikipedia/.
    PortInfo -> Maybe [Text]
cidrs :: Prelude.Maybe [Prelude.Text],
    -- | The IP protocol name.
    --
    -- The name can be one of the following:
    --
    -- -   @tcp@ - Transmission Control Protocol (TCP) provides reliable,
    --     ordered, and error-checked delivery of streamed data between
    --     applications running on hosts communicating by an IP network. If you
    --     have an application that doesn\'t require reliable data stream
    --     service, use UDP instead.
    --
    -- -   @all@ - All transport layer protocol types. For more general
    --     information, see
    --     <https://en.wikipedia.org/wiki/Transport_layer Transport layer> on
    --     /Wikipedia/.
    --
    -- -   @udp@ - With User Datagram Protocol (UDP), computer applications can
    --     send messages (or datagrams) to other hosts on an Internet Protocol
    --     (IP) network. Prior communications are not required to set up
    --     transmission channels or data paths. Applications that don\'t
    --     require reliable data stream service can use UDP, which provides a
    --     connectionless datagram service that emphasizes reduced latency over
    --     reliability. If you do require reliable data stream service, use TCP
    --     instead.
    --
    -- -   @icmp@ - Internet Control Message Protocol (ICMP) is used to send
    --     error messages and operational information indicating success or
    --     failure when communicating with an instance. For example, an error
    --     is indicated when an instance could not be reached. When you specify
    --     @icmp@ as the @protocol@, you must specify the ICMP type using the
    --     @fromPort@ parameter, and ICMP code using the @toPort@ parameter.
    PortInfo -> Maybe NetworkProtocol
protocol :: Prelude.Maybe NetworkProtocol,
    -- | An alias that defines access for a preconfigured range of IP addresses.
    --
    -- The only alias currently supported is @lightsail-connect@, which allows
    -- IP addresses of the browser-based RDP\/SSH client in the Lightsail
    -- console to connect to your instance.
    PortInfo -> Maybe [Text]
cidrListAliases :: Prelude.Maybe [Prelude.Text],
    -- | The IPv6 address, or range of IPv6 addresses (in CIDR notation) that are
    -- allowed to connect to an instance through the ports, and the protocol.
    -- Only devices with an IPv6 address can connect to an instance through
    -- IPv6; otherwise, IPv4 should be used.
    --
    -- The @cidrs@ parameter lists the IPv4 addresses that are allowed to
    -- connect to an instance.
    --
    -- For more information about CIDR block notation, see
    -- <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation Classless Inter-Domain Routing>
    -- on /Wikipedia/.
    PortInfo -> Maybe [Text]
ipv6Cidrs :: Prelude.Maybe [Prelude.Text],
    -- | The last port in a range of open ports on an instance.
    --
    -- Allowed ports:
    --
    -- -   TCP and UDP - @0@ to @65535@
    --
    -- -   ICMP - The ICMP code for IPv4 addresses. For example, specify @8@ as
    --     the @fromPort@ (ICMP type), and @-1@ as the @toPort@ (ICMP code), to
    --     enable ICMP Ping. For more information, see
    --     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages Control Messages>
    --     on /Wikipedia/.
    --
    -- -   ICMPv6 - The ICMP code for IPv6 addresses. For example, specify
    --     @128@ as the @fromPort@ (ICMPv6 type), and @0@ as @toPort@ (ICMPv6
    --     code). For more information, see
    --     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 Internet Control Message Protocol for IPv6>.
    PortInfo -> Maybe Int
toPort :: Prelude.Maybe Prelude.Int
  }
  deriving (PortInfo -> PortInfo -> Bool
(PortInfo -> PortInfo -> Bool)
-> (PortInfo -> PortInfo -> Bool) -> Eq PortInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PortInfo -> PortInfo -> Bool
$c/= :: PortInfo -> PortInfo -> Bool
== :: PortInfo -> PortInfo -> Bool
$c== :: PortInfo -> PortInfo -> Bool
Prelude.Eq, ReadPrec [PortInfo]
ReadPrec PortInfo
Int -> ReadS PortInfo
ReadS [PortInfo]
(Int -> ReadS PortInfo)
-> ReadS [PortInfo]
-> ReadPrec PortInfo
-> ReadPrec [PortInfo]
-> Read PortInfo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PortInfo]
$creadListPrec :: ReadPrec [PortInfo]
readPrec :: ReadPrec PortInfo
$creadPrec :: ReadPrec PortInfo
readList :: ReadS [PortInfo]
$creadList :: ReadS [PortInfo]
readsPrec :: Int -> ReadS PortInfo
$creadsPrec :: Int -> ReadS PortInfo
Prelude.Read, Int -> PortInfo -> ShowS
[PortInfo] -> ShowS
PortInfo -> String
(Int -> PortInfo -> ShowS)
-> (PortInfo -> String) -> ([PortInfo] -> ShowS) -> Show PortInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PortInfo] -> ShowS
$cshowList :: [PortInfo] -> ShowS
show :: PortInfo -> String
$cshow :: PortInfo -> String
showsPrec :: Int -> PortInfo -> ShowS
$cshowsPrec :: Int -> PortInfo -> ShowS
Prelude.Show, (forall x. PortInfo -> Rep PortInfo x)
-> (forall x. Rep PortInfo x -> PortInfo) -> Generic PortInfo
forall x. Rep PortInfo x -> PortInfo
forall x. PortInfo -> Rep PortInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PortInfo x -> PortInfo
$cfrom :: forall x. PortInfo -> Rep PortInfo x
Prelude.Generic)

-- |
-- Create a value of 'PortInfo' 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:
--
-- 'fromPort', 'portInfo_fromPort' - The first port in a range of open ports on an instance.
--
-- Allowed ports:
--
-- -   TCP and UDP - @0@ to @65535@
--
-- -   ICMP - The ICMP type for IPv4 addresses. For example, specify @8@ as
--     the @fromPort@ (ICMP type), and @-1@ as the @toPort@ (ICMP code), to
--     enable ICMP Ping. For more information, see
--     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages Control Messages>
--     on /Wikipedia/.
--
-- -   ICMPv6 - The ICMP type for IPv6 addresses. For example, specify
--     @128@ as the @fromPort@ (ICMPv6 type), and @0@ as @toPort@ (ICMPv6
--     code). For more information, see
--     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 Internet Control Message Protocol for IPv6>.
--
-- 'cidrs', 'portInfo_cidrs' - The IPv4 address, or range of IPv4 addresses (in CIDR notation) that are
-- allowed to connect to an instance through the ports, and the protocol.
--
-- The @ipv6Cidrs@ parameter lists the IPv6 addresses that are allowed to
-- connect to an instance.
--
-- Examples:
--
-- -   To allow the IP address @192.0.2.44@, specify @192.0.2.44@ or
--     @192.0.2.44\/32@.
--
-- -   To allow the IP addresses @192.0.2.0@ to @192.0.2.255@, specify
--     @192.0.2.0\/24@.
--
-- For more information about CIDR block notation, see
-- <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation Classless Inter-Domain Routing>
-- on /Wikipedia/.
--
-- 'protocol', 'portInfo_protocol' - The IP protocol name.
--
-- The name can be one of the following:
--
-- -   @tcp@ - Transmission Control Protocol (TCP) provides reliable,
--     ordered, and error-checked delivery of streamed data between
--     applications running on hosts communicating by an IP network. If you
--     have an application that doesn\'t require reliable data stream
--     service, use UDP instead.
--
-- -   @all@ - All transport layer protocol types. For more general
--     information, see
--     <https://en.wikipedia.org/wiki/Transport_layer Transport layer> on
--     /Wikipedia/.
--
-- -   @udp@ - With User Datagram Protocol (UDP), computer applications can
--     send messages (or datagrams) to other hosts on an Internet Protocol
--     (IP) network. Prior communications are not required to set up
--     transmission channels or data paths. Applications that don\'t
--     require reliable data stream service can use UDP, which provides a
--     connectionless datagram service that emphasizes reduced latency over
--     reliability. If you do require reliable data stream service, use TCP
--     instead.
--
-- -   @icmp@ - Internet Control Message Protocol (ICMP) is used to send
--     error messages and operational information indicating success or
--     failure when communicating with an instance. For example, an error
--     is indicated when an instance could not be reached. When you specify
--     @icmp@ as the @protocol@, you must specify the ICMP type using the
--     @fromPort@ parameter, and ICMP code using the @toPort@ parameter.
--
-- 'cidrListAliases', 'portInfo_cidrListAliases' - An alias that defines access for a preconfigured range of IP addresses.
--
-- The only alias currently supported is @lightsail-connect@, which allows
-- IP addresses of the browser-based RDP\/SSH client in the Lightsail
-- console to connect to your instance.
--
-- 'ipv6Cidrs', 'portInfo_ipv6Cidrs' - The IPv6 address, or range of IPv6 addresses (in CIDR notation) that are
-- allowed to connect to an instance through the ports, and the protocol.
-- Only devices with an IPv6 address can connect to an instance through
-- IPv6; otherwise, IPv4 should be used.
--
-- The @cidrs@ parameter lists the IPv4 addresses that are allowed to
-- connect to an instance.
--
-- For more information about CIDR block notation, see
-- <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation Classless Inter-Domain Routing>
-- on /Wikipedia/.
--
-- 'toPort', 'portInfo_toPort' - The last port in a range of open ports on an instance.
--
-- Allowed ports:
--
-- -   TCP and UDP - @0@ to @65535@
--
-- -   ICMP - The ICMP code for IPv4 addresses. For example, specify @8@ as
--     the @fromPort@ (ICMP type), and @-1@ as the @toPort@ (ICMP code), to
--     enable ICMP Ping. For more information, see
--     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages Control Messages>
--     on /Wikipedia/.
--
-- -   ICMPv6 - The ICMP code for IPv6 addresses. For example, specify
--     @128@ as the @fromPort@ (ICMPv6 type), and @0@ as @toPort@ (ICMPv6
--     code). For more information, see
--     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 Internet Control Message Protocol for IPv6>.
newPortInfo ::
  PortInfo
newPortInfo :: PortInfo
newPortInfo =
  PortInfo' :: Maybe Int
-> Maybe [Text]
-> Maybe NetworkProtocol
-> Maybe [Text]
-> Maybe [Text]
-> Maybe Int
-> PortInfo
PortInfo'
    { $sel:fromPort:PortInfo' :: Maybe Int
fromPort = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:cidrs:PortInfo' :: Maybe [Text]
cidrs = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:protocol:PortInfo' :: Maybe NetworkProtocol
protocol = Maybe NetworkProtocol
forall a. Maybe a
Prelude.Nothing,
      $sel:cidrListAliases:PortInfo' :: Maybe [Text]
cidrListAliases = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:ipv6Cidrs:PortInfo' :: Maybe [Text]
ipv6Cidrs = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:toPort:PortInfo' :: Maybe Int
toPort = Maybe Int
forall a. Maybe a
Prelude.Nothing
    }

-- | The first port in a range of open ports on an instance.
--
-- Allowed ports:
--
-- -   TCP and UDP - @0@ to @65535@
--
-- -   ICMP - The ICMP type for IPv4 addresses. For example, specify @8@ as
--     the @fromPort@ (ICMP type), and @-1@ as the @toPort@ (ICMP code), to
--     enable ICMP Ping. For more information, see
--     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages Control Messages>
--     on /Wikipedia/.
--
-- -   ICMPv6 - The ICMP type for IPv6 addresses. For example, specify
--     @128@ as the @fromPort@ (ICMPv6 type), and @0@ as @toPort@ (ICMPv6
--     code). For more information, see
--     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 Internet Control Message Protocol for IPv6>.
portInfo_fromPort :: Lens.Lens' PortInfo (Prelude.Maybe Prelude.Int)
portInfo_fromPort :: (Maybe Int -> f (Maybe Int)) -> PortInfo -> f PortInfo
portInfo_fromPort = (PortInfo -> Maybe Int)
-> (PortInfo -> Maybe Int -> PortInfo)
-> Lens PortInfo PortInfo (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PortInfo' {Maybe Int
fromPort :: Maybe Int
$sel:fromPort:PortInfo' :: PortInfo -> Maybe Int
fromPort} -> Maybe Int
fromPort) (\s :: PortInfo
s@PortInfo' {} Maybe Int
a -> PortInfo
s {$sel:fromPort:PortInfo' :: Maybe Int
fromPort = Maybe Int
a} :: PortInfo)

-- | The IPv4 address, or range of IPv4 addresses (in CIDR notation) that are
-- allowed to connect to an instance through the ports, and the protocol.
--
-- The @ipv6Cidrs@ parameter lists the IPv6 addresses that are allowed to
-- connect to an instance.
--
-- Examples:
--
-- -   To allow the IP address @192.0.2.44@, specify @192.0.2.44@ or
--     @192.0.2.44\/32@.
--
-- -   To allow the IP addresses @192.0.2.0@ to @192.0.2.255@, specify
--     @192.0.2.0\/24@.
--
-- For more information about CIDR block notation, see
-- <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation Classless Inter-Domain Routing>
-- on /Wikipedia/.
portInfo_cidrs :: Lens.Lens' PortInfo (Prelude.Maybe [Prelude.Text])
portInfo_cidrs :: (Maybe [Text] -> f (Maybe [Text])) -> PortInfo -> f PortInfo
portInfo_cidrs = (PortInfo -> Maybe [Text])
-> (PortInfo -> Maybe [Text] -> PortInfo)
-> Lens PortInfo PortInfo (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PortInfo' {Maybe [Text]
cidrs :: Maybe [Text]
$sel:cidrs:PortInfo' :: PortInfo -> Maybe [Text]
cidrs} -> Maybe [Text]
cidrs) (\s :: PortInfo
s@PortInfo' {} Maybe [Text]
a -> PortInfo
s {$sel:cidrs:PortInfo' :: Maybe [Text]
cidrs = Maybe [Text]
a} :: PortInfo) ((Maybe [Text] -> f (Maybe [Text])) -> PortInfo -> f PortInfo)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> PortInfo
-> f PortInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The IP protocol name.
--
-- The name can be one of the following:
--
-- -   @tcp@ - Transmission Control Protocol (TCP) provides reliable,
--     ordered, and error-checked delivery of streamed data between
--     applications running on hosts communicating by an IP network. If you
--     have an application that doesn\'t require reliable data stream
--     service, use UDP instead.
--
-- -   @all@ - All transport layer protocol types. For more general
--     information, see
--     <https://en.wikipedia.org/wiki/Transport_layer Transport layer> on
--     /Wikipedia/.
--
-- -   @udp@ - With User Datagram Protocol (UDP), computer applications can
--     send messages (or datagrams) to other hosts on an Internet Protocol
--     (IP) network. Prior communications are not required to set up
--     transmission channels or data paths. Applications that don\'t
--     require reliable data stream service can use UDP, which provides a
--     connectionless datagram service that emphasizes reduced latency over
--     reliability. If you do require reliable data stream service, use TCP
--     instead.
--
-- -   @icmp@ - Internet Control Message Protocol (ICMP) is used to send
--     error messages and operational information indicating success or
--     failure when communicating with an instance. For example, an error
--     is indicated when an instance could not be reached. When you specify
--     @icmp@ as the @protocol@, you must specify the ICMP type using the
--     @fromPort@ parameter, and ICMP code using the @toPort@ parameter.
portInfo_protocol :: Lens.Lens' PortInfo (Prelude.Maybe NetworkProtocol)
portInfo_protocol :: (Maybe NetworkProtocol -> f (Maybe NetworkProtocol))
-> PortInfo -> f PortInfo
portInfo_protocol = (PortInfo -> Maybe NetworkProtocol)
-> (PortInfo -> Maybe NetworkProtocol -> PortInfo)
-> Lens
     PortInfo PortInfo (Maybe NetworkProtocol) (Maybe NetworkProtocol)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PortInfo' {Maybe NetworkProtocol
protocol :: Maybe NetworkProtocol
$sel:protocol:PortInfo' :: PortInfo -> Maybe NetworkProtocol
protocol} -> Maybe NetworkProtocol
protocol) (\s :: PortInfo
s@PortInfo' {} Maybe NetworkProtocol
a -> PortInfo
s {$sel:protocol:PortInfo' :: Maybe NetworkProtocol
protocol = Maybe NetworkProtocol
a} :: PortInfo)

-- | An alias that defines access for a preconfigured range of IP addresses.
--
-- The only alias currently supported is @lightsail-connect@, which allows
-- IP addresses of the browser-based RDP\/SSH client in the Lightsail
-- console to connect to your instance.
portInfo_cidrListAliases :: Lens.Lens' PortInfo (Prelude.Maybe [Prelude.Text])
portInfo_cidrListAliases :: (Maybe [Text] -> f (Maybe [Text])) -> PortInfo -> f PortInfo
portInfo_cidrListAliases = (PortInfo -> Maybe [Text])
-> (PortInfo -> Maybe [Text] -> PortInfo)
-> Lens PortInfo PortInfo (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PortInfo' {Maybe [Text]
cidrListAliases :: Maybe [Text]
$sel:cidrListAliases:PortInfo' :: PortInfo -> Maybe [Text]
cidrListAliases} -> Maybe [Text]
cidrListAliases) (\s :: PortInfo
s@PortInfo' {} Maybe [Text]
a -> PortInfo
s {$sel:cidrListAliases:PortInfo' :: Maybe [Text]
cidrListAliases = Maybe [Text]
a} :: PortInfo) ((Maybe [Text] -> f (Maybe [Text])) -> PortInfo -> f PortInfo)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> PortInfo
-> f PortInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The IPv6 address, or range of IPv6 addresses (in CIDR notation) that are
-- allowed to connect to an instance through the ports, and the protocol.
-- Only devices with an IPv6 address can connect to an instance through
-- IPv6; otherwise, IPv4 should be used.
--
-- The @cidrs@ parameter lists the IPv4 addresses that are allowed to
-- connect to an instance.
--
-- For more information about CIDR block notation, see
-- <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation Classless Inter-Domain Routing>
-- on /Wikipedia/.
portInfo_ipv6Cidrs :: Lens.Lens' PortInfo (Prelude.Maybe [Prelude.Text])
portInfo_ipv6Cidrs :: (Maybe [Text] -> f (Maybe [Text])) -> PortInfo -> f PortInfo
portInfo_ipv6Cidrs = (PortInfo -> Maybe [Text])
-> (PortInfo -> Maybe [Text] -> PortInfo)
-> Lens PortInfo PortInfo (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PortInfo' {Maybe [Text]
ipv6Cidrs :: Maybe [Text]
$sel:ipv6Cidrs:PortInfo' :: PortInfo -> Maybe [Text]
ipv6Cidrs} -> Maybe [Text]
ipv6Cidrs) (\s :: PortInfo
s@PortInfo' {} Maybe [Text]
a -> PortInfo
s {$sel:ipv6Cidrs:PortInfo' :: Maybe [Text]
ipv6Cidrs = Maybe [Text]
a} :: PortInfo) ((Maybe [Text] -> f (Maybe [Text])) -> PortInfo -> f PortInfo)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> PortInfo
-> f PortInfo
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The last port in a range of open ports on an instance.
--
-- Allowed ports:
--
-- -   TCP and UDP - @0@ to @65535@
--
-- -   ICMP - The ICMP code for IPv4 addresses. For example, specify @8@ as
--     the @fromPort@ (ICMP type), and @-1@ as the @toPort@ (ICMP code), to
--     enable ICMP Ping. For more information, see
--     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages Control Messages>
--     on /Wikipedia/.
--
-- -   ICMPv6 - The ICMP code for IPv6 addresses. For example, specify
--     @128@ as the @fromPort@ (ICMPv6 type), and @0@ as @toPort@ (ICMPv6
--     code). For more information, see
--     <https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 Internet Control Message Protocol for IPv6>.
portInfo_toPort :: Lens.Lens' PortInfo (Prelude.Maybe Prelude.Int)
portInfo_toPort :: (Maybe Int -> f (Maybe Int)) -> PortInfo -> f PortInfo
portInfo_toPort = (PortInfo -> Maybe Int)
-> (PortInfo -> Maybe Int -> PortInfo)
-> Lens PortInfo PortInfo (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PortInfo' {Maybe Int
toPort :: Maybe Int
$sel:toPort:PortInfo' :: PortInfo -> Maybe Int
toPort} -> Maybe Int
toPort) (\s :: PortInfo
s@PortInfo' {} Maybe Int
a -> PortInfo
s {$sel:toPort:PortInfo' :: Maybe Int
toPort = Maybe Int
a} :: PortInfo)

instance Prelude.Hashable PortInfo

instance Prelude.NFData PortInfo

instance Core.ToJSON PortInfo where
  toJSON :: PortInfo -> Value
toJSON PortInfo' {Maybe Int
Maybe [Text]
Maybe NetworkProtocol
toPort :: Maybe Int
ipv6Cidrs :: Maybe [Text]
cidrListAliases :: Maybe [Text]
protocol :: Maybe NetworkProtocol
cidrs :: Maybe [Text]
fromPort :: Maybe Int
$sel:toPort:PortInfo' :: PortInfo -> Maybe Int
$sel:ipv6Cidrs:PortInfo' :: PortInfo -> Maybe [Text]
$sel:cidrListAliases:PortInfo' :: PortInfo -> Maybe [Text]
$sel:protocol:PortInfo' :: PortInfo -> Maybe NetworkProtocol
$sel:cidrs:PortInfo' :: PortInfo -> Maybe [Text]
$sel:fromPort:PortInfo' :: PortInfo -> Maybe Int
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"fromPort" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Int -> Pair) -> Maybe Int -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Int
fromPort,
            (Text
"cidrs" Text -> [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) ([Text] -> Pair) -> Maybe [Text] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
cidrs,
            (Text
"protocol" Text -> NetworkProtocol -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (NetworkProtocol -> Pair) -> Maybe NetworkProtocol -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe NetworkProtocol
protocol,
            (Text
"cidrListAliases" Text -> [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              ([Text] -> Pair) -> Maybe [Text] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
cidrListAliases,
            (Text
"ipv6Cidrs" Text -> [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) ([Text] -> Pair) -> Maybe [Text] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
ipv6Cidrs,
            (Text
"toPort" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Int -> Pair) -> Maybe Int -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Int
toPort
          ]
      )