{-# 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.InstancePortState
-- 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.InstancePortState where

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

-- | Describes open ports on an instance, the IP addresses allowed to connect
-- to the instance through the ports, and the protocol.
--
-- /See:/ 'newInstancePortState' smart constructor.
data InstancePortState = InstancePortState'
  { -- | 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>.
    InstancePortState -> 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.
    --
    -- 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/.
    InstancePortState -> Maybe [Text]
cidrs :: Prelude.Maybe [Prelude.Text],
    -- | Specifies whether the instance port is @open@ or @closed@.
    --
    -- The port state for Lightsail instances is always @open@.
    InstancePortState -> Maybe PortState
state :: Prelude.Maybe PortState,
    -- | 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.
    InstancePortState -> 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.
    InstancePortState -> 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/.
    InstancePortState -> 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>.
    InstancePortState -> Maybe Int
toPort :: Prelude.Maybe Prelude.Int
  }
  deriving (InstancePortState -> InstancePortState -> Bool
(InstancePortState -> InstancePortState -> Bool)
-> (InstancePortState -> InstancePortState -> Bool)
-> Eq InstancePortState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InstancePortState -> InstancePortState -> Bool
$c/= :: InstancePortState -> InstancePortState -> Bool
== :: InstancePortState -> InstancePortState -> Bool
$c== :: InstancePortState -> InstancePortState -> Bool
Prelude.Eq, ReadPrec [InstancePortState]
ReadPrec InstancePortState
Int -> ReadS InstancePortState
ReadS [InstancePortState]
(Int -> ReadS InstancePortState)
-> ReadS [InstancePortState]
-> ReadPrec InstancePortState
-> ReadPrec [InstancePortState]
-> Read InstancePortState
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [InstancePortState]
$creadListPrec :: ReadPrec [InstancePortState]
readPrec :: ReadPrec InstancePortState
$creadPrec :: ReadPrec InstancePortState
readList :: ReadS [InstancePortState]
$creadList :: ReadS [InstancePortState]
readsPrec :: Int -> ReadS InstancePortState
$creadsPrec :: Int -> ReadS InstancePortState
Prelude.Read, Int -> InstancePortState -> ShowS
[InstancePortState] -> ShowS
InstancePortState -> String
(Int -> InstancePortState -> ShowS)
-> (InstancePortState -> String)
-> ([InstancePortState] -> ShowS)
-> Show InstancePortState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InstancePortState] -> ShowS
$cshowList :: [InstancePortState] -> ShowS
show :: InstancePortState -> String
$cshow :: InstancePortState -> String
showsPrec :: Int -> InstancePortState -> ShowS
$cshowsPrec :: Int -> InstancePortState -> ShowS
Prelude.Show, (forall x. InstancePortState -> Rep InstancePortState x)
-> (forall x. Rep InstancePortState x -> InstancePortState)
-> Generic InstancePortState
forall x. Rep InstancePortState x -> InstancePortState
forall x. InstancePortState -> Rep InstancePortState x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep InstancePortState x -> InstancePortState
$cfrom :: forall x. InstancePortState -> Rep InstancePortState x
Prelude.Generic)

-- |
-- Create a value of 'InstancePortState' 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', 'instancePortState_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', 'instancePortState_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.
--
-- 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/.
--
-- 'state', 'instancePortState_state' - Specifies whether the instance port is @open@ or @closed@.
--
-- The port state for Lightsail instances is always @open@.
--
-- 'protocol', 'instancePortState_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', 'instancePortState_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', 'instancePortState_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', 'instancePortState_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>.
newInstancePortState ::
  InstancePortState
newInstancePortState :: InstancePortState
newInstancePortState =
  InstancePortState' :: Maybe Int
-> Maybe [Text]
-> Maybe PortState
-> Maybe NetworkProtocol
-> Maybe [Text]
-> Maybe [Text]
-> Maybe Int
-> InstancePortState
InstancePortState'
    { $sel:fromPort:InstancePortState' :: Maybe Int
fromPort = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:cidrs:InstancePortState' :: Maybe [Text]
cidrs = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:state:InstancePortState' :: Maybe PortState
state = Maybe PortState
forall a. Maybe a
Prelude.Nothing,
      $sel:protocol:InstancePortState' :: Maybe NetworkProtocol
protocol = Maybe NetworkProtocol
forall a. Maybe a
Prelude.Nothing,
      $sel:cidrListAliases:InstancePortState' :: Maybe [Text]
cidrListAliases = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:ipv6Cidrs:InstancePortState' :: Maybe [Text]
ipv6Cidrs = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:toPort:InstancePortState' :: 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>.
instancePortState_fromPort :: Lens.Lens' InstancePortState (Prelude.Maybe Prelude.Int)
instancePortState_fromPort :: (Maybe Int -> f (Maybe Int))
-> InstancePortState -> f InstancePortState
instancePortState_fromPort = (InstancePortState -> Maybe Int)
-> (InstancePortState -> Maybe Int -> InstancePortState)
-> Lens InstancePortState InstancePortState (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstancePortState' {Maybe Int
fromPort :: Maybe Int
$sel:fromPort:InstancePortState' :: InstancePortState -> Maybe Int
fromPort} -> Maybe Int
fromPort) (\s :: InstancePortState
s@InstancePortState' {} Maybe Int
a -> InstancePortState
s {$sel:fromPort:InstancePortState' :: Maybe Int
fromPort = Maybe Int
a} :: InstancePortState)

-- | 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.
--
-- 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/.
instancePortState_cidrs :: Lens.Lens' InstancePortState (Prelude.Maybe [Prelude.Text])
instancePortState_cidrs :: (Maybe [Text] -> f (Maybe [Text]))
-> InstancePortState -> f InstancePortState
instancePortState_cidrs = (InstancePortState -> Maybe [Text])
-> (InstancePortState -> Maybe [Text] -> InstancePortState)
-> Lens
     InstancePortState InstancePortState (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstancePortState' {Maybe [Text]
cidrs :: Maybe [Text]
$sel:cidrs:InstancePortState' :: InstancePortState -> Maybe [Text]
cidrs} -> Maybe [Text]
cidrs) (\s :: InstancePortState
s@InstancePortState' {} Maybe [Text]
a -> InstancePortState
s {$sel:cidrs:InstancePortState' :: Maybe [Text]
cidrs = Maybe [Text]
a} :: InstancePortState) ((Maybe [Text] -> f (Maybe [Text]))
 -> InstancePortState -> f InstancePortState)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> InstancePortState
-> f InstancePortState
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

-- | Specifies whether the instance port is @open@ or @closed@.
--
-- The port state for Lightsail instances is always @open@.
instancePortState_state :: Lens.Lens' InstancePortState (Prelude.Maybe PortState)
instancePortState_state :: (Maybe PortState -> f (Maybe PortState))
-> InstancePortState -> f InstancePortState
instancePortState_state = (InstancePortState -> Maybe PortState)
-> (InstancePortState -> Maybe PortState -> InstancePortState)
-> Lens
     InstancePortState
     InstancePortState
     (Maybe PortState)
     (Maybe PortState)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstancePortState' {Maybe PortState
state :: Maybe PortState
$sel:state:InstancePortState' :: InstancePortState -> Maybe PortState
state} -> Maybe PortState
state) (\s :: InstancePortState
s@InstancePortState' {} Maybe PortState
a -> InstancePortState
s {$sel:state:InstancePortState' :: Maybe PortState
state = Maybe PortState
a} :: InstancePortState)

-- | 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.
instancePortState_protocol :: Lens.Lens' InstancePortState (Prelude.Maybe NetworkProtocol)
instancePortState_protocol :: (Maybe NetworkProtocol -> f (Maybe NetworkProtocol))
-> InstancePortState -> f InstancePortState
instancePortState_protocol = (InstancePortState -> Maybe NetworkProtocol)
-> (InstancePortState
    -> Maybe NetworkProtocol -> InstancePortState)
-> Lens
     InstancePortState
     InstancePortState
     (Maybe NetworkProtocol)
     (Maybe NetworkProtocol)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstancePortState' {Maybe NetworkProtocol
protocol :: Maybe NetworkProtocol
$sel:protocol:InstancePortState' :: InstancePortState -> Maybe NetworkProtocol
protocol} -> Maybe NetworkProtocol
protocol) (\s :: InstancePortState
s@InstancePortState' {} Maybe NetworkProtocol
a -> InstancePortState
s {$sel:protocol:InstancePortState' :: Maybe NetworkProtocol
protocol = Maybe NetworkProtocol
a} :: InstancePortState)

-- | 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.
instancePortState_cidrListAliases :: Lens.Lens' InstancePortState (Prelude.Maybe [Prelude.Text])
instancePortState_cidrListAliases :: (Maybe [Text] -> f (Maybe [Text]))
-> InstancePortState -> f InstancePortState
instancePortState_cidrListAliases = (InstancePortState -> Maybe [Text])
-> (InstancePortState -> Maybe [Text] -> InstancePortState)
-> Lens
     InstancePortState InstancePortState (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstancePortState' {Maybe [Text]
cidrListAliases :: Maybe [Text]
$sel:cidrListAliases:InstancePortState' :: InstancePortState -> Maybe [Text]
cidrListAliases} -> Maybe [Text]
cidrListAliases) (\s :: InstancePortState
s@InstancePortState' {} Maybe [Text]
a -> InstancePortState
s {$sel:cidrListAliases:InstancePortState' :: Maybe [Text]
cidrListAliases = Maybe [Text]
a} :: InstancePortState) ((Maybe [Text] -> f (Maybe [Text]))
 -> InstancePortState -> f InstancePortState)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> InstancePortState
-> f InstancePortState
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/.
instancePortState_ipv6Cidrs :: Lens.Lens' InstancePortState (Prelude.Maybe [Prelude.Text])
instancePortState_ipv6Cidrs :: (Maybe [Text] -> f (Maybe [Text]))
-> InstancePortState -> f InstancePortState
instancePortState_ipv6Cidrs = (InstancePortState -> Maybe [Text])
-> (InstancePortState -> Maybe [Text] -> InstancePortState)
-> Lens
     InstancePortState InstancePortState (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstancePortState' {Maybe [Text]
ipv6Cidrs :: Maybe [Text]
$sel:ipv6Cidrs:InstancePortState' :: InstancePortState -> Maybe [Text]
ipv6Cidrs} -> Maybe [Text]
ipv6Cidrs) (\s :: InstancePortState
s@InstancePortState' {} Maybe [Text]
a -> InstancePortState
s {$sel:ipv6Cidrs:InstancePortState' :: Maybe [Text]
ipv6Cidrs = Maybe [Text]
a} :: InstancePortState) ((Maybe [Text] -> f (Maybe [Text]))
 -> InstancePortState -> f InstancePortState)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> InstancePortState
-> f InstancePortState
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>.
instancePortState_toPort :: Lens.Lens' InstancePortState (Prelude.Maybe Prelude.Int)
instancePortState_toPort :: (Maybe Int -> f (Maybe Int))
-> InstancePortState -> f InstancePortState
instancePortState_toPort = (InstancePortState -> Maybe Int)
-> (InstancePortState -> Maybe Int -> InstancePortState)
-> Lens InstancePortState InstancePortState (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstancePortState' {Maybe Int
toPort :: Maybe Int
$sel:toPort:InstancePortState' :: InstancePortState -> Maybe Int
toPort} -> Maybe Int
toPort) (\s :: InstancePortState
s@InstancePortState' {} Maybe Int
a -> InstancePortState
s {$sel:toPort:InstancePortState' :: Maybe Int
toPort = Maybe Int
a} :: InstancePortState)

instance Core.FromJSON InstancePortState where
  parseJSON :: Value -> Parser InstancePortState
parseJSON =
    String
-> (Object -> Parser InstancePortState)
-> Value
-> Parser InstancePortState
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Core.withObject
      String
"InstancePortState"
      ( \Object
x ->
          Maybe Int
-> Maybe [Text]
-> Maybe PortState
-> Maybe NetworkProtocol
-> Maybe [Text]
-> Maybe [Text]
-> Maybe Int
-> InstancePortState
InstancePortState'
            (Maybe Int
 -> Maybe [Text]
 -> Maybe PortState
 -> Maybe NetworkProtocol
 -> Maybe [Text]
 -> Maybe [Text]
 -> Maybe Int
 -> InstancePortState)
-> Parser (Maybe Int)
-> Parser
     (Maybe [Text]
      -> Maybe PortState
      -> Maybe NetworkProtocol
      -> Maybe [Text]
      -> Maybe [Text]
      -> Maybe Int
      -> InstancePortState)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"fromPort")
            Parser
  (Maybe [Text]
   -> Maybe PortState
   -> Maybe NetworkProtocol
   -> Maybe [Text]
   -> Maybe [Text]
   -> Maybe Int
   -> InstancePortState)
-> Parser (Maybe [Text])
-> Parser
     (Maybe PortState
      -> Maybe NetworkProtocol
      -> Maybe [Text]
      -> Maybe [Text]
      -> Maybe Int
      -> InstancePortState)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe (Maybe [Text]))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"cidrs" Parser (Maybe (Maybe [Text]))
-> Maybe [Text] -> Parser (Maybe [Text])
forall a. Parser (Maybe a) -> a -> Parser a
Core..!= Maybe [Text]
forall a. Monoid a => a
Prelude.mempty)
            Parser
  (Maybe PortState
   -> Maybe NetworkProtocol
   -> Maybe [Text]
   -> Maybe [Text]
   -> Maybe Int
   -> InstancePortState)
-> Parser (Maybe PortState)
-> Parser
     (Maybe NetworkProtocol
      -> Maybe [Text] -> Maybe [Text] -> Maybe Int -> InstancePortState)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe PortState)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"state")
            Parser
  (Maybe NetworkProtocol
   -> Maybe [Text] -> Maybe [Text] -> Maybe Int -> InstancePortState)
-> Parser (Maybe NetworkProtocol)
-> Parser
     (Maybe [Text] -> Maybe [Text] -> Maybe Int -> InstancePortState)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe NetworkProtocol)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"protocol")
            Parser
  (Maybe [Text] -> Maybe [Text] -> Maybe Int -> InstancePortState)
-> Parser (Maybe [Text])
-> Parser (Maybe [Text] -> Maybe Int -> InstancePortState)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x Object -> Text -> Parser (Maybe (Maybe [Text]))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"cidrListAliases"
                            Parser (Maybe (Maybe [Text]))
-> Maybe [Text] -> Parser (Maybe [Text])
forall a. Parser (Maybe a) -> a -> Parser a
Core..!= Maybe [Text]
forall a. Monoid a => a
Prelude.mempty
                        )
            Parser (Maybe [Text] -> Maybe Int -> InstancePortState)
-> Parser (Maybe [Text]) -> Parser (Maybe Int -> InstancePortState)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe (Maybe [Text]))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"ipv6Cidrs" Parser (Maybe (Maybe [Text]))
-> Maybe [Text] -> Parser (Maybe [Text])
forall a. Parser (Maybe a) -> a -> Parser a
Core..!= Maybe [Text]
forall a. Monoid a => a
Prelude.mempty)
            Parser (Maybe Int -> InstancePortState)
-> Parser (Maybe Int) -> Parser InstancePortState
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"toPort")
      )

instance Prelude.Hashable InstancePortState

instance Prelude.NFData InstancePortState