packages feed

amazonka-lightsail-2.0: gen/Amazonka/Lightsail/SetResourceAccessForBucket.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.Lightsail.SetResourceAccessForBucket
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Sets the Amazon Lightsail resources that can access the specified
-- Lightsail bucket.
--
-- Lightsail buckets currently support setting access for Lightsail
-- instances in the same Amazon Web Services Region.
module Amazonka.Lightsail.SetResourceAccessForBucket
  ( -- * Creating a Request
    SetResourceAccessForBucket (..),
    newSetResourceAccessForBucket,

    -- * Request Lenses
    setResourceAccessForBucket_resourceName,
    setResourceAccessForBucket_bucketName,
    setResourceAccessForBucket_access,

    -- * Destructuring the Response
    SetResourceAccessForBucketResponse (..),
    newSetResourceAccessForBucketResponse,

    -- * Response Lenses
    setResourceAccessForBucketResponse_operations,
    setResourceAccessForBucketResponse_httpStatus,
  )
where

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

-- | /See:/ 'newSetResourceAccessForBucket' smart constructor.
data SetResourceAccessForBucket = SetResourceAccessForBucket'
  { -- | The name of the Lightsail instance for which to set bucket access. The
    -- instance must be in a running or stopped state.
    resourceName :: Prelude.Text,
    -- | The name of the bucket for which to set access to another Lightsail
    -- resource.
    bucketName :: Prelude.Text,
    -- | The access setting.
    --
    -- The following access settings are available:
    --
    -- -   @allow@ - Allows access to the bucket and its objects.
    --
    -- -   @deny@ - Denies access to the bucket and its objects. Use this
    --     setting to remove access for a resource previously set to @allow@.
    access :: ResourceBucketAccess
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'SetResourceAccessForBucket' 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:
--
-- 'resourceName', 'setResourceAccessForBucket_resourceName' - The name of the Lightsail instance for which to set bucket access. The
-- instance must be in a running or stopped state.
--
-- 'bucketName', 'setResourceAccessForBucket_bucketName' - The name of the bucket for which to set access to another Lightsail
-- resource.
--
-- 'access', 'setResourceAccessForBucket_access' - The access setting.
--
-- The following access settings are available:
--
-- -   @allow@ - Allows access to the bucket and its objects.
--
-- -   @deny@ - Denies access to the bucket and its objects. Use this
--     setting to remove access for a resource previously set to @allow@.
newSetResourceAccessForBucket ::
  -- | 'resourceName'
  Prelude.Text ->
  -- | 'bucketName'
  Prelude.Text ->
  -- | 'access'
  ResourceBucketAccess ->
  SetResourceAccessForBucket
newSetResourceAccessForBucket
  pResourceName_
  pBucketName_
  pAccess_ =
    SetResourceAccessForBucket'
      { resourceName =
          pResourceName_,
        bucketName = pBucketName_,
        access = pAccess_
      }

-- | The name of the Lightsail instance for which to set bucket access. The
-- instance must be in a running or stopped state.
setResourceAccessForBucket_resourceName :: Lens.Lens' SetResourceAccessForBucket Prelude.Text
setResourceAccessForBucket_resourceName = Lens.lens (\SetResourceAccessForBucket' {resourceName} -> resourceName) (\s@SetResourceAccessForBucket' {} a -> s {resourceName = a} :: SetResourceAccessForBucket)

-- | The name of the bucket for which to set access to another Lightsail
-- resource.
setResourceAccessForBucket_bucketName :: Lens.Lens' SetResourceAccessForBucket Prelude.Text
setResourceAccessForBucket_bucketName = Lens.lens (\SetResourceAccessForBucket' {bucketName} -> bucketName) (\s@SetResourceAccessForBucket' {} a -> s {bucketName = a} :: SetResourceAccessForBucket)

-- | The access setting.
--
-- The following access settings are available:
--
-- -   @allow@ - Allows access to the bucket and its objects.
--
-- -   @deny@ - Denies access to the bucket and its objects. Use this
--     setting to remove access for a resource previously set to @allow@.
setResourceAccessForBucket_access :: Lens.Lens' SetResourceAccessForBucket ResourceBucketAccess
setResourceAccessForBucket_access = Lens.lens (\SetResourceAccessForBucket' {access} -> access) (\s@SetResourceAccessForBucket' {} a -> s {access = a} :: SetResourceAccessForBucket)

instance Core.AWSRequest SetResourceAccessForBucket where
  type
    AWSResponse SetResourceAccessForBucket =
      SetResourceAccessForBucketResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          SetResourceAccessForBucketResponse'
            Prelude.<$> (x Data..?> "operations" Core..!@ Prelude.mempty)
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable SetResourceAccessForBucket where
  hashWithSalt _salt SetResourceAccessForBucket' {..} =
    _salt
      `Prelude.hashWithSalt` resourceName
      `Prelude.hashWithSalt` bucketName
      `Prelude.hashWithSalt` access

instance Prelude.NFData SetResourceAccessForBucket where
  rnf SetResourceAccessForBucket' {..} =
    Prelude.rnf resourceName
      `Prelude.seq` Prelude.rnf bucketName
      `Prelude.seq` Prelude.rnf access

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

instance Data.ToJSON SetResourceAccessForBucket where
  toJSON SetResourceAccessForBucket' {..} =
    Data.object
      ( Prelude.catMaybes
          [ Prelude.Just ("resourceName" Data..= resourceName),
            Prelude.Just ("bucketName" Data..= bucketName),
            Prelude.Just ("access" Data..= access)
          ]
      )

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

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

-- | /See:/ 'newSetResourceAccessForBucketResponse' smart constructor.
data SetResourceAccessForBucketResponse = SetResourceAccessForBucketResponse'
  { -- | An array of objects that describe the result of the action, such as the
    -- status of the request, the timestamp of the request, and the resources
    -- affected by the request.
    operations :: Prelude.Maybe [Operation],
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'SetResourceAccessForBucketResponse' 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:
--
-- 'operations', 'setResourceAccessForBucketResponse_operations' - An array of objects that describe the result of the action, such as the
-- status of the request, the timestamp of the request, and the resources
-- affected by the request.
--
-- 'httpStatus', 'setResourceAccessForBucketResponse_httpStatus' - The response's http status code.
newSetResourceAccessForBucketResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  SetResourceAccessForBucketResponse
newSetResourceAccessForBucketResponse pHttpStatus_ =
  SetResourceAccessForBucketResponse'
    { operations =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | An array of objects that describe the result of the action, such as the
-- status of the request, the timestamp of the request, and the resources
-- affected by the request.
setResourceAccessForBucketResponse_operations :: Lens.Lens' SetResourceAccessForBucketResponse (Prelude.Maybe [Operation])
setResourceAccessForBucketResponse_operations = Lens.lens (\SetResourceAccessForBucketResponse' {operations} -> operations) (\s@SetResourceAccessForBucketResponse' {} a -> s {operations = a} :: SetResourceAccessForBucketResponse) Prelude.. Lens.mapping Lens.coerced

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

instance
  Prelude.NFData
    SetResourceAccessForBucketResponse
  where
  rnf SetResourceAccessForBucketResponse' {..} =
    Prelude.rnf operations
      `Prelude.seq` Prelude.rnf httpStatus