packages feed

amazonka-iottwinmaker-2.0: gen/Amazonka/IotTwinMaker/CreateSyncJob.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.IotTwinMaker.CreateSyncJob
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- This action creates a SyncJob.
module Amazonka.IotTwinMaker.CreateSyncJob
  ( -- * Creating a Request
    CreateSyncJob (..),
    newCreateSyncJob,

    -- * Request Lenses
    createSyncJob_tags,
    createSyncJob_workspaceId,
    createSyncJob_syncSource,
    createSyncJob_syncRole,

    -- * Destructuring the Response
    CreateSyncJobResponse (..),
    newCreateSyncJobResponse,

    -- * Response Lenses
    createSyncJobResponse_httpStatus,
    createSyncJobResponse_arn,
    createSyncJobResponse_creationDateTime,
    createSyncJobResponse_state,
  )
where

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

-- | /See:/ 'newCreateSyncJob' smart constructor.
data CreateSyncJob = CreateSyncJob'
  { -- | The SyncJob tags.
    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The workspace Id.
    workspaceId :: Prelude.Text,
    -- | The sync source.
    --
    -- Currently the only supported syncSoucre is @SITEWISE @.
    syncSource :: Prelude.Text,
    -- | The SyncJob IAM role. This IAM role is used by the sync job to read from
    -- the syncSource, and create, update or delete the corresponding
    -- resources.
    syncRole :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateSyncJob' 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:
--
-- 'tags', 'createSyncJob_tags' - The SyncJob tags.
--
-- 'workspaceId', 'createSyncJob_workspaceId' - The workspace Id.
--
-- 'syncSource', 'createSyncJob_syncSource' - The sync source.
--
-- Currently the only supported syncSoucre is @SITEWISE @.
--
-- 'syncRole', 'createSyncJob_syncRole' - The SyncJob IAM role. This IAM role is used by the sync job to read from
-- the syncSource, and create, update or delete the corresponding
-- resources.
newCreateSyncJob ::
  -- | 'workspaceId'
  Prelude.Text ->
  -- | 'syncSource'
  Prelude.Text ->
  -- | 'syncRole'
  Prelude.Text ->
  CreateSyncJob
newCreateSyncJob
  pWorkspaceId_
  pSyncSource_
  pSyncRole_ =
    CreateSyncJob'
      { tags = Prelude.Nothing,
        workspaceId = pWorkspaceId_,
        syncSource = pSyncSource_,
        syncRole = pSyncRole_
      }

-- | The SyncJob tags.
createSyncJob_tags :: Lens.Lens' CreateSyncJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createSyncJob_tags = Lens.lens (\CreateSyncJob' {tags} -> tags) (\s@CreateSyncJob' {} a -> s {tags = a} :: CreateSyncJob) Prelude.. Lens.mapping Lens.coerced

-- | The workspace Id.
createSyncJob_workspaceId :: Lens.Lens' CreateSyncJob Prelude.Text
createSyncJob_workspaceId = Lens.lens (\CreateSyncJob' {workspaceId} -> workspaceId) (\s@CreateSyncJob' {} a -> s {workspaceId = a} :: CreateSyncJob)

-- | The sync source.
--
-- Currently the only supported syncSoucre is @SITEWISE @.
createSyncJob_syncSource :: Lens.Lens' CreateSyncJob Prelude.Text
createSyncJob_syncSource = Lens.lens (\CreateSyncJob' {syncSource} -> syncSource) (\s@CreateSyncJob' {} a -> s {syncSource = a} :: CreateSyncJob)

-- | The SyncJob IAM role. This IAM role is used by the sync job to read from
-- the syncSource, and create, update or delete the corresponding
-- resources.
createSyncJob_syncRole :: Lens.Lens' CreateSyncJob Prelude.Text
createSyncJob_syncRole = Lens.lens (\CreateSyncJob' {syncRole} -> syncRole) (\s@CreateSyncJob' {} a -> s {syncRole = a} :: CreateSyncJob)

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

instance Prelude.Hashable CreateSyncJob where
  hashWithSalt _salt CreateSyncJob' {..} =
    _salt
      `Prelude.hashWithSalt` tags
      `Prelude.hashWithSalt` workspaceId
      `Prelude.hashWithSalt` syncSource
      `Prelude.hashWithSalt` syncRole

instance Prelude.NFData CreateSyncJob where
  rnf CreateSyncJob' {..} =
    Prelude.rnf tags
      `Prelude.seq` Prelude.rnf workspaceId
      `Prelude.seq` Prelude.rnf syncSource
      `Prelude.seq` Prelude.rnf syncRole

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

instance Data.ToJSON CreateSyncJob where
  toJSON CreateSyncJob' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("tags" Data..=) Prelude.<$> tags,
            Prelude.Just ("syncRole" Data..= syncRole)
          ]
      )

instance Data.ToPath CreateSyncJob where
  toPath CreateSyncJob' {..} =
    Prelude.mconcat
      [ "/workspaces/",
        Data.toBS workspaceId,
        "/sync-jobs/",
        Data.toBS syncSource
      ]

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

-- | /See:/ 'newCreateSyncJobResponse' smart constructor.
data CreateSyncJobResponse = CreateSyncJobResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | The SyncJob ARN.
    arn :: Prelude.Text,
    -- | The date and time for the SyncJob creation.
    creationDateTime :: Data.POSIX,
    -- | The SyncJob response state.
    state :: SyncJobState
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateSyncJobResponse' 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', 'createSyncJobResponse_httpStatus' - The response's http status code.
--
-- 'arn', 'createSyncJobResponse_arn' - The SyncJob ARN.
--
-- 'creationDateTime', 'createSyncJobResponse_creationDateTime' - The date and time for the SyncJob creation.
--
-- 'state', 'createSyncJobResponse_state' - The SyncJob response state.
newCreateSyncJobResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'arn'
  Prelude.Text ->
  -- | 'creationDateTime'
  Prelude.UTCTime ->
  -- | 'state'
  SyncJobState ->
  CreateSyncJobResponse
newCreateSyncJobResponse
  pHttpStatus_
  pArn_
  pCreationDateTime_
  pState_ =
    CreateSyncJobResponse'
      { httpStatus = pHttpStatus_,
        arn = pArn_,
        creationDateTime =
          Data._Time Lens.# pCreationDateTime_,
        state = pState_
      }

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

-- | The SyncJob ARN.
createSyncJobResponse_arn :: Lens.Lens' CreateSyncJobResponse Prelude.Text
createSyncJobResponse_arn = Lens.lens (\CreateSyncJobResponse' {arn} -> arn) (\s@CreateSyncJobResponse' {} a -> s {arn = a} :: CreateSyncJobResponse)

-- | The date and time for the SyncJob creation.
createSyncJobResponse_creationDateTime :: Lens.Lens' CreateSyncJobResponse Prelude.UTCTime
createSyncJobResponse_creationDateTime = Lens.lens (\CreateSyncJobResponse' {creationDateTime} -> creationDateTime) (\s@CreateSyncJobResponse' {} a -> s {creationDateTime = a} :: CreateSyncJobResponse) Prelude.. Data._Time

-- | The SyncJob response state.
createSyncJobResponse_state :: Lens.Lens' CreateSyncJobResponse SyncJobState
createSyncJobResponse_state = Lens.lens (\CreateSyncJobResponse' {state} -> state) (\s@CreateSyncJobResponse' {} a -> s {state = a} :: CreateSyncJobResponse)

instance Prelude.NFData CreateSyncJobResponse where
  rnf CreateSyncJobResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf arn
      `Prelude.seq` Prelude.rnf creationDateTime
      `Prelude.seq` Prelude.rnf state