packages feed

amazonka-workspaces-web-2.0: gen/Amazonka/WorkSpacesWeb/CreateNetworkSettings.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.WorkSpacesWeb.CreateNetworkSettings
-- 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 network settings resource that can be associated with a web
-- portal. Once associated with a web portal, network settings define how
-- streaming instances will connect with your specified VPC.
module Amazonka.WorkSpacesWeb.CreateNetworkSettings
  ( -- * Creating a Request
    CreateNetworkSettings (..),
    newCreateNetworkSettings,

    -- * Request Lenses
    createNetworkSettings_clientToken,
    createNetworkSettings_tags,
    createNetworkSettings_securityGroupIds,
    createNetworkSettings_subnetIds,
    createNetworkSettings_vpcId,

    -- * Destructuring the Response
    CreateNetworkSettingsResponse (..),
    newCreateNetworkSettingsResponse,

    -- * Response Lenses
    createNetworkSettingsResponse_httpStatus,
    createNetworkSettingsResponse_networkSettingsArn,
  )
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.WorkSpacesWeb.Types

-- | /See:/ 'newCreateNetworkSettings' smart constructor.
data CreateNetworkSettings = CreateNetworkSettings'
  { -- | A unique, case-sensitive identifier that you provide to ensure the
    -- idempotency of the request. Idempotency ensures that an API request
    -- completes only once. With an idempotent request, if the original request
    -- completes successfully, subsequent retries with the same client token
    -- returns the result from the original successful request.
    --
    -- If you do not specify a client token, one is automatically generated by
    -- the AWS SDK.
    clientToken :: Prelude.Maybe Prelude.Text,
    -- | The tags to add to the network settings resource. A tag is a key-value
    -- pair.
    tags :: Prelude.Maybe [Data.Sensitive Tag],
    -- | One or more security groups used to control access from streaming
    -- instances to your VPC.
    securityGroupIds :: Prelude.NonEmpty Prelude.Text,
    -- | The subnets in which network interfaces are created to connect streaming
    -- instances to your VPC. At least two of these subnets must be in
    -- different availability zones.
    subnetIds :: Prelude.NonEmpty Prelude.Text,
    -- | The VPC that streaming instances will connect to.
    vpcId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateNetworkSettings' 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:
--
-- 'clientToken', 'createNetworkSettings_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. Idempotency ensures that an API request
-- completes only once. With an idempotent request, if the original request
-- completes successfully, subsequent retries with the same client token
-- returns the result from the original successful request.
--
-- If you do not specify a client token, one is automatically generated by
-- the AWS SDK.
--
-- 'tags', 'createNetworkSettings_tags' - The tags to add to the network settings resource. A tag is a key-value
-- pair.
--
-- 'securityGroupIds', 'createNetworkSettings_securityGroupIds' - One or more security groups used to control access from streaming
-- instances to your VPC.
--
-- 'subnetIds', 'createNetworkSettings_subnetIds' - The subnets in which network interfaces are created to connect streaming
-- instances to your VPC. At least two of these subnets must be in
-- different availability zones.
--
-- 'vpcId', 'createNetworkSettings_vpcId' - The VPC that streaming instances will connect to.
newCreateNetworkSettings ::
  -- | 'securityGroupIds'
  Prelude.NonEmpty Prelude.Text ->
  -- | 'subnetIds'
  Prelude.NonEmpty Prelude.Text ->
  -- | 'vpcId'
  Prelude.Text ->
  CreateNetworkSettings
newCreateNetworkSettings
  pSecurityGroupIds_
  pSubnetIds_
  pVpcId_ =
    CreateNetworkSettings'
      { clientToken =
          Prelude.Nothing,
        tags = Prelude.Nothing,
        securityGroupIds =
          Lens.coerced Lens.# pSecurityGroupIds_,
        subnetIds = Lens.coerced Lens.# pSubnetIds_,
        vpcId = pVpcId_
      }

-- | A unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. Idempotency ensures that an API request
-- completes only once. With an idempotent request, if the original request
-- completes successfully, subsequent retries with the same client token
-- returns the result from the original successful request.
--
-- If you do not specify a client token, one is automatically generated by
-- the AWS SDK.
createNetworkSettings_clientToken :: Lens.Lens' CreateNetworkSettings (Prelude.Maybe Prelude.Text)
createNetworkSettings_clientToken = Lens.lens (\CreateNetworkSettings' {clientToken} -> clientToken) (\s@CreateNetworkSettings' {} a -> s {clientToken = a} :: CreateNetworkSettings)

-- | The tags to add to the network settings resource. A tag is a key-value
-- pair.
createNetworkSettings_tags :: Lens.Lens' CreateNetworkSettings (Prelude.Maybe [Tag])
createNetworkSettings_tags = Lens.lens (\CreateNetworkSettings' {tags} -> tags) (\s@CreateNetworkSettings' {} a -> s {tags = a} :: CreateNetworkSettings) Prelude.. Lens.mapping Lens.coerced

-- | One or more security groups used to control access from streaming
-- instances to your VPC.
createNetworkSettings_securityGroupIds :: Lens.Lens' CreateNetworkSettings (Prelude.NonEmpty Prelude.Text)
createNetworkSettings_securityGroupIds = Lens.lens (\CreateNetworkSettings' {securityGroupIds} -> securityGroupIds) (\s@CreateNetworkSettings' {} a -> s {securityGroupIds = a} :: CreateNetworkSettings) Prelude.. Lens.coerced

-- | The subnets in which network interfaces are created to connect streaming
-- instances to your VPC. At least two of these subnets must be in
-- different availability zones.
createNetworkSettings_subnetIds :: Lens.Lens' CreateNetworkSettings (Prelude.NonEmpty Prelude.Text)
createNetworkSettings_subnetIds = Lens.lens (\CreateNetworkSettings' {subnetIds} -> subnetIds) (\s@CreateNetworkSettings' {} a -> s {subnetIds = a} :: CreateNetworkSettings) Prelude.. Lens.coerced

-- | The VPC that streaming instances will connect to.
createNetworkSettings_vpcId :: Lens.Lens' CreateNetworkSettings Prelude.Text
createNetworkSettings_vpcId = Lens.lens (\CreateNetworkSettings' {vpcId} -> vpcId) (\s@CreateNetworkSettings' {} a -> s {vpcId = a} :: CreateNetworkSettings)

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

instance Prelude.Hashable CreateNetworkSettings where
  hashWithSalt _salt CreateNetworkSettings' {..} =
    _salt
      `Prelude.hashWithSalt` clientToken
      `Prelude.hashWithSalt` tags
      `Prelude.hashWithSalt` securityGroupIds
      `Prelude.hashWithSalt` subnetIds
      `Prelude.hashWithSalt` vpcId

instance Prelude.NFData CreateNetworkSettings where
  rnf CreateNetworkSettings' {..} =
    Prelude.rnf clientToken
      `Prelude.seq` Prelude.rnf tags
      `Prelude.seq` Prelude.rnf securityGroupIds
      `Prelude.seq` Prelude.rnf subnetIds
      `Prelude.seq` Prelude.rnf vpcId

instance Data.ToHeaders CreateNetworkSettings where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateNetworkSettings where
  toJSON CreateNetworkSettings' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("clientToken" Data..=) Prelude.<$> clientToken,
            ("tags" Data..=) Prelude.<$> tags,
            Prelude.Just
              ("securityGroupIds" Data..= securityGroupIds),
            Prelude.Just ("subnetIds" Data..= subnetIds),
            Prelude.Just ("vpcId" Data..= vpcId)
          ]
      )

instance Data.ToPath CreateNetworkSettings where
  toPath = Prelude.const "/networkSettings"

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

-- | /See:/ 'newCreateNetworkSettingsResponse' smart constructor.
data CreateNetworkSettingsResponse = CreateNetworkSettingsResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | The ARN of the network settings.
    networkSettingsArn :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateNetworkSettingsResponse' 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', 'createNetworkSettingsResponse_httpStatus' - The response's http status code.
--
-- 'networkSettingsArn', 'createNetworkSettingsResponse_networkSettingsArn' - The ARN of the network settings.
newCreateNetworkSettingsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'networkSettingsArn'
  Prelude.Text ->
  CreateNetworkSettingsResponse
newCreateNetworkSettingsResponse
  pHttpStatus_
  pNetworkSettingsArn_ =
    CreateNetworkSettingsResponse'
      { httpStatus =
          pHttpStatus_,
        networkSettingsArn = pNetworkSettingsArn_
      }

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

-- | The ARN of the network settings.
createNetworkSettingsResponse_networkSettingsArn :: Lens.Lens' CreateNetworkSettingsResponse Prelude.Text
createNetworkSettingsResponse_networkSettingsArn = Lens.lens (\CreateNetworkSettingsResponse' {networkSettingsArn} -> networkSettingsArn) (\s@CreateNetworkSettingsResponse' {} a -> s {networkSettingsArn = a} :: CreateNetworkSettingsResponse)

instance Prelude.NFData CreateNetworkSettingsResponse where
  rnf CreateNetworkSettingsResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf networkSettingsArn