{-# 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.WAFV2.GenerateMobileSdkReleaseUrl
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Generates a presigned download URL for the specified release of the
-- mobile SDK.
--
-- The mobile SDK is not generally available. Customers who have access to
-- the mobile SDK can use it to establish and manage WAF tokens for use in
-- HTTP(S) requests from a mobile device to WAF. For more information, see
-- <https://docs.aws.amazon.com/waf/latest/developerguide/waf-application-integration.html WAF client application integration>
-- in the /WAF Developer Guide/.
module Amazonka.WAFV2.GenerateMobileSdkReleaseUrl
  ( -- * Creating a Request
    GenerateMobileSdkReleaseUrl (..),
    newGenerateMobileSdkReleaseUrl,

    -- * Request Lenses
    generateMobileSdkReleaseUrl_platform,
    generateMobileSdkReleaseUrl_releaseVersion,

    -- * Destructuring the Response
    GenerateMobileSdkReleaseUrlResponse (..),
    newGenerateMobileSdkReleaseUrlResponse,

    -- * Response Lenses
    generateMobileSdkReleaseUrlResponse_url,
    generateMobileSdkReleaseUrlResponse_httpStatus,
  )
where

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
import Amazonka.WAFV2.Types

-- | /See:/ 'newGenerateMobileSdkReleaseUrl' smart constructor.
data GenerateMobileSdkReleaseUrl = GenerateMobileSdkReleaseUrl'
  { -- | The device platform.
    GenerateMobileSdkReleaseUrl -> Platform
platform :: Platform,
    -- | The release version. For the latest available version, specify @LATEST@.
    GenerateMobileSdkReleaseUrl -> Text
releaseVersion :: Prelude.Text
  }
  deriving (GenerateMobileSdkReleaseUrl -> GenerateMobileSdkReleaseUrl -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GenerateMobileSdkReleaseUrl -> GenerateMobileSdkReleaseUrl -> Bool
$c/= :: GenerateMobileSdkReleaseUrl -> GenerateMobileSdkReleaseUrl -> Bool
== :: GenerateMobileSdkReleaseUrl -> GenerateMobileSdkReleaseUrl -> Bool
$c== :: GenerateMobileSdkReleaseUrl -> GenerateMobileSdkReleaseUrl -> Bool
Prelude.Eq, ReadPrec [GenerateMobileSdkReleaseUrl]
ReadPrec GenerateMobileSdkReleaseUrl
Int -> ReadS GenerateMobileSdkReleaseUrl
ReadS [GenerateMobileSdkReleaseUrl]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GenerateMobileSdkReleaseUrl]
$creadListPrec :: ReadPrec [GenerateMobileSdkReleaseUrl]
readPrec :: ReadPrec GenerateMobileSdkReleaseUrl
$creadPrec :: ReadPrec GenerateMobileSdkReleaseUrl
readList :: ReadS [GenerateMobileSdkReleaseUrl]
$creadList :: ReadS [GenerateMobileSdkReleaseUrl]
readsPrec :: Int -> ReadS GenerateMobileSdkReleaseUrl
$creadsPrec :: Int -> ReadS GenerateMobileSdkReleaseUrl
Prelude.Read, Int -> GenerateMobileSdkReleaseUrl -> ShowS
[GenerateMobileSdkReleaseUrl] -> ShowS
GenerateMobileSdkReleaseUrl -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GenerateMobileSdkReleaseUrl] -> ShowS
$cshowList :: [GenerateMobileSdkReleaseUrl] -> ShowS
show :: GenerateMobileSdkReleaseUrl -> String
$cshow :: GenerateMobileSdkReleaseUrl -> String
showsPrec :: Int -> GenerateMobileSdkReleaseUrl -> ShowS
$cshowsPrec :: Int -> GenerateMobileSdkReleaseUrl -> ShowS
Prelude.Show, forall x.
Rep GenerateMobileSdkReleaseUrl x -> GenerateMobileSdkReleaseUrl
forall x.
GenerateMobileSdkReleaseUrl -> Rep GenerateMobileSdkReleaseUrl x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GenerateMobileSdkReleaseUrl x -> GenerateMobileSdkReleaseUrl
$cfrom :: forall x.
GenerateMobileSdkReleaseUrl -> Rep GenerateMobileSdkReleaseUrl x
Prelude.Generic)

-- |
-- Create a value of 'GenerateMobileSdkReleaseUrl' 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:
--
-- 'platform', 'generateMobileSdkReleaseUrl_platform' - The device platform.
--
-- 'releaseVersion', 'generateMobileSdkReleaseUrl_releaseVersion' - The release version. For the latest available version, specify @LATEST@.
newGenerateMobileSdkReleaseUrl ::
  -- | 'platform'
  Platform ->
  -- | 'releaseVersion'
  Prelude.Text ->
  GenerateMobileSdkReleaseUrl
newGenerateMobileSdkReleaseUrl :: Platform -> Text -> GenerateMobileSdkReleaseUrl
newGenerateMobileSdkReleaseUrl
  Platform
pPlatform_
  Text
pReleaseVersion_ =
    GenerateMobileSdkReleaseUrl'
      { $sel:platform:GenerateMobileSdkReleaseUrl' :: Platform
platform = Platform
pPlatform_,
        $sel:releaseVersion:GenerateMobileSdkReleaseUrl' :: Text
releaseVersion = Text
pReleaseVersion_
      }

-- | The device platform.
generateMobileSdkReleaseUrl_platform :: Lens.Lens' GenerateMobileSdkReleaseUrl Platform
generateMobileSdkReleaseUrl_platform :: Lens' GenerateMobileSdkReleaseUrl Platform
generateMobileSdkReleaseUrl_platform = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateMobileSdkReleaseUrl' {Platform
platform :: Platform
$sel:platform:GenerateMobileSdkReleaseUrl' :: GenerateMobileSdkReleaseUrl -> Platform
platform} -> Platform
platform) (\s :: GenerateMobileSdkReleaseUrl
s@GenerateMobileSdkReleaseUrl' {} Platform
a -> GenerateMobileSdkReleaseUrl
s {$sel:platform:GenerateMobileSdkReleaseUrl' :: Platform
platform = Platform
a} :: GenerateMobileSdkReleaseUrl)

-- | The release version. For the latest available version, specify @LATEST@.
generateMobileSdkReleaseUrl_releaseVersion :: Lens.Lens' GenerateMobileSdkReleaseUrl Prelude.Text
generateMobileSdkReleaseUrl_releaseVersion :: Lens' GenerateMobileSdkReleaseUrl Text
generateMobileSdkReleaseUrl_releaseVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateMobileSdkReleaseUrl' {Text
releaseVersion :: Text
$sel:releaseVersion:GenerateMobileSdkReleaseUrl' :: GenerateMobileSdkReleaseUrl -> Text
releaseVersion} -> Text
releaseVersion) (\s :: GenerateMobileSdkReleaseUrl
s@GenerateMobileSdkReleaseUrl' {} Text
a -> GenerateMobileSdkReleaseUrl
s {$sel:releaseVersion:GenerateMobileSdkReleaseUrl' :: Text
releaseVersion = Text
a} :: GenerateMobileSdkReleaseUrl)

instance Core.AWSRequest GenerateMobileSdkReleaseUrl where
  type
    AWSResponse GenerateMobileSdkReleaseUrl =
      GenerateMobileSdkReleaseUrlResponse
  request :: (Service -> Service)
-> GenerateMobileSdkReleaseUrl
-> Request GenerateMobileSdkReleaseUrl
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 GenerateMobileSdkReleaseUrl
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GenerateMobileSdkReleaseUrl)))
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 Text -> Int -> GenerateMobileSdkReleaseUrlResponse
GenerateMobileSdkReleaseUrlResponse'
            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
"Url")
            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 GenerateMobileSdkReleaseUrl where
  hashWithSalt :: Int -> GenerateMobileSdkReleaseUrl -> Int
hashWithSalt Int
_salt GenerateMobileSdkReleaseUrl' {Text
Platform
releaseVersion :: Text
platform :: Platform
$sel:releaseVersion:GenerateMobileSdkReleaseUrl' :: GenerateMobileSdkReleaseUrl -> Text
$sel:platform:GenerateMobileSdkReleaseUrl' :: GenerateMobileSdkReleaseUrl -> Platform
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Platform
platform
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
releaseVersion

instance Prelude.NFData GenerateMobileSdkReleaseUrl where
  rnf :: GenerateMobileSdkReleaseUrl -> ()
rnf GenerateMobileSdkReleaseUrl' {Text
Platform
releaseVersion :: Text
platform :: Platform
$sel:releaseVersion:GenerateMobileSdkReleaseUrl' :: GenerateMobileSdkReleaseUrl -> Text
$sel:platform:GenerateMobileSdkReleaseUrl' :: GenerateMobileSdkReleaseUrl -> Platform
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Platform
platform
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
releaseVersion

instance Data.ToHeaders GenerateMobileSdkReleaseUrl where
  toHeaders :: GenerateMobileSdkReleaseUrl -> 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
"AWSWAF_20190729.GenerateMobileSdkReleaseUrl" ::
                          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 GenerateMobileSdkReleaseUrl where
  toJSON :: GenerateMobileSdkReleaseUrl -> Value
toJSON GenerateMobileSdkReleaseUrl' {Text
Platform
releaseVersion :: Text
platform :: Platform
$sel:releaseVersion:GenerateMobileSdkReleaseUrl' :: GenerateMobileSdkReleaseUrl -> Text
$sel:platform:GenerateMobileSdkReleaseUrl' :: GenerateMobileSdkReleaseUrl -> Platform
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"Platform" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Platform
platform),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ReleaseVersion" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
releaseVersion)
          ]
      )

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

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

-- | /See:/ 'newGenerateMobileSdkReleaseUrlResponse' smart constructor.
data GenerateMobileSdkReleaseUrlResponse = GenerateMobileSdkReleaseUrlResponse'
  { -- | The presigned download URL for the specified SDK release.
    GenerateMobileSdkReleaseUrlResponse -> Maybe Text
url :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GenerateMobileSdkReleaseUrlResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GenerateMobileSdkReleaseUrlResponse
-> GenerateMobileSdkReleaseUrlResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GenerateMobileSdkReleaseUrlResponse
-> GenerateMobileSdkReleaseUrlResponse -> Bool
$c/= :: GenerateMobileSdkReleaseUrlResponse
-> GenerateMobileSdkReleaseUrlResponse -> Bool
== :: GenerateMobileSdkReleaseUrlResponse
-> GenerateMobileSdkReleaseUrlResponse -> Bool
$c== :: GenerateMobileSdkReleaseUrlResponse
-> GenerateMobileSdkReleaseUrlResponse -> Bool
Prelude.Eq, ReadPrec [GenerateMobileSdkReleaseUrlResponse]
ReadPrec GenerateMobileSdkReleaseUrlResponse
Int -> ReadS GenerateMobileSdkReleaseUrlResponse
ReadS [GenerateMobileSdkReleaseUrlResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GenerateMobileSdkReleaseUrlResponse]
$creadListPrec :: ReadPrec [GenerateMobileSdkReleaseUrlResponse]
readPrec :: ReadPrec GenerateMobileSdkReleaseUrlResponse
$creadPrec :: ReadPrec GenerateMobileSdkReleaseUrlResponse
readList :: ReadS [GenerateMobileSdkReleaseUrlResponse]
$creadList :: ReadS [GenerateMobileSdkReleaseUrlResponse]
readsPrec :: Int -> ReadS GenerateMobileSdkReleaseUrlResponse
$creadsPrec :: Int -> ReadS GenerateMobileSdkReleaseUrlResponse
Prelude.Read, Int -> GenerateMobileSdkReleaseUrlResponse -> ShowS
[GenerateMobileSdkReleaseUrlResponse] -> ShowS
GenerateMobileSdkReleaseUrlResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GenerateMobileSdkReleaseUrlResponse] -> ShowS
$cshowList :: [GenerateMobileSdkReleaseUrlResponse] -> ShowS
show :: GenerateMobileSdkReleaseUrlResponse -> String
$cshow :: GenerateMobileSdkReleaseUrlResponse -> String
showsPrec :: Int -> GenerateMobileSdkReleaseUrlResponse -> ShowS
$cshowsPrec :: Int -> GenerateMobileSdkReleaseUrlResponse -> ShowS
Prelude.Show, forall x.
Rep GenerateMobileSdkReleaseUrlResponse x
-> GenerateMobileSdkReleaseUrlResponse
forall x.
GenerateMobileSdkReleaseUrlResponse
-> Rep GenerateMobileSdkReleaseUrlResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GenerateMobileSdkReleaseUrlResponse x
-> GenerateMobileSdkReleaseUrlResponse
$cfrom :: forall x.
GenerateMobileSdkReleaseUrlResponse
-> Rep GenerateMobileSdkReleaseUrlResponse x
Prelude.Generic)

-- |
-- Create a value of 'GenerateMobileSdkReleaseUrlResponse' 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:
--
-- 'url', 'generateMobileSdkReleaseUrlResponse_url' - The presigned download URL for the specified SDK release.
--
-- 'httpStatus', 'generateMobileSdkReleaseUrlResponse_httpStatus' - The response's http status code.
newGenerateMobileSdkReleaseUrlResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GenerateMobileSdkReleaseUrlResponse
newGenerateMobileSdkReleaseUrlResponse :: Int -> GenerateMobileSdkReleaseUrlResponse
newGenerateMobileSdkReleaseUrlResponse Int
pHttpStatus_ =
  GenerateMobileSdkReleaseUrlResponse'
    { $sel:url:GenerateMobileSdkReleaseUrlResponse' :: Maybe Text
url =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GenerateMobileSdkReleaseUrlResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The presigned download URL for the specified SDK release.
generateMobileSdkReleaseUrlResponse_url :: Lens.Lens' GenerateMobileSdkReleaseUrlResponse (Prelude.Maybe Prelude.Text)
generateMobileSdkReleaseUrlResponse_url :: Lens' GenerateMobileSdkReleaseUrlResponse (Maybe Text)
generateMobileSdkReleaseUrlResponse_url = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GenerateMobileSdkReleaseUrlResponse' {Maybe Text
url :: Maybe Text
$sel:url:GenerateMobileSdkReleaseUrlResponse' :: GenerateMobileSdkReleaseUrlResponse -> Maybe Text
url} -> Maybe Text
url) (\s :: GenerateMobileSdkReleaseUrlResponse
s@GenerateMobileSdkReleaseUrlResponse' {} Maybe Text
a -> GenerateMobileSdkReleaseUrlResponse
s {$sel:url:GenerateMobileSdkReleaseUrlResponse' :: Maybe Text
url = Maybe Text
a} :: GenerateMobileSdkReleaseUrlResponse)

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

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