packages feed

amazonka-ssm-sap-2.0: gen/Amazonka/SSMSAP/PutResourcePermission.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.SSMSAP.PutResourcePermission
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Adds permissions to the target database.
module Amazonka.SSMSAP.PutResourcePermission
  ( -- * Creating a Request
    PutResourcePermission (..),
    newPutResourcePermission,

    -- * Request Lenses
    putResourcePermission_actionType,
    putResourcePermission_sourceResourceArn,
    putResourcePermission_resourceArn,

    -- * Destructuring the Response
    PutResourcePermissionResponse (..),
    newPutResourcePermissionResponse,

    -- * Response Lenses
    putResourcePermissionResponse_policy,
    putResourcePermissionResponse_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.SSMSAP.Types

-- | /See:/ 'newPutResourcePermission' smart constructor.
data PutResourcePermission = PutResourcePermission'
  { actionType :: PermissionActionType,
    sourceResourceArn :: Prelude.Text,
    resourceArn :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutResourcePermission' 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:
--
-- 'actionType', 'putResourcePermission_actionType' -
--
-- 'sourceResourceArn', 'putResourcePermission_sourceResourceArn' -
--
-- 'resourceArn', 'putResourcePermission_resourceArn' -
newPutResourcePermission ::
  -- | 'actionType'
  PermissionActionType ->
  -- | 'sourceResourceArn'
  Prelude.Text ->
  -- | 'resourceArn'
  Prelude.Text ->
  PutResourcePermission
newPutResourcePermission
  pActionType_
  pSourceResourceArn_
  pResourceArn_ =
    PutResourcePermission'
      { actionType = pActionType_,
        sourceResourceArn = pSourceResourceArn_,
        resourceArn = pResourceArn_
      }

putResourcePermission_actionType :: Lens.Lens' PutResourcePermission PermissionActionType
putResourcePermission_actionType = Lens.lens (\PutResourcePermission' {actionType} -> actionType) (\s@PutResourcePermission' {} a -> s {actionType = a} :: PutResourcePermission)

putResourcePermission_sourceResourceArn :: Lens.Lens' PutResourcePermission Prelude.Text
putResourcePermission_sourceResourceArn = Lens.lens (\PutResourcePermission' {sourceResourceArn} -> sourceResourceArn) (\s@PutResourcePermission' {} a -> s {sourceResourceArn = a} :: PutResourcePermission)

putResourcePermission_resourceArn :: Lens.Lens' PutResourcePermission Prelude.Text
putResourcePermission_resourceArn = Lens.lens (\PutResourcePermission' {resourceArn} -> resourceArn) (\s@PutResourcePermission' {} a -> s {resourceArn = a} :: PutResourcePermission)

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

instance Prelude.Hashable PutResourcePermission where
  hashWithSalt _salt PutResourcePermission' {..} =
    _salt
      `Prelude.hashWithSalt` actionType
      `Prelude.hashWithSalt` sourceResourceArn
      `Prelude.hashWithSalt` resourceArn

instance Prelude.NFData PutResourcePermission where
  rnf PutResourcePermission' {..} =
    Prelude.rnf actionType
      `Prelude.seq` Prelude.rnf sourceResourceArn
      `Prelude.seq` Prelude.rnf resourceArn

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

instance Data.ToJSON PutResourcePermission where
  toJSON PutResourcePermission' {..} =
    Data.object
      ( Prelude.catMaybes
          [ Prelude.Just ("ActionType" Data..= actionType),
            Prelude.Just
              ("SourceResourceArn" Data..= sourceResourceArn),
            Prelude.Just ("ResourceArn" Data..= resourceArn)
          ]
      )

instance Data.ToPath PutResourcePermission where
  toPath = Prelude.const "/put-resource-permission"

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

-- | /See:/ 'newPutResourcePermissionResponse' smart constructor.
data PutResourcePermissionResponse = PutResourcePermissionResponse'
  { policy :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutResourcePermissionResponse' 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:
--
-- 'policy', 'putResourcePermissionResponse_policy' -
--
-- 'httpStatus', 'putResourcePermissionResponse_httpStatus' - The response's http status code.
newPutResourcePermissionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  PutResourcePermissionResponse
newPutResourcePermissionResponse pHttpStatus_ =
  PutResourcePermissionResponse'
    { policy =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

putResourcePermissionResponse_policy :: Lens.Lens' PutResourcePermissionResponse (Prelude.Maybe Prelude.Text)
putResourcePermissionResponse_policy = Lens.lens (\PutResourcePermissionResponse' {policy} -> policy) (\s@PutResourcePermissionResponse' {} a -> s {policy = a} :: PutResourcePermissionResponse)

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

instance Prelude.NFData PutResourcePermissionResponse where
  rnf PutResourcePermissionResponse' {..} =
    Prelude.rnf policy
      `Prelude.seq` Prelude.rnf httpStatus