packages feed

amazonka-applicationcostprofiler-2.0: gen/Amazonka/ApplicationCostProfiler/ImportApplicationUsage.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.ApplicationCostProfiler.ImportApplicationUsage
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Ingests application usage data from Amazon Simple Storage Service
-- (Amazon S3).
--
-- The data must already exist in the S3 location. As part of the action,
-- AWS Application Cost Profiler copies the object from your S3 bucket to
-- an S3 bucket owned by Amazon for processing asynchronously.
module Amazonka.ApplicationCostProfiler.ImportApplicationUsage
  ( -- * Creating a Request
    ImportApplicationUsage (..),
    newImportApplicationUsage,

    -- * Request Lenses
    importApplicationUsage_sourceS3Location,

    -- * Destructuring the Response
    ImportApplicationUsageResponse (..),
    newImportApplicationUsageResponse,

    -- * Response Lenses
    importApplicationUsageResponse_httpStatus,
    importApplicationUsageResponse_importId,
  )
where

import Amazonka.ApplicationCostProfiler.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:/ 'newImportApplicationUsage' smart constructor.
data ImportApplicationUsage = ImportApplicationUsage'
  { -- | Amazon S3 location to import application usage data from.
    sourceS3Location :: SourceS3Location
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ImportApplicationUsage' 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:
--
-- 'sourceS3Location', 'importApplicationUsage_sourceS3Location' - Amazon S3 location to import application usage data from.
newImportApplicationUsage ::
  -- | 'sourceS3Location'
  SourceS3Location ->
  ImportApplicationUsage
newImportApplicationUsage pSourceS3Location_ =
  ImportApplicationUsage'
    { sourceS3Location =
        pSourceS3Location_
    }

-- | Amazon S3 location to import application usage data from.
importApplicationUsage_sourceS3Location :: Lens.Lens' ImportApplicationUsage SourceS3Location
importApplicationUsage_sourceS3Location = Lens.lens (\ImportApplicationUsage' {sourceS3Location} -> sourceS3Location) (\s@ImportApplicationUsage' {} a -> s {sourceS3Location = a} :: ImportApplicationUsage)

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

instance Prelude.Hashable ImportApplicationUsage where
  hashWithSalt _salt ImportApplicationUsage' {..} =
    _salt `Prelude.hashWithSalt` sourceS3Location

instance Prelude.NFData ImportApplicationUsage where
  rnf ImportApplicationUsage' {..} =
    Prelude.rnf sourceS3Location

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

instance Data.ToJSON ImportApplicationUsage where
  toJSON ImportApplicationUsage' {..} =
    Data.object
      ( Prelude.catMaybes
          [ Prelude.Just
              ("sourceS3Location" Data..= sourceS3Location)
          ]
      )

instance Data.ToPath ImportApplicationUsage where
  toPath = Prelude.const "/importApplicationUsage"

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

-- | /See:/ 'newImportApplicationUsageResponse' smart constructor.
data ImportApplicationUsageResponse = ImportApplicationUsageResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | ID of the import request.
    importId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ImportApplicationUsageResponse' 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', 'importApplicationUsageResponse_httpStatus' - The response's http status code.
--
-- 'importId', 'importApplicationUsageResponse_importId' - ID of the import request.
newImportApplicationUsageResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'importId'
  Prelude.Text ->
  ImportApplicationUsageResponse
newImportApplicationUsageResponse
  pHttpStatus_
  pImportId_ =
    ImportApplicationUsageResponse'
      { httpStatus =
          pHttpStatus_,
        importId = pImportId_
      }

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

-- | ID of the import request.
importApplicationUsageResponse_importId :: Lens.Lens' ImportApplicationUsageResponse Prelude.Text
importApplicationUsageResponse_importId = Lens.lens (\ImportApplicationUsageResponse' {importId} -> importId) (\s@ImportApplicationUsageResponse' {} a -> s {importId = a} :: ImportApplicationUsageResponse)

instance
  Prelude.NFData
    ImportApplicationUsageResponse
  where
  rnf ImportApplicationUsageResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf importId