{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.GlobalAccelerator.UpdateCustomRoutingListener
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Update a listener for a custom routing accelerator.
module Amazonka.GlobalAccelerator.UpdateCustomRoutingListener
  ( -- * Creating a Request
    UpdateCustomRoutingListener (..),
    newUpdateCustomRoutingListener,

    -- * Request Lenses
    updateCustomRoutingListener_listenerArn,
    updateCustomRoutingListener_portRanges,

    -- * Destructuring the Response
    UpdateCustomRoutingListenerResponse (..),
    newUpdateCustomRoutingListenerResponse,

    -- * Response Lenses
    updateCustomRoutingListenerResponse_listener,
    updateCustomRoutingListenerResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.GlobalAccelerator.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newUpdateCustomRoutingListener' smart constructor.
data UpdateCustomRoutingListener = UpdateCustomRoutingListener'
  { -- | The Amazon Resource Name (ARN) of the listener to update.
    UpdateCustomRoutingListener -> Text
listenerArn :: Prelude.Text,
    -- | The updated port range to support for connections from clients to your
    -- accelerator. If you remove ports that are currently being used by a
    -- subnet endpoint, the call fails.
    --
    -- Separately, you set port ranges for endpoints. For more information, see
    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
    UpdateCustomRoutingListener -> NonEmpty PortRange
portRanges :: Prelude.NonEmpty PortRange
  }
  deriving (UpdateCustomRoutingListener -> UpdateCustomRoutingListener -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateCustomRoutingListener -> UpdateCustomRoutingListener -> Bool
$c/= :: UpdateCustomRoutingListener -> UpdateCustomRoutingListener -> Bool
== :: UpdateCustomRoutingListener -> UpdateCustomRoutingListener -> Bool
$c== :: UpdateCustomRoutingListener -> UpdateCustomRoutingListener -> Bool
Prelude.Eq, ReadPrec [UpdateCustomRoutingListener]
ReadPrec UpdateCustomRoutingListener
Int -> ReadS UpdateCustomRoutingListener
ReadS [UpdateCustomRoutingListener]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateCustomRoutingListener]
$creadListPrec :: ReadPrec [UpdateCustomRoutingListener]
readPrec :: ReadPrec UpdateCustomRoutingListener
$creadPrec :: ReadPrec UpdateCustomRoutingListener
readList :: ReadS [UpdateCustomRoutingListener]
$creadList :: ReadS [UpdateCustomRoutingListener]
readsPrec :: Int -> ReadS UpdateCustomRoutingListener
$creadsPrec :: Int -> ReadS UpdateCustomRoutingListener
Prelude.Read, Int -> UpdateCustomRoutingListener -> ShowS
[UpdateCustomRoutingListener] -> ShowS
UpdateCustomRoutingListener -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateCustomRoutingListener] -> ShowS
$cshowList :: [UpdateCustomRoutingListener] -> ShowS
show :: UpdateCustomRoutingListener -> String
$cshow :: UpdateCustomRoutingListener -> String
showsPrec :: Int -> UpdateCustomRoutingListener -> ShowS
$cshowsPrec :: Int -> UpdateCustomRoutingListener -> ShowS
Prelude.Show, forall x.
Rep UpdateCustomRoutingListener x -> UpdateCustomRoutingListener
forall x.
UpdateCustomRoutingListener -> Rep UpdateCustomRoutingListener x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateCustomRoutingListener x -> UpdateCustomRoutingListener
$cfrom :: forall x.
UpdateCustomRoutingListener -> Rep UpdateCustomRoutingListener x
Prelude.Generic)

-- |
-- Create a value of 'UpdateCustomRoutingListener' 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:
--
-- 'listenerArn', 'updateCustomRoutingListener_listenerArn' - The Amazon Resource Name (ARN) of the listener to update.
--
-- 'portRanges', 'updateCustomRoutingListener_portRanges' - The updated port range to support for connections from clients to your
-- accelerator. If you remove ports that are currently being used by a
-- subnet endpoint, the call fails.
--
-- Separately, you set port ranges for endpoints. For more information, see
-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
newUpdateCustomRoutingListener ::
  -- | 'listenerArn'
  Prelude.Text ->
  -- | 'portRanges'
  Prelude.NonEmpty PortRange ->
  UpdateCustomRoutingListener
newUpdateCustomRoutingListener :: Text -> NonEmpty PortRange -> UpdateCustomRoutingListener
newUpdateCustomRoutingListener
  Text
pListenerArn_
  NonEmpty PortRange
pPortRanges_ =
    UpdateCustomRoutingListener'
      { $sel:listenerArn:UpdateCustomRoutingListener' :: Text
listenerArn =
          Text
pListenerArn_,
        $sel:portRanges:UpdateCustomRoutingListener' :: NonEmpty PortRange
portRanges = forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty PortRange
pPortRanges_
      }

-- | The Amazon Resource Name (ARN) of the listener to update.
updateCustomRoutingListener_listenerArn :: Lens.Lens' UpdateCustomRoutingListener Prelude.Text
updateCustomRoutingListener_listenerArn :: Lens' UpdateCustomRoutingListener Text
updateCustomRoutingListener_listenerArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateCustomRoutingListener' {Text
listenerArn :: Text
$sel:listenerArn:UpdateCustomRoutingListener' :: UpdateCustomRoutingListener -> Text
listenerArn} -> Text
listenerArn) (\s :: UpdateCustomRoutingListener
s@UpdateCustomRoutingListener' {} Text
a -> UpdateCustomRoutingListener
s {$sel:listenerArn:UpdateCustomRoutingListener' :: Text
listenerArn = Text
a} :: UpdateCustomRoutingListener)

-- | The updated port range to support for connections from clients to your
-- accelerator. If you remove ports that are currently being used by a
-- subnet endpoint, the call fails.
--
-- Separately, you set port ranges for endpoints. For more information, see
-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
updateCustomRoutingListener_portRanges :: Lens.Lens' UpdateCustomRoutingListener (Prelude.NonEmpty PortRange)
updateCustomRoutingListener_portRanges :: Lens' UpdateCustomRoutingListener (NonEmpty PortRange)
updateCustomRoutingListener_portRanges = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateCustomRoutingListener' {NonEmpty PortRange
portRanges :: NonEmpty PortRange
$sel:portRanges:UpdateCustomRoutingListener' :: UpdateCustomRoutingListener -> NonEmpty PortRange
portRanges} -> NonEmpty PortRange
portRanges) (\s :: UpdateCustomRoutingListener
s@UpdateCustomRoutingListener' {} NonEmpty PortRange
a -> UpdateCustomRoutingListener
s {$sel:portRanges:UpdateCustomRoutingListener' :: NonEmpty PortRange
portRanges = NonEmpty PortRange
a} :: UpdateCustomRoutingListener) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest UpdateCustomRoutingListener where
  type
    AWSResponse UpdateCustomRoutingListener =
      UpdateCustomRoutingListenerResponse
  request :: (Service -> Service)
-> UpdateCustomRoutingListener
-> Request UpdateCustomRoutingListener
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateCustomRoutingListener
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateCustomRoutingListener)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe CustomRoutingListener
-> Int -> UpdateCustomRoutingListenerResponse
UpdateCustomRoutingListenerResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Listener")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable UpdateCustomRoutingListener where
  hashWithSalt :: Int -> UpdateCustomRoutingListener -> Int
hashWithSalt Int
_salt UpdateCustomRoutingListener' {NonEmpty PortRange
Text
portRanges :: NonEmpty PortRange
listenerArn :: Text
$sel:portRanges:UpdateCustomRoutingListener' :: UpdateCustomRoutingListener -> NonEmpty PortRange
$sel:listenerArn:UpdateCustomRoutingListener' :: UpdateCustomRoutingListener -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
listenerArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty PortRange
portRanges

instance Prelude.NFData UpdateCustomRoutingListener where
  rnf :: UpdateCustomRoutingListener -> ()
rnf UpdateCustomRoutingListener' {NonEmpty PortRange
Text
portRanges :: NonEmpty PortRange
listenerArn :: Text
$sel:portRanges:UpdateCustomRoutingListener' :: UpdateCustomRoutingListener -> NonEmpty PortRange
$sel:listenerArn:UpdateCustomRoutingListener' :: UpdateCustomRoutingListener -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
listenerArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty PortRange
portRanges

instance Data.ToHeaders UpdateCustomRoutingListener where
  toHeaders :: UpdateCustomRoutingListener -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"GlobalAccelerator_V20180706.UpdateCustomRoutingListener" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UpdateCustomRoutingListener where
  toJSON :: UpdateCustomRoutingListener -> Value
toJSON UpdateCustomRoutingListener' {NonEmpty PortRange
Text
portRanges :: NonEmpty PortRange
listenerArn :: Text
$sel:portRanges:UpdateCustomRoutingListener' :: UpdateCustomRoutingListener -> NonEmpty PortRange
$sel:listenerArn:UpdateCustomRoutingListener' :: UpdateCustomRoutingListener -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"ListenerArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
listenerArn),
            forall a. a -> Maybe a
Prelude.Just (Key
"PortRanges" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty PortRange
portRanges)
          ]
      )

instance Data.ToPath UpdateCustomRoutingListener where
  toPath :: UpdateCustomRoutingListener -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery UpdateCustomRoutingListener where
  toQuery :: UpdateCustomRoutingListener -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newUpdateCustomRoutingListenerResponse' smart constructor.
data UpdateCustomRoutingListenerResponse = UpdateCustomRoutingListenerResponse'
  { -- | Information for the updated listener for a custom routing accelerator.
    UpdateCustomRoutingListenerResponse -> Maybe CustomRoutingListener
listener :: Prelude.Maybe CustomRoutingListener,
    -- | The response's http status code.
    UpdateCustomRoutingListenerResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (UpdateCustomRoutingListenerResponse
-> UpdateCustomRoutingListenerResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateCustomRoutingListenerResponse
-> UpdateCustomRoutingListenerResponse -> Bool
$c/= :: UpdateCustomRoutingListenerResponse
-> UpdateCustomRoutingListenerResponse -> Bool
== :: UpdateCustomRoutingListenerResponse
-> UpdateCustomRoutingListenerResponse -> Bool
$c== :: UpdateCustomRoutingListenerResponse
-> UpdateCustomRoutingListenerResponse -> Bool
Prelude.Eq, ReadPrec [UpdateCustomRoutingListenerResponse]
ReadPrec UpdateCustomRoutingListenerResponse
Int -> ReadS UpdateCustomRoutingListenerResponse
ReadS [UpdateCustomRoutingListenerResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateCustomRoutingListenerResponse]
$creadListPrec :: ReadPrec [UpdateCustomRoutingListenerResponse]
readPrec :: ReadPrec UpdateCustomRoutingListenerResponse
$creadPrec :: ReadPrec UpdateCustomRoutingListenerResponse
readList :: ReadS [UpdateCustomRoutingListenerResponse]
$creadList :: ReadS [UpdateCustomRoutingListenerResponse]
readsPrec :: Int -> ReadS UpdateCustomRoutingListenerResponse
$creadsPrec :: Int -> ReadS UpdateCustomRoutingListenerResponse
Prelude.Read, Int -> UpdateCustomRoutingListenerResponse -> ShowS
[UpdateCustomRoutingListenerResponse] -> ShowS
UpdateCustomRoutingListenerResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateCustomRoutingListenerResponse] -> ShowS
$cshowList :: [UpdateCustomRoutingListenerResponse] -> ShowS
show :: UpdateCustomRoutingListenerResponse -> String
$cshow :: UpdateCustomRoutingListenerResponse -> String
showsPrec :: Int -> UpdateCustomRoutingListenerResponse -> ShowS
$cshowsPrec :: Int -> UpdateCustomRoutingListenerResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateCustomRoutingListenerResponse x
-> UpdateCustomRoutingListenerResponse
forall x.
UpdateCustomRoutingListenerResponse
-> Rep UpdateCustomRoutingListenerResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateCustomRoutingListenerResponse x
-> UpdateCustomRoutingListenerResponse
$cfrom :: forall x.
UpdateCustomRoutingListenerResponse
-> Rep UpdateCustomRoutingListenerResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateCustomRoutingListenerResponse' 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:
--
-- 'listener', 'updateCustomRoutingListenerResponse_listener' - Information for the updated listener for a custom routing accelerator.
--
-- 'httpStatus', 'updateCustomRoutingListenerResponse_httpStatus' - The response's http status code.
newUpdateCustomRoutingListenerResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateCustomRoutingListenerResponse
newUpdateCustomRoutingListenerResponse :: Int -> UpdateCustomRoutingListenerResponse
newUpdateCustomRoutingListenerResponse Int
pHttpStatus_ =
  UpdateCustomRoutingListenerResponse'
    { $sel:listener:UpdateCustomRoutingListenerResponse' :: Maybe CustomRoutingListener
listener =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateCustomRoutingListenerResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information for the updated listener for a custom routing accelerator.
updateCustomRoutingListenerResponse_listener :: Lens.Lens' UpdateCustomRoutingListenerResponse (Prelude.Maybe CustomRoutingListener)
updateCustomRoutingListenerResponse_listener :: Lens'
  UpdateCustomRoutingListenerResponse (Maybe CustomRoutingListener)
updateCustomRoutingListenerResponse_listener = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateCustomRoutingListenerResponse' {Maybe CustomRoutingListener
listener :: Maybe CustomRoutingListener
$sel:listener:UpdateCustomRoutingListenerResponse' :: UpdateCustomRoutingListenerResponse -> Maybe CustomRoutingListener
listener} -> Maybe CustomRoutingListener
listener) (\s :: UpdateCustomRoutingListenerResponse
s@UpdateCustomRoutingListenerResponse' {} Maybe CustomRoutingListener
a -> UpdateCustomRoutingListenerResponse
s {$sel:listener:UpdateCustomRoutingListenerResponse' :: Maybe CustomRoutingListener
listener = Maybe CustomRoutingListener
a} :: UpdateCustomRoutingListenerResponse)

-- | The response's http status code.
updateCustomRoutingListenerResponse_httpStatus :: Lens.Lens' UpdateCustomRoutingListenerResponse Prelude.Int
updateCustomRoutingListenerResponse_httpStatus :: Lens' UpdateCustomRoutingListenerResponse Int
updateCustomRoutingListenerResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateCustomRoutingListenerResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateCustomRoutingListenerResponse' :: UpdateCustomRoutingListenerResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: UpdateCustomRoutingListenerResponse
s@UpdateCustomRoutingListenerResponse' {} Int
a -> UpdateCustomRoutingListenerResponse
s {$sel:httpStatus:UpdateCustomRoutingListenerResponse' :: Int
httpStatus = Int
a} :: UpdateCustomRoutingListenerResponse)

instance
  Prelude.NFData
    UpdateCustomRoutingListenerResponse
  where
  rnf :: UpdateCustomRoutingListenerResponse -> ()
rnf UpdateCustomRoutingListenerResponse' {Int
Maybe CustomRoutingListener
httpStatus :: Int
listener :: Maybe CustomRoutingListener
$sel:httpStatus:UpdateCustomRoutingListenerResponse' :: UpdateCustomRoutingListenerResponse -> Int
$sel:listener:UpdateCustomRoutingListenerResponse' :: UpdateCustomRoutingListenerResponse -> Maybe CustomRoutingListener
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe CustomRoutingListener
listener
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus