{-# 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.IoTSecureTunneling.RotateTunnelAccessToken
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Revokes the current client access token (CAT) and returns new CAT for
-- clients to use when reconnecting to secure tunneling to access the same
-- tunnel.
--
-- Requires permission to access the
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions RotateTunnelAccessToken>
-- action.
--
-- Rotating the CAT doesn\'t extend the tunnel duration. For example, say
-- the tunnel duration is 12 hours and the tunnel has already been open for
-- 4 hours. When you rotate the access tokens, the new tokens that are
-- generated can only be used for the remaining 8 hours.
module Amazonka.IoTSecureTunneling.RotateTunnelAccessToken
  ( -- * Creating a Request
    RotateTunnelAccessToken (..),
    newRotateTunnelAccessToken,

    -- * Request Lenses
    rotateTunnelAccessToken_destinationConfig,
    rotateTunnelAccessToken_tunnelId,
    rotateTunnelAccessToken_clientMode,

    -- * Destructuring the Response
    RotateTunnelAccessTokenResponse (..),
    newRotateTunnelAccessTokenResponse,

    -- * Response Lenses
    rotateTunnelAccessTokenResponse_destinationAccessToken,
    rotateTunnelAccessTokenResponse_sourceAccessToken,
    rotateTunnelAccessTokenResponse_tunnelArn,
    rotateTunnelAccessTokenResponse_httpStatus,
  )
where

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

-- | /See:/ 'newRotateTunnelAccessToken' smart constructor.
data RotateTunnelAccessToken = RotateTunnelAccessToken'
  { RotateTunnelAccessToken -> Maybe DestinationConfig
destinationConfig :: Prelude.Maybe DestinationConfig,
    -- | The tunnel for which you want to rotate the access tokens.
    RotateTunnelAccessToken -> Text
tunnelId :: Prelude.Text,
    -- | The mode of the client that will use the client token, which can be
    -- either the source or destination, or both source and destination.
    RotateTunnelAccessToken -> ClientMode
clientMode :: ClientMode
  }
  deriving (RotateTunnelAccessToken -> RotateTunnelAccessToken -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RotateTunnelAccessToken -> RotateTunnelAccessToken -> Bool
$c/= :: RotateTunnelAccessToken -> RotateTunnelAccessToken -> Bool
== :: RotateTunnelAccessToken -> RotateTunnelAccessToken -> Bool
$c== :: RotateTunnelAccessToken -> RotateTunnelAccessToken -> Bool
Prelude.Eq, ReadPrec [RotateTunnelAccessToken]
ReadPrec RotateTunnelAccessToken
Int -> ReadS RotateTunnelAccessToken
ReadS [RotateTunnelAccessToken]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RotateTunnelAccessToken]
$creadListPrec :: ReadPrec [RotateTunnelAccessToken]
readPrec :: ReadPrec RotateTunnelAccessToken
$creadPrec :: ReadPrec RotateTunnelAccessToken
readList :: ReadS [RotateTunnelAccessToken]
$creadList :: ReadS [RotateTunnelAccessToken]
readsPrec :: Int -> ReadS RotateTunnelAccessToken
$creadsPrec :: Int -> ReadS RotateTunnelAccessToken
Prelude.Read, Int -> RotateTunnelAccessToken -> ShowS
[RotateTunnelAccessToken] -> ShowS
RotateTunnelAccessToken -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RotateTunnelAccessToken] -> ShowS
$cshowList :: [RotateTunnelAccessToken] -> ShowS
show :: RotateTunnelAccessToken -> String
$cshow :: RotateTunnelAccessToken -> String
showsPrec :: Int -> RotateTunnelAccessToken -> ShowS
$cshowsPrec :: Int -> RotateTunnelAccessToken -> ShowS
Prelude.Show, forall x. Rep RotateTunnelAccessToken x -> RotateTunnelAccessToken
forall x. RotateTunnelAccessToken -> Rep RotateTunnelAccessToken x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RotateTunnelAccessToken x -> RotateTunnelAccessToken
$cfrom :: forall x. RotateTunnelAccessToken -> Rep RotateTunnelAccessToken x
Prelude.Generic)

-- |
-- Create a value of 'RotateTunnelAccessToken' 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:
--
-- 'destinationConfig', 'rotateTunnelAccessToken_destinationConfig' - Undocumented member.
--
-- 'tunnelId', 'rotateTunnelAccessToken_tunnelId' - The tunnel for which you want to rotate the access tokens.
--
-- 'clientMode', 'rotateTunnelAccessToken_clientMode' - The mode of the client that will use the client token, which can be
-- either the source or destination, or both source and destination.
newRotateTunnelAccessToken ::
  -- | 'tunnelId'
  Prelude.Text ->
  -- | 'clientMode'
  ClientMode ->
  RotateTunnelAccessToken
newRotateTunnelAccessToken :: Text -> ClientMode -> RotateTunnelAccessToken
newRotateTunnelAccessToken Text
pTunnelId_ ClientMode
pClientMode_ =
  RotateTunnelAccessToken'
    { $sel:destinationConfig:RotateTunnelAccessToken' :: Maybe DestinationConfig
destinationConfig =
        forall a. Maybe a
Prelude.Nothing,
      $sel:tunnelId:RotateTunnelAccessToken' :: Text
tunnelId = Text
pTunnelId_,
      $sel:clientMode:RotateTunnelAccessToken' :: ClientMode
clientMode = ClientMode
pClientMode_
    }

-- | Undocumented member.
rotateTunnelAccessToken_destinationConfig :: Lens.Lens' RotateTunnelAccessToken (Prelude.Maybe DestinationConfig)
rotateTunnelAccessToken_destinationConfig :: Lens' RotateTunnelAccessToken (Maybe DestinationConfig)
rotateTunnelAccessToken_destinationConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RotateTunnelAccessToken' {Maybe DestinationConfig
destinationConfig :: Maybe DestinationConfig
$sel:destinationConfig:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> Maybe DestinationConfig
destinationConfig} -> Maybe DestinationConfig
destinationConfig) (\s :: RotateTunnelAccessToken
s@RotateTunnelAccessToken' {} Maybe DestinationConfig
a -> RotateTunnelAccessToken
s {$sel:destinationConfig:RotateTunnelAccessToken' :: Maybe DestinationConfig
destinationConfig = Maybe DestinationConfig
a} :: RotateTunnelAccessToken)

-- | The tunnel for which you want to rotate the access tokens.
rotateTunnelAccessToken_tunnelId :: Lens.Lens' RotateTunnelAccessToken Prelude.Text
rotateTunnelAccessToken_tunnelId :: Lens' RotateTunnelAccessToken Text
rotateTunnelAccessToken_tunnelId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RotateTunnelAccessToken' {Text
tunnelId :: Text
$sel:tunnelId:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> Text
tunnelId} -> Text
tunnelId) (\s :: RotateTunnelAccessToken
s@RotateTunnelAccessToken' {} Text
a -> RotateTunnelAccessToken
s {$sel:tunnelId:RotateTunnelAccessToken' :: Text
tunnelId = Text
a} :: RotateTunnelAccessToken)

-- | The mode of the client that will use the client token, which can be
-- either the source or destination, or both source and destination.
rotateTunnelAccessToken_clientMode :: Lens.Lens' RotateTunnelAccessToken ClientMode
rotateTunnelAccessToken_clientMode :: Lens' RotateTunnelAccessToken ClientMode
rotateTunnelAccessToken_clientMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RotateTunnelAccessToken' {ClientMode
clientMode :: ClientMode
$sel:clientMode:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> ClientMode
clientMode} -> ClientMode
clientMode) (\s :: RotateTunnelAccessToken
s@RotateTunnelAccessToken' {} ClientMode
a -> RotateTunnelAccessToken
s {$sel:clientMode:RotateTunnelAccessToken' :: ClientMode
clientMode = ClientMode
a} :: RotateTunnelAccessToken)

instance Core.AWSRequest RotateTunnelAccessToken where
  type
    AWSResponse RotateTunnelAccessToken =
      RotateTunnelAccessTokenResponse
  request :: (Service -> Service)
-> RotateTunnelAccessToken -> Request RotateTunnelAccessToken
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 RotateTunnelAccessToken
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse RotateTunnelAccessToken)))
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 (Sensitive Text)
-> Maybe (Sensitive Text)
-> Maybe Text
-> Int
-> RotateTunnelAccessTokenResponse
RotateTunnelAccessTokenResponse'
            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
"destinationAccessToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"sourceAccessToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"tunnelArn")
            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 RotateTunnelAccessToken where
  hashWithSalt :: Int -> RotateTunnelAccessToken -> Int
hashWithSalt Int
_salt RotateTunnelAccessToken' {Maybe DestinationConfig
Text
ClientMode
clientMode :: ClientMode
tunnelId :: Text
destinationConfig :: Maybe DestinationConfig
$sel:clientMode:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> ClientMode
$sel:tunnelId:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> Text
$sel:destinationConfig:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> Maybe DestinationConfig
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DestinationConfig
destinationConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
tunnelId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ClientMode
clientMode

instance Prelude.NFData RotateTunnelAccessToken where
  rnf :: RotateTunnelAccessToken -> ()
rnf RotateTunnelAccessToken' {Maybe DestinationConfig
Text
ClientMode
clientMode :: ClientMode
tunnelId :: Text
destinationConfig :: Maybe DestinationConfig
$sel:clientMode:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> ClientMode
$sel:tunnelId:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> Text
$sel:destinationConfig:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> Maybe DestinationConfig
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DestinationConfig
destinationConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
tunnelId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ClientMode
clientMode

instance Data.ToHeaders RotateTunnelAccessToken where
  toHeaders :: RotateTunnelAccessToken -> 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
"IoTSecuredTunneling.RotateTunnelAccessToken" ::
                          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 RotateTunnelAccessToken where
  toJSON :: RotateTunnelAccessToken -> Value
toJSON RotateTunnelAccessToken' {Maybe DestinationConfig
Text
ClientMode
clientMode :: ClientMode
tunnelId :: Text
destinationConfig :: Maybe DestinationConfig
$sel:clientMode:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> ClientMode
$sel:tunnelId:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> Text
$sel:destinationConfig:RotateTunnelAccessToken' :: RotateTunnelAccessToken -> Maybe DestinationConfig
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"destinationConfig" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DestinationConfig
destinationConfig,
            forall a. a -> Maybe a
Prelude.Just (Key
"tunnelId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
tunnelId),
            forall a. a -> Maybe a
Prelude.Just (Key
"clientMode" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ClientMode
clientMode)
          ]
      )

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

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

-- | /See:/ 'newRotateTunnelAccessTokenResponse' smart constructor.
data RotateTunnelAccessTokenResponse = RotateTunnelAccessTokenResponse'
  { -- | The client access token that the destination local proxy uses to connect
    -- to IoT Secure Tunneling.
    RotateTunnelAccessTokenResponse -> Maybe (Sensitive Text)
destinationAccessToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The client access token that the source local proxy uses to connect to
    -- IoT Secure Tunneling.
    RotateTunnelAccessTokenResponse -> Maybe (Sensitive Text)
sourceAccessToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The Amazon Resource Name for the tunnel.
    RotateTunnelAccessTokenResponse -> Maybe Text
tunnelArn :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    RotateTunnelAccessTokenResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (RotateTunnelAccessTokenResponse
-> RotateTunnelAccessTokenResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RotateTunnelAccessTokenResponse
-> RotateTunnelAccessTokenResponse -> Bool
$c/= :: RotateTunnelAccessTokenResponse
-> RotateTunnelAccessTokenResponse -> Bool
== :: RotateTunnelAccessTokenResponse
-> RotateTunnelAccessTokenResponse -> Bool
$c== :: RotateTunnelAccessTokenResponse
-> RotateTunnelAccessTokenResponse -> Bool
Prelude.Eq, Int -> RotateTunnelAccessTokenResponse -> ShowS
[RotateTunnelAccessTokenResponse] -> ShowS
RotateTunnelAccessTokenResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RotateTunnelAccessTokenResponse] -> ShowS
$cshowList :: [RotateTunnelAccessTokenResponse] -> ShowS
show :: RotateTunnelAccessTokenResponse -> String
$cshow :: RotateTunnelAccessTokenResponse -> String
showsPrec :: Int -> RotateTunnelAccessTokenResponse -> ShowS
$cshowsPrec :: Int -> RotateTunnelAccessTokenResponse -> ShowS
Prelude.Show, forall x.
Rep RotateTunnelAccessTokenResponse x
-> RotateTunnelAccessTokenResponse
forall x.
RotateTunnelAccessTokenResponse
-> Rep RotateTunnelAccessTokenResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RotateTunnelAccessTokenResponse x
-> RotateTunnelAccessTokenResponse
$cfrom :: forall x.
RotateTunnelAccessTokenResponse
-> Rep RotateTunnelAccessTokenResponse x
Prelude.Generic)

-- |
-- Create a value of 'RotateTunnelAccessTokenResponse' 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:
--
-- 'destinationAccessToken', 'rotateTunnelAccessTokenResponse_destinationAccessToken' - The client access token that the destination local proxy uses to connect
-- to IoT Secure Tunneling.
--
-- 'sourceAccessToken', 'rotateTunnelAccessTokenResponse_sourceAccessToken' - The client access token that the source local proxy uses to connect to
-- IoT Secure Tunneling.
--
-- 'tunnelArn', 'rotateTunnelAccessTokenResponse_tunnelArn' - The Amazon Resource Name for the tunnel.
--
-- 'httpStatus', 'rotateTunnelAccessTokenResponse_httpStatus' - The response's http status code.
newRotateTunnelAccessTokenResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  RotateTunnelAccessTokenResponse
newRotateTunnelAccessTokenResponse :: Int -> RotateTunnelAccessTokenResponse
newRotateTunnelAccessTokenResponse Int
pHttpStatus_ =
  RotateTunnelAccessTokenResponse'
    { $sel:destinationAccessToken:RotateTunnelAccessTokenResponse' :: Maybe (Sensitive Text)
destinationAccessToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:sourceAccessToken:RotateTunnelAccessTokenResponse' :: Maybe (Sensitive Text)
sourceAccessToken = forall a. Maybe a
Prelude.Nothing,
      $sel:tunnelArn:RotateTunnelAccessTokenResponse' :: Maybe Text
tunnelArn = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:RotateTunnelAccessTokenResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The client access token that the destination local proxy uses to connect
-- to IoT Secure Tunneling.
rotateTunnelAccessTokenResponse_destinationAccessToken :: Lens.Lens' RotateTunnelAccessTokenResponse (Prelude.Maybe Prelude.Text)
rotateTunnelAccessTokenResponse_destinationAccessToken :: Lens' RotateTunnelAccessTokenResponse (Maybe Text)
rotateTunnelAccessTokenResponse_destinationAccessToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RotateTunnelAccessTokenResponse' {Maybe (Sensitive Text)
destinationAccessToken :: Maybe (Sensitive Text)
$sel:destinationAccessToken:RotateTunnelAccessTokenResponse' :: RotateTunnelAccessTokenResponse -> Maybe (Sensitive Text)
destinationAccessToken} -> Maybe (Sensitive Text)
destinationAccessToken) (\s :: RotateTunnelAccessTokenResponse
s@RotateTunnelAccessTokenResponse' {} Maybe (Sensitive Text)
a -> RotateTunnelAccessTokenResponse
s {$sel:destinationAccessToken:RotateTunnelAccessTokenResponse' :: Maybe (Sensitive Text)
destinationAccessToken = Maybe (Sensitive Text)
a} :: RotateTunnelAccessTokenResponse) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | The client access token that the source local proxy uses to connect to
-- IoT Secure Tunneling.
rotateTunnelAccessTokenResponse_sourceAccessToken :: Lens.Lens' RotateTunnelAccessTokenResponse (Prelude.Maybe Prelude.Text)
rotateTunnelAccessTokenResponse_sourceAccessToken :: Lens' RotateTunnelAccessTokenResponse (Maybe Text)
rotateTunnelAccessTokenResponse_sourceAccessToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RotateTunnelAccessTokenResponse' {Maybe (Sensitive Text)
sourceAccessToken :: Maybe (Sensitive Text)
$sel:sourceAccessToken:RotateTunnelAccessTokenResponse' :: RotateTunnelAccessTokenResponse -> Maybe (Sensitive Text)
sourceAccessToken} -> Maybe (Sensitive Text)
sourceAccessToken) (\s :: RotateTunnelAccessTokenResponse
s@RotateTunnelAccessTokenResponse' {} Maybe (Sensitive Text)
a -> RotateTunnelAccessTokenResponse
s {$sel:sourceAccessToken:RotateTunnelAccessTokenResponse' :: Maybe (Sensitive Text)
sourceAccessToken = Maybe (Sensitive Text)
a} :: RotateTunnelAccessTokenResponse) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | The Amazon Resource Name for the tunnel.
rotateTunnelAccessTokenResponse_tunnelArn :: Lens.Lens' RotateTunnelAccessTokenResponse (Prelude.Maybe Prelude.Text)
rotateTunnelAccessTokenResponse_tunnelArn :: Lens' RotateTunnelAccessTokenResponse (Maybe Text)
rotateTunnelAccessTokenResponse_tunnelArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RotateTunnelAccessTokenResponse' {Maybe Text
tunnelArn :: Maybe Text
$sel:tunnelArn:RotateTunnelAccessTokenResponse' :: RotateTunnelAccessTokenResponse -> Maybe Text
tunnelArn} -> Maybe Text
tunnelArn) (\s :: RotateTunnelAccessTokenResponse
s@RotateTunnelAccessTokenResponse' {} Maybe Text
a -> RotateTunnelAccessTokenResponse
s {$sel:tunnelArn:RotateTunnelAccessTokenResponse' :: Maybe Text
tunnelArn = Maybe Text
a} :: RotateTunnelAccessTokenResponse)

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

instance
  Prelude.NFData
    RotateTunnelAccessTokenResponse
  where
  rnf :: RotateTunnelAccessTokenResponse -> ()
rnf RotateTunnelAccessTokenResponse' {Int
Maybe Text
Maybe (Sensitive Text)
httpStatus :: Int
tunnelArn :: Maybe Text
sourceAccessToken :: Maybe (Sensitive Text)
destinationAccessToken :: Maybe (Sensitive Text)
$sel:httpStatus:RotateTunnelAccessTokenResponse' :: RotateTunnelAccessTokenResponse -> Int
$sel:tunnelArn:RotateTunnelAccessTokenResponse' :: RotateTunnelAccessTokenResponse -> Maybe Text
$sel:sourceAccessToken:RotateTunnelAccessTokenResponse' :: RotateTunnelAccessTokenResponse -> Maybe (Sensitive Text)
$sel:destinationAccessToken:RotateTunnelAccessTokenResponse' :: RotateTunnelAccessTokenResponse -> Maybe (Sensitive Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
destinationAccessToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
sourceAccessToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
tunnelArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus