packages feed

amazonka-wellarchitected-2.0: gen/Amazonka/WellArchitected/CreateMilestone.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.WellArchitected.CreateMilestone
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Create a milestone for an existing workload.
module Amazonka.WellArchitected.CreateMilestone
  ( -- * Creating a Request
    CreateMilestone (..),
    newCreateMilestone,

    -- * Request Lenses
    createMilestone_workloadId,
    createMilestone_milestoneName,
    createMilestone_clientRequestToken,

    -- * Destructuring the Response
    CreateMilestoneResponse (..),
    newCreateMilestoneResponse,

    -- * Response Lenses
    createMilestoneResponse_milestoneNumber,
    createMilestoneResponse_workloadId,
    createMilestoneResponse_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.WellArchitected.Types

-- | Input for milestone creation.
--
-- /See:/ 'newCreateMilestone' smart constructor.
data CreateMilestone = CreateMilestone'
  { workloadId :: Prelude.Text,
    milestoneName :: Prelude.Text,
    clientRequestToken :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateMilestone' 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:
--
-- 'workloadId', 'createMilestone_workloadId' - Undocumented member.
--
-- 'milestoneName', 'createMilestone_milestoneName' - Undocumented member.
--
-- 'clientRequestToken', 'createMilestone_clientRequestToken' - Undocumented member.
newCreateMilestone ::
  -- | 'workloadId'
  Prelude.Text ->
  -- | 'milestoneName'
  Prelude.Text ->
  -- | 'clientRequestToken'
  Prelude.Text ->
  CreateMilestone
newCreateMilestone
  pWorkloadId_
  pMilestoneName_
  pClientRequestToken_ =
    CreateMilestone'
      { workloadId = pWorkloadId_,
        milestoneName = pMilestoneName_,
        clientRequestToken = pClientRequestToken_
      }

-- | Undocumented member.
createMilestone_workloadId :: Lens.Lens' CreateMilestone Prelude.Text
createMilestone_workloadId = Lens.lens (\CreateMilestone' {workloadId} -> workloadId) (\s@CreateMilestone' {} a -> s {workloadId = a} :: CreateMilestone)

-- | Undocumented member.
createMilestone_milestoneName :: Lens.Lens' CreateMilestone Prelude.Text
createMilestone_milestoneName = Lens.lens (\CreateMilestone' {milestoneName} -> milestoneName) (\s@CreateMilestone' {} a -> s {milestoneName = a} :: CreateMilestone)

-- | Undocumented member.
createMilestone_clientRequestToken :: Lens.Lens' CreateMilestone Prelude.Text
createMilestone_clientRequestToken = Lens.lens (\CreateMilestone' {clientRequestToken} -> clientRequestToken) (\s@CreateMilestone' {} a -> s {clientRequestToken = a} :: CreateMilestone)

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

instance Prelude.Hashable CreateMilestone where
  hashWithSalt _salt CreateMilestone' {..} =
    _salt
      `Prelude.hashWithSalt` workloadId
      `Prelude.hashWithSalt` milestoneName
      `Prelude.hashWithSalt` clientRequestToken

instance Prelude.NFData CreateMilestone where
  rnf CreateMilestone' {..} =
    Prelude.rnf workloadId
      `Prelude.seq` Prelude.rnf milestoneName
      `Prelude.seq` Prelude.rnf clientRequestToken

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

instance Data.ToJSON CreateMilestone where
  toJSON CreateMilestone' {..} =
    Data.object
      ( Prelude.catMaybes
          [ Prelude.Just
              ("MilestoneName" Data..= milestoneName),
            Prelude.Just
              ("ClientRequestToken" Data..= clientRequestToken)
          ]
      )

instance Data.ToPath CreateMilestone where
  toPath CreateMilestone' {..} =
    Prelude.mconcat
      ["/workloads/", Data.toBS workloadId, "/milestones"]

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

-- | Output of a create milestone call.
--
-- /See:/ 'newCreateMilestoneResponse' smart constructor.
data CreateMilestoneResponse = CreateMilestoneResponse'
  { milestoneNumber :: Prelude.Maybe Prelude.Natural,
    workloadId :: 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 'CreateMilestoneResponse' 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:
--
-- 'milestoneNumber', 'createMilestoneResponse_milestoneNumber' - Undocumented member.
--
-- 'workloadId', 'createMilestoneResponse_workloadId' - Undocumented member.
--
-- 'httpStatus', 'createMilestoneResponse_httpStatus' - The response's http status code.
newCreateMilestoneResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateMilestoneResponse
newCreateMilestoneResponse pHttpStatus_ =
  CreateMilestoneResponse'
    { milestoneNumber =
        Prelude.Nothing,
      workloadId = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | Undocumented member.
createMilestoneResponse_milestoneNumber :: Lens.Lens' CreateMilestoneResponse (Prelude.Maybe Prelude.Natural)
createMilestoneResponse_milestoneNumber = Lens.lens (\CreateMilestoneResponse' {milestoneNumber} -> milestoneNumber) (\s@CreateMilestoneResponse' {} a -> s {milestoneNumber = a} :: CreateMilestoneResponse)

-- | Undocumented member.
createMilestoneResponse_workloadId :: Lens.Lens' CreateMilestoneResponse (Prelude.Maybe Prelude.Text)
createMilestoneResponse_workloadId = Lens.lens (\CreateMilestoneResponse' {workloadId} -> workloadId) (\s@CreateMilestoneResponse' {} a -> s {workloadId = a} :: CreateMilestoneResponse)

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

instance Prelude.NFData CreateMilestoneResponse where
  rnf CreateMilestoneResponse' {..} =
    Prelude.rnf milestoneNumber
      `Prelude.seq` Prelude.rnf workloadId
      `Prelude.seq` Prelude.rnf httpStatus