{-# 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.CognitoIdentityProvider.UpdateDeviceStatus
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the device status.
module Amazonka.CognitoIdentityProvider.UpdateDeviceStatus
  ( -- * Creating a Request
    UpdateDeviceStatus (..),
    newUpdateDeviceStatus,

    -- * Request Lenses
    updateDeviceStatus_deviceRememberedStatus,
    updateDeviceStatus_accessToken,
    updateDeviceStatus_deviceKey,

    -- * Destructuring the Response
    UpdateDeviceStatusResponse (..),
    newUpdateDeviceStatusResponse,

    -- * Response Lenses
    updateDeviceStatusResponse_httpStatus,
  )
where

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

-- | Represents the request to update the device status.
--
-- /See:/ 'newUpdateDeviceStatus' smart constructor.
data UpdateDeviceStatus = UpdateDeviceStatus'
  { -- | The status of whether a device is remembered.
    UpdateDeviceStatus -> Maybe DeviceRememberedStatusType
deviceRememberedStatus :: Prelude.Maybe DeviceRememberedStatusType,
    -- | A valid access token that Amazon Cognito issued to the user whose device
    -- status you want to update.
    UpdateDeviceStatus -> Sensitive Text
accessToken :: Data.Sensitive Prelude.Text,
    -- | The device key.
    UpdateDeviceStatus -> Text
deviceKey :: Prelude.Text
  }
  deriving (UpdateDeviceStatus -> UpdateDeviceStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDeviceStatus -> UpdateDeviceStatus -> Bool
$c/= :: UpdateDeviceStatus -> UpdateDeviceStatus -> Bool
== :: UpdateDeviceStatus -> UpdateDeviceStatus -> Bool
$c== :: UpdateDeviceStatus -> UpdateDeviceStatus -> Bool
Prelude.Eq, Int -> UpdateDeviceStatus -> ShowS
[UpdateDeviceStatus] -> ShowS
UpdateDeviceStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDeviceStatus] -> ShowS
$cshowList :: [UpdateDeviceStatus] -> ShowS
show :: UpdateDeviceStatus -> String
$cshow :: UpdateDeviceStatus -> String
showsPrec :: Int -> UpdateDeviceStatus -> ShowS
$cshowsPrec :: Int -> UpdateDeviceStatus -> ShowS
Prelude.Show, forall x. Rep UpdateDeviceStatus x -> UpdateDeviceStatus
forall x. UpdateDeviceStatus -> Rep UpdateDeviceStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateDeviceStatus x -> UpdateDeviceStatus
$cfrom :: forall x. UpdateDeviceStatus -> Rep UpdateDeviceStatus x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDeviceStatus' 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:
--
-- 'deviceRememberedStatus', 'updateDeviceStatus_deviceRememberedStatus' - The status of whether a device is remembered.
--
-- 'accessToken', 'updateDeviceStatus_accessToken' - A valid access token that Amazon Cognito issued to the user whose device
-- status you want to update.
--
-- 'deviceKey', 'updateDeviceStatus_deviceKey' - The device key.
newUpdateDeviceStatus ::
  -- | 'accessToken'
  Prelude.Text ->
  -- | 'deviceKey'
  Prelude.Text ->
  UpdateDeviceStatus
newUpdateDeviceStatus :: Text -> Text -> UpdateDeviceStatus
newUpdateDeviceStatus Text
pAccessToken_ Text
pDeviceKey_ =
  UpdateDeviceStatus'
    { $sel:deviceRememberedStatus:UpdateDeviceStatus' :: Maybe DeviceRememberedStatusType
deviceRememberedStatus =
        forall a. Maybe a
Prelude.Nothing,
      $sel:accessToken:UpdateDeviceStatus' :: Sensitive Text
accessToken = forall a. Iso' (Sensitive a) a
Data._Sensitive forall t b. AReview t b -> b -> t
Lens.# Text
pAccessToken_,
      $sel:deviceKey:UpdateDeviceStatus' :: Text
deviceKey = Text
pDeviceKey_
    }

-- | The status of whether a device is remembered.
updateDeviceStatus_deviceRememberedStatus :: Lens.Lens' UpdateDeviceStatus (Prelude.Maybe DeviceRememberedStatusType)
updateDeviceStatus_deviceRememberedStatus :: Lens' UpdateDeviceStatus (Maybe DeviceRememberedStatusType)
updateDeviceStatus_deviceRememberedStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDeviceStatus' {Maybe DeviceRememberedStatusType
deviceRememberedStatus :: Maybe DeviceRememberedStatusType
$sel:deviceRememberedStatus:UpdateDeviceStatus' :: UpdateDeviceStatus -> Maybe DeviceRememberedStatusType
deviceRememberedStatus} -> Maybe DeviceRememberedStatusType
deviceRememberedStatus) (\s :: UpdateDeviceStatus
s@UpdateDeviceStatus' {} Maybe DeviceRememberedStatusType
a -> UpdateDeviceStatus
s {$sel:deviceRememberedStatus:UpdateDeviceStatus' :: Maybe DeviceRememberedStatusType
deviceRememberedStatus = Maybe DeviceRememberedStatusType
a} :: UpdateDeviceStatus)

-- | A valid access token that Amazon Cognito issued to the user whose device
-- status you want to update.
updateDeviceStatus_accessToken :: Lens.Lens' UpdateDeviceStatus Prelude.Text
updateDeviceStatus_accessToken :: Lens' UpdateDeviceStatus Text
updateDeviceStatus_accessToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDeviceStatus' {Sensitive Text
accessToken :: Sensitive Text
$sel:accessToken:UpdateDeviceStatus' :: UpdateDeviceStatus -> Sensitive Text
accessToken} -> Sensitive Text
accessToken) (\s :: UpdateDeviceStatus
s@UpdateDeviceStatus' {} Sensitive Text
a -> UpdateDeviceStatus
s {$sel:accessToken:UpdateDeviceStatus' :: Sensitive Text
accessToken = Sensitive Text
a} :: UpdateDeviceStatus) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a. Iso' (Sensitive a) a
Data._Sensitive

-- | The device key.
updateDeviceStatus_deviceKey :: Lens.Lens' UpdateDeviceStatus Prelude.Text
updateDeviceStatus_deviceKey :: Lens' UpdateDeviceStatus Text
updateDeviceStatus_deviceKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDeviceStatus' {Text
deviceKey :: Text
$sel:deviceKey:UpdateDeviceStatus' :: UpdateDeviceStatus -> Text
deviceKey} -> Text
deviceKey) (\s :: UpdateDeviceStatus
s@UpdateDeviceStatus' {} Text
a -> UpdateDeviceStatus
s {$sel:deviceKey:UpdateDeviceStatus' :: Text
deviceKey = Text
a} :: UpdateDeviceStatus)

instance Core.AWSRequest UpdateDeviceStatus where
  type
    AWSResponse UpdateDeviceStatus =
      UpdateDeviceStatusResponse
  request :: (Service -> Service)
-> UpdateDeviceStatus -> Request UpdateDeviceStatus
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 UpdateDeviceStatus
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateDeviceStatus)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> UpdateDeviceStatusResponse
UpdateDeviceStatusResponse'
            forall (f :: * -> *) a b. Functor 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 UpdateDeviceStatus where
  hashWithSalt :: Int -> UpdateDeviceStatus -> Int
hashWithSalt Int
_salt UpdateDeviceStatus' {Maybe DeviceRememberedStatusType
Text
Sensitive Text
deviceKey :: Text
accessToken :: Sensitive Text
deviceRememberedStatus :: Maybe DeviceRememberedStatusType
$sel:deviceKey:UpdateDeviceStatus' :: UpdateDeviceStatus -> Text
$sel:accessToken:UpdateDeviceStatus' :: UpdateDeviceStatus -> Sensitive Text
$sel:deviceRememberedStatus:UpdateDeviceStatus' :: UpdateDeviceStatus -> Maybe DeviceRememberedStatusType
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DeviceRememberedStatusType
deviceRememberedStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Sensitive Text
accessToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
deviceKey

instance Prelude.NFData UpdateDeviceStatus where
  rnf :: UpdateDeviceStatus -> ()
rnf UpdateDeviceStatus' {Maybe DeviceRememberedStatusType
Text
Sensitive Text
deviceKey :: Text
accessToken :: Sensitive Text
deviceRememberedStatus :: Maybe DeviceRememberedStatusType
$sel:deviceKey:UpdateDeviceStatus' :: UpdateDeviceStatus -> Text
$sel:accessToken:UpdateDeviceStatus' :: UpdateDeviceStatus -> Sensitive Text
$sel:deviceRememberedStatus:UpdateDeviceStatus' :: UpdateDeviceStatus -> Maybe DeviceRememberedStatusType
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DeviceRememberedStatusType
deviceRememberedStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Sensitive Text
accessToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
deviceKey

instance Data.ToHeaders UpdateDeviceStatus where
  toHeaders :: UpdateDeviceStatus -> 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
"AWSCognitoIdentityProviderService.UpdateDeviceStatus" ::
                          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 UpdateDeviceStatus where
  toJSON :: UpdateDeviceStatus -> Value
toJSON UpdateDeviceStatus' {Maybe DeviceRememberedStatusType
Text
Sensitive Text
deviceKey :: Text
accessToken :: Sensitive Text
deviceRememberedStatus :: Maybe DeviceRememberedStatusType
$sel:deviceKey:UpdateDeviceStatus' :: UpdateDeviceStatus -> Text
$sel:accessToken:UpdateDeviceStatus' :: UpdateDeviceStatus -> Sensitive Text
$sel:deviceRememberedStatus:UpdateDeviceStatus' :: UpdateDeviceStatus -> Maybe DeviceRememberedStatusType
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"DeviceRememberedStatus" 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 DeviceRememberedStatusType
deviceRememberedStatus,
            forall a. a -> Maybe a
Prelude.Just (Key
"AccessToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Sensitive Text
accessToken),
            forall a. a -> Maybe a
Prelude.Just (Key
"DeviceKey" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
deviceKey)
          ]
      )

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

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

-- | The response to the request to update the device status.
--
-- /See:/ 'newUpdateDeviceStatusResponse' smart constructor.
data UpdateDeviceStatusResponse = UpdateDeviceStatusResponse'
  { -- | The response's http status code.
    UpdateDeviceStatusResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (UpdateDeviceStatusResponse -> UpdateDeviceStatusResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDeviceStatusResponse -> UpdateDeviceStatusResponse -> Bool
$c/= :: UpdateDeviceStatusResponse -> UpdateDeviceStatusResponse -> Bool
== :: UpdateDeviceStatusResponse -> UpdateDeviceStatusResponse -> Bool
$c== :: UpdateDeviceStatusResponse -> UpdateDeviceStatusResponse -> Bool
Prelude.Eq, ReadPrec [UpdateDeviceStatusResponse]
ReadPrec UpdateDeviceStatusResponse
Int -> ReadS UpdateDeviceStatusResponse
ReadS [UpdateDeviceStatusResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateDeviceStatusResponse]
$creadListPrec :: ReadPrec [UpdateDeviceStatusResponse]
readPrec :: ReadPrec UpdateDeviceStatusResponse
$creadPrec :: ReadPrec UpdateDeviceStatusResponse
readList :: ReadS [UpdateDeviceStatusResponse]
$creadList :: ReadS [UpdateDeviceStatusResponse]
readsPrec :: Int -> ReadS UpdateDeviceStatusResponse
$creadsPrec :: Int -> ReadS UpdateDeviceStatusResponse
Prelude.Read, Int -> UpdateDeviceStatusResponse -> ShowS
[UpdateDeviceStatusResponse] -> ShowS
UpdateDeviceStatusResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDeviceStatusResponse] -> ShowS
$cshowList :: [UpdateDeviceStatusResponse] -> ShowS
show :: UpdateDeviceStatusResponse -> String
$cshow :: UpdateDeviceStatusResponse -> String
showsPrec :: Int -> UpdateDeviceStatusResponse -> ShowS
$cshowsPrec :: Int -> UpdateDeviceStatusResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateDeviceStatusResponse x -> UpdateDeviceStatusResponse
forall x.
UpdateDeviceStatusResponse -> Rep UpdateDeviceStatusResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateDeviceStatusResponse x -> UpdateDeviceStatusResponse
$cfrom :: forall x.
UpdateDeviceStatusResponse -> Rep UpdateDeviceStatusResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDeviceStatusResponse' 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:
--
-- 'httpStatus', 'updateDeviceStatusResponse_httpStatus' - The response's http status code.
newUpdateDeviceStatusResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateDeviceStatusResponse
newUpdateDeviceStatusResponse :: Int -> UpdateDeviceStatusResponse
newUpdateDeviceStatusResponse Int
pHttpStatus_ =
  UpdateDeviceStatusResponse'
    { $sel:httpStatus:UpdateDeviceStatusResponse' :: Int
httpStatus =
        Int
pHttpStatus_
    }

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

instance Prelude.NFData UpdateDeviceStatusResponse where
  rnf :: UpdateDeviceStatusResponse -> ()
rnf UpdateDeviceStatusResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateDeviceStatusResponse' :: UpdateDeviceStatusResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus