packages feed

amazonka-cognito-idp-2.0: gen/Amazonka/CognitoIdentityProvider/CreateResourceServer.hs

{-# 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.CreateResourceServer
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a new OAuth2.0 resource server and defines custom scopes within
-- it.
module Amazonka.CognitoIdentityProvider.CreateResourceServer
  ( -- * Creating a Request
    CreateResourceServer (..),
    newCreateResourceServer,

    -- * Request Lenses
    createResourceServer_scopes,
    createResourceServer_userPoolId,
    createResourceServer_identifier,
    createResourceServer_name,

    -- * Destructuring the Response
    CreateResourceServerResponse (..),
    newCreateResourceServerResponse,

    -- * Response Lenses
    createResourceServerResponse_httpStatus,
    createResourceServerResponse_resourceServer,
  )
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

-- | /See:/ 'newCreateResourceServer' smart constructor.
data CreateResourceServer = CreateResourceServer'
  { -- | A list of scopes. Each scope is a key-value map with the keys @name@ and
    -- @description@.
    scopes :: Prelude.Maybe [ResourceServerScopeType],
    -- | The user pool ID for the user pool.
    userPoolId :: Prelude.Text,
    -- | A unique resource server identifier for the resource server. This could
    -- be an HTTPS endpoint where the resource server is located, such as
    -- @https:\/\/my-weather-api.example.com@.
    identifier :: Prelude.Text,
    -- | A friendly name for the resource server.
    name :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateResourceServer' 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:
--
-- 'scopes', 'createResourceServer_scopes' - A list of scopes. Each scope is a key-value map with the keys @name@ and
-- @description@.
--
-- 'userPoolId', 'createResourceServer_userPoolId' - The user pool ID for the user pool.
--
-- 'identifier', 'createResourceServer_identifier' - A unique resource server identifier for the resource server. This could
-- be an HTTPS endpoint where the resource server is located, such as
-- @https:\/\/my-weather-api.example.com@.
--
-- 'name', 'createResourceServer_name' - A friendly name for the resource server.
newCreateResourceServer ::
  -- | 'userPoolId'
  Prelude.Text ->
  -- | 'identifier'
  Prelude.Text ->
  -- | 'name'
  Prelude.Text ->
  CreateResourceServer
newCreateResourceServer
  pUserPoolId_
  pIdentifier_
  pName_ =
    CreateResourceServer'
      { scopes = Prelude.Nothing,
        userPoolId = pUserPoolId_,
        identifier = pIdentifier_,
        name = pName_
      }

-- | A list of scopes. Each scope is a key-value map with the keys @name@ and
-- @description@.
createResourceServer_scopes :: Lens.Lens' CreateResourceServer (Prelude.Maybe [ResourceServerScopeType])
createResourceServer_scopes = Lens.lens (\CreateResourceServer' {scopes} -> scopes) (\s@CreateResourceServer' {} a -> s {scopes = a} :: CreateResourceServer) Prelude.. Lens.mapping Lens.coerced

-- | The user pool ID for the user pool.
createResourceServer_userPoolId :: Lens.Lens' CreateResourceServer Prelude.Text
createResourceServer_userPoolId = Lens.lens (\CreateResourceServer' {userPoolId} -> userPoolId) (\s@CreateResourceServer' {} a -> s {userPoolId = a} :: CreateResourceServer)

-- | A unique resource server identifier for the resource server. This could
-- be an HTTPS endpoint where the resource server is located, such as
-- @https:\/\/my-weather-api.example.com@.
createResourceServer_identifier :: Lens.Lens' CreateResourceServer Prelude.Text
createResourceServer_identifier = Lens.lens (\CreateResourceServer' {identifier} -> identifier) (\s@CreateResourceServer' {} a -> s {identifier = a} :: CreateResourceServer)

-- | A friendly name for the resource server.
createResourceServer_name :: Lens.Lens' CreateResourceServer Prelude.Text
createResourceServer_name = Lens.lens (\CreateResourceServer' {name} -> name) (\s@CreateResourceServer' {} a -> s {name = a} :: CreateResourceServer)

instance Core.AWSRequest CreateResourceServer where
  type
    AWSResponse CreateResourceServer =
      CreateResourceServerResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          CreateResourceServerResponse'
            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
            Prelude.<*> (x Data..:> "ResourceServer")
      )

instance Prelude.Hashable CreateResourceServer where
  hashWithSalt _salt CreateResourceServer' {..} =
    _salt
      `Prelude.hashWithSalt` scopes
      `Prelude.hashWithSalt` userPoolId
      `Prelude.hashWithSalt` identifier
      `Prelude.hashWithSalt` name

instance Prelude.NFData CreateResourceServer where
  rnf CreateResourceServer' {..} =
    Prelude.rnf scopes
      `Prelude.seq` Prelude.rnf userPoolId
      `Prelude.seq` Prelude.rnf identifier
      `Prelude.seq` Prelude.rnf name

instance Data.ToHeaders CreateResourceServer where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "X-Amz-Target"
              Data.=# ( "AWSCognitoIdentityProviderService.CreateResourceServer" ::
                          Prelude.ByteString
                      ),
            "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateResourceServer where
  toJSON CreateResourceServer' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("Scopes" Data..=) Prelude.<$> scopes,
            Prelude.Just ("UserPoolId" Data..= userPoolId),
            Prelude.Just ("Identifier" Data..= identifier),
            Prelude.Just ("Name" Data..= name)
          ]
      )

instance Data.ToPath CreateResourceServer where
  toPath = Prelude.const "/"

instance Data.ToQuery CreateResourceServer where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newCreateResourceServerResponse' smart constructor.
data CreateResourceServerResponse = CreateResourceServerResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | The newly created resource server.
    resourceServer :: ResourceServerType
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateResourceServerResponse' 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', 'createResourceServerResponse_httpStatus' - The response's http status code.
--
-- 'resourceServer', 'createResourceServerResponse_resourceServer' - The newly created resource server.
newCreateResourceServerResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'resourceServer'
  ResourceServerType ->
  CreateResourceServerResponse
newCreateResourceServerResponse
  pHttpStatus_
  pResourceServer_ =
    CreateResourceServerResponse'
      { httpStatus =
          pHttpStatus_,
        resourceServer = pResourceServer_
      }

-- | The response's http status code.
createResourceServerResponse_httpStatus :: Lens.Lens' CreateResourceServerResponse Prelude.Int
createResourceServerResponse_httpStatus = Lens.lens (\CreateResourceServerResponse' {httpStatus} -> httpStatus) (\s@CreateResourceServerResponse' {} a -> s {httpStatus = a} :: CreateResourceServerResponse)

-- | The newly created resource server.
createResourceServerResponse_resourceServer :: Lens.Lens' CreateResourceServerResponse ResourceServerType
createResourceServerResponse_resourceServer = Lens.lens (\CreateResourceServerResponse' {resourceServer} -> resourceServer) (\s@CreateResourceServerResponse' {} a -> s {resourceServer = a} :: CreateResourceServerResponse)

instance Prelude.NFData CreateResourceServerResponse where
  rnf CreateResourceServerResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf resourceServer