packages feed

amazonka-lex-models-2.0: gen/Amazonka/LexModels/StartMigration.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.LexModels.StartMigration
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Starts migrating a bot from Amazon Lex V1 to Amazon Lex V2. Migrate your
-- bot when you want to take advantage of the new features of Amazon Lex
-- V2.
--
-- For more information, see
-- <https://docs.aws.amazon.com/lex/latest/dg/migrate.html Migrating a bot>
-- in the /Amazon Lex developer guide/.
module Amazonka.LexModels.StartMigration
  ( -- * Creating a Request
    StartMigration (..),
    newStartMigration,

    -- * Request Lenses
    startMigration_v1BotName,
    startMigration_v1BotVersion,
    startMigration_v2BotName,
    startMigration_v2BotRole,
    startMigration_migrationStrategy,

    -- * Destructuring the Response
    StartMigrationResponse (..),
    newStartMigrationResponse,

    -- * Response Lenses
    startMigrationResponse_migrationId,
    startMigrationResponse_migrationStrategy,
    startMigrationResponse_migrationTimestamp,
    startMigrationResponse_v1BotLocale,
    startMigrationResponse_v1BotName,
    startMigrationResponse_v1BotVersion,
    startMigrationResponse_v2BotId,
    startMigrationResponse_v2BotRole,
    startMigrationResponse_httpStatus,
  )
where

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

-- | /See:/ 'newStartMigration' smart constructor.
data StartMigration = StartMigration'
  { -- | The name of the Amazon Lex V1 bot that you are migrating to Amazon Lex
    -- V2.
    v1BotName :: Prelude.Text,
    -- | The version of the bot to migrate to Amazon Lex V2. You can migrate the
    -- @$LATEST@ version as well as any numbered version.
    v1BotVersion :: Prelude.Text,
    -- | The name of the Amazon Lex V2 bot that you are migrating the Amazon Lex
    -- V1 bot to.
    --
    -- -   If the Amazon Lex V2 bot doesn\'t exist, you must use the
    --     @CREATE_NEW@ migration strategy.
    --
    -- -   If the Amazon Lex V2 bot exists, you must use the @UPDATE_EXISTING@
    --     migration strategy to change the contents of the Amazon Lex V2 bot.
    v2BotName :: Prelude.Text,
    -- | The IAM role that Amazon Lex uses to run the Amazon Lex V2 bot.
    v2BotRole :: Prelude.Text,
    -- | The strategy used to conduct the migration.
    --
    -- -   @CREATE_NEW@ - Creates a new Amazon Lex V2 bot and migrates the
    --     Amazon Lex V1 bot to the new bot.
    --
    -- -   @UPDATE_EXISTING@ - Overwrites the existing Amazon Lex V2 bot
    --     metadata and the locale being migrated. It doesn\'t change any other
    --     locales in the Amazon Lex V2 bot. If the locale doesn\'t exist, a
    --     new locale is created in the Amazon Lex V2 bot.
    migrationStrategy :: MigrationStrategy
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'StartMigration' 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:
--
-- 'v1BotName', 'startMigration_v1BotName' - The name of the Amazon Lex V1 bot that you are migrating to Amazon Lex
-- V2.
--
-- 'v1BotVersion', 'startMigration_v1BotVersion' - The version of the bot to migrate to Amazon Lex V2. You can migrate the
-- @$LATEST@ version as well as any numbered version.
--
-- 'v2BotName', 'startMigration_v2BotName' - The name of the Amazon Lex V2 bot that you are migrating the Amazon Lex
-- V1 bot to.
--
-- -   If the Amazon Lex V2 bot doesn\'t exist, you must use the
--     @CREATE_NEW@ migration strategy.
--
-- -   If the Amazon Lex V2 bot exists, you must use the @UPDATE_EXISTING@
--     migration strategy to change the contents of the Amazon Lex V2 bot.
--
-- 'v2BotRole', 'startMigration_v2BotRole' - The IAM role that Amazon Lex uses to run the Amazon Lex V2 bot.
--
-- 'migrationStrategy', 'startMigration_migrationStrategy' - The strategy used to conduct the migration.
--
-- -   @CREATE_NEW@ - Creates a new Amazon Lex V2 bot and migrates the
--     Amazon Lex V1 bot to the new bot.
--
-- -   @UPDATE_EXISTING@ - Overwrites the existing Amazon Lex V2 bot
--     metadata and the locale being migrated. It doesn\'t change any other
--     locales in the Amazon Lex V2 bot. If the locale doesn\'t exist, a
--     new locale is created in the Amazon Lex V2 bot.
newStartMigration ::
  -- | 'v1BotName'
  Prelude.Text ->
  -- | 'v1BotVersion'
  Prelude.Text ->
  -- | 'v2BotName'
  Prelude.Text ->
  -- | 'v2BotRole'
  Prelude.Text ->
  -- | 'migrationStrategy'
  MigrationStrategy ->
  StartMigration
newStartMigration
  pV1BotName_
  pV1BotVersion_
  pV2BotName_
  pV2BotRole_
  pMigrationStrategy_ =
    StartMigration'
      { v1BotName = pV1BotName_,
        v1BotVersion = pV1BotVersion_,
        v2BotName = pV2BotName_,
        v2BotRole = pV2BotRole_,
        migrationStrategy = pMigrationStrategy_
      }

-- | The name of the Amazon Lex V1 bot that you are migrating to Amazon Lex
-- V2.
startMigration_v1BotName :: Lens.Lens' StartMigration Prelude.Text
startMigration_v1BotName = Lens.lens (\StartMigration' {v1BotName} -> v1BotName) (\s@StartMigration' {} a -> s {v1BotName = a} :: StartMigration)

-- | The version of the bot to migrate to Amazon Lex V2. You can migrate the
-- @$LATEST@ version as well as any numbered version.
startMigration_v1BotVersion :: Lens.Lens' StartMigration Prelude.Text
startMigration_v1BotVersion = Lens.lens (\StartMigration' {v1BotVersion} -> v1BotVersion) (\s@StartMigration' {} a -> s {v1BotVersion = a} :: StartMigration)

-- | The name of the Amazon Lex V2 bot that you are migrating the Amazon Lex
-- V1 bot to.
--
-- -   If the Amazon Lex V2 bot doesn\'t exist, you must use the
--     @CREATE_NEW@ migration strategy.
--
-- -   If the Amazon Lex V2 bot exists, you must use the @UPDATE_EXISTING@
--     migration strategy to change the contents of the Amazon Lex V2 bot.
startMigration_v2BotName :: Lens.Lens' StartMigration Prelude.Text
startMigration_v2BotName = Lens.lens (\StartMigration' {v2BotName} -> v2BotName) (\s@StartMigration' {} a -> s {v2BotName = a} :: StartMigration)

-- | The IAM role that Amazon Lex uses to run the Amazon Lex V2 bot.
startMigration_v2BotRole :: Lens.Lens' StartMigration Prelude.Text
startMigration_v2BotRole = Lens.lens (\StartMigration' {v2BotRole} -> v2BotRole) (\s@StartMigration' {} a -> s {v2BotRole = a} :: StartMigration)

-- | The strategy used to conduct the migration.
--
-- -   @CREATE_NEW@ - Creates a new Amazon Lex V2 bot and migrates the
--     Amazon Lex V1 bot to the new bot.
--
-- -   @UPDATE_EXISTING@ - Overwrites the existing Amazon Lex V2 bot
--     metadata and the locale being migrated. It doesn\'t change any other
--     locales in the Amazon Lex V2 bot. If the locale doesn\'t exist, a
--     new locale is created in the Amazon Lex V2 bot.
startMigration_migrationStrategy :: Lens.Lens' StartMigration MigrationStrategy
startMigration_migrationStrategy = Lens.lens (\StartMigration' {migrationStrategy} -> migrationStrategy) (\s@StartMigration' {} a -> s {migrationStrategy = a} :: StartMigration)

instance Core.AWSRequest StartMigration where
  type
    AWSResponse StartMigration =
      StartMigrationResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          StartMigrationResponse'
            Prelude.<$> (x Data..?> "migrationId")
            Prelude.<*> (x Data..?> "migrationStrategy")
            Prelude.<*> (x Data..?> "migrationTimestamp")
            Prelude.<*> (x Data..?> "v1BotLocale")
            Prelude.<*> (x Data..?> "v1BotName")
            Prelude.<*> (x Data..?> "v1BotVersion")
            Prelude.<*> (x Data..?> "v2BotId")
            Prelude.<*> (x Data..?> "v2BotRole")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable StartMigration where
  hashWithSalt _salt StartMigration' {..} =
    _salt
      `Prelude.hashWithSalt` v1BotName
      `Prelude.hashWithSalt` v1BotVersion
      `Prelude.hashWithSalt` v2BotName
      `Prelude.hashWithSalt` v2BotRole
      `Prelude.hashWithSalt` migrationStrategy

instance Prelude.NFData StartMigration where
  rnf StartMigration' {..} =
    Prelude.rnf v1BotName
      `Prelude.seq` Prelude.rnf v1BotVersion
      `Prelude.seq` Prelude.rnf v2BotName
      `Prelude.seq` Prelude.rnf v2BotRole
      `Prelude.seq` Prelude.rnf migrationStrategy

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

instance Data.ToJSON StartMigration where
  toJSON StartMigration' {..} =
    Data.object
      ( Prelude.catMaybes
          [ Prelude.Just ("v1BotName" Data..= v1BotName),
            Prelude.Just ("v1BotVersion" Data..= v1BotVersion),
            Prelude.Just ("v2BotName" Data..= v2BotName),
            Prelude.Just ("v2BotRole" Data..= v2BotRole),
            Prelude.Just
              ("migrationStrategy" Data..= migrationStrategy)
          ]
      )

instance Data.ToPath StartMigration where
  toPath = Prelude.const "/migrations"

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

-- | /See:/ 'newStartMigrationResponse' smart constructor.
data StartMigrationResponse = StartMigrationResponse'
  { -- | The unique identifier that Amazon Lex assigned to the migration.
    migrationId :: Prelude.Maybe Prelude.Text,
    -- | The strategy used to conduct the migration.
    migrationStrategy :: Prelude.Maybe MigrationStrategy,
    -- | The date and time that the migration started.
    migrationTimestamp :: Prelude.Maybe Data.POSIX,
    -- | The locale used for the Amazon Lex V1 bot.
    v1BotLocale :: Prelude.Maybe Locale,
    -- | The name of the Amazon Lex V1 bot that you are migrating to Amazon Lex
    -- V2.
    v1BotName :: Prelude.Maybe Prelude.Text,
    -- | The version of the bot to migrate to Amazon Lex V2.
    v1BotVersion :: Prelude.Maybe Prelude.Text,
    -- | The unique identifier for the Amazon Lex V2 bot.
    v2BotId :: Prelude.Maybe Prelude.Text,
    -- | The IAM role that Amazon Lex uses to run the Amazon Lex V2 bot.
    v2BotRole :: 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 'StartMigrationResponse' 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:
--
-- 'migrationId', 'startMigrationResponse_migrationId' - The unique identifier that Amazon Lex assigned to the migration.
--
-- 'migrationStrategy', 'startMigrationResponse_migrationStrategy' - The strategy used to conduct the migration.
--
-- 'migrationTimestamp', 'startMigrationResponse_migrationTimestamp' - The date and time that the migration started.
--
-- 'v1BotLocale', 'startMigrationResponse_v1BotLocale' - The locale used for the Amazon Lex V1 bot.
--
-- 'v1BotName', 'startMigrationResponse_v1BotName' - The name of the Amazon Lex V1 bot that you are migrating to Amazon Lex
-- V2.
--
-- 'v1BotVersion', 'startMigrationResponse_v1BotVersion' - The version of the bot to migrate to Amazon Lex V2.
--
-- 'v2BotId', 'startMigrationResponse_v2BotId' - The unique identifier for the Amazon Lex V2 bot.
--
-- 'v2BotRole', 'startMigrationResponse_v2BotRole' - The IAM role that Amazon Lex uses to run the Amazon Lex V2 bot.
--
-- 'httpStatus', 'startMigrationResponse_httpStatus' - The response's http status code.
newStartMigrationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  StartMigrationResponse
newStartMigrationResponse pHttpStatus_ =
  StartMigrationResponse'
    { migrationId =
        Prelude.Nothing,
      migrationStrategy = Prelude.Nothing,
      migrationTimestamp = Prelude.Nothing,
      v1BotLocale = Prelude.Nothing,
      v1BotName = Prelude.Nothing,
      v1BotVersion = Prelude.Nothing,
      v2BotId = Prelude.Nothing,
      v2BotRole = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The unique identifier that Amazon Lex assigned to the migration.
startMigrationResponse_migrationId :: Lens.Lens' StartMigrationResponse (Prelude.Maybe Prelude.Text)
startMigrationResponse_migrationId = Lens.lens (\StartMigrationResponse' {migrationId} -> migrationId) (\s@StartMigrationResponse' {} a -> s {migrationId = a} :: StartMigrationResponse)

-- | The strategy used to conduct the migration.
startMigrationResponse_migrationStrategy :: Lens.Lens' StartMigrationResponse (Prelude.Maybe MigrationStrategy)
startMigrationResponse_migrationStrategy = Lens.lens (\StartMigrationResponse' {migrationStrategy} -> migrationStrategy) (\s@StartMigrationResponse' {} a -> s {migrationStrategy = a} :: StartMigrationResponse)

-- | The date and time that the migration started.
startMigrationResponse_migrationTimestamp :: Lens.Lens' StartMigrationResponse (Prelude.Maybe Prelude.UTCTime)
startMigrationResponse_migrationTimestamp = Lens.lens (\StartMigrationResponse' {migrationTimestamp} -> migrationTimestamp) (\s@StartMigrationResponse' {} a -> s {migrationTimestamp = a} :: StartMigrationResponse) Prelude.. Lens.mapping Data._Time

-- | The locale used for the Amazon Lex V1 bot.
startMigrationResponse_v1BotLocale :: Lens.Lens' StartMigrationResponse (Prelude.Maybe Locale)
startMigrationResponse_v1BotLocale = Lens.lens (\StartMigrationResponse' {v1BotLocale} -> v1BotLocale) (\s@StartMigrationResponse' {} a -> s {v1BotLocale = a} :: StartMigrationResponse)

-- | The name of the Amazon Lex V1 bot that you are migrating to Amazon Lex
-- V2.
startMigrationResponse_v1BotName :: Lens.Lens' StartMigrationResponse (Prelude.Maybe Prelude.Text)
startMigrationResponse_v1BotName = Lens.lens (\StartMigrationResponse' {v1BotName} -> v1BotName) (\s@StartMigrationResponse' {} a -> s {v1BotName = a} :: StartMigrationResponse)

-- | The version of the bot to migrate to Amazon Lex V2.
startMigrationResponse_v1BotVersion :: Lens.Lens' StartMigrationResponse (Prelude.Maybe Prelude.Text)
startMigrationResponse_v1BotVersion = Lens.lens (\StartMigrationResponse' {v1BotVersion} -> v1BotVersion) (\s@StartMigrationResponse' {} a -> s {v1BotVersion = a} :: StartMigrationResponse)

-- | The unique identifier for the Amazon Lex V2 bot.
startMigrationResponse_v2BotId :: Lens.Lens' StartMigrationResponse (Prelude.Maybe Prelude.Text)
startMigrationResponse_v2BotId = Lens.lens (\StartMigrationResponse' {v2BotId} -> v2BotId) (\s@StartMigrationResponse' {} a -> s {v2BotId = a} :: StartMigrationResponse)

-- | The IAM role that Amazon Lex uses to run the Amazon Lex V2 bot.
startMigrationResponse_v2BotRole :: Lens.Lens' StartMigrationResponse (Prelude.Maybe Prelude.Text)
startMigrationResponse_v2BotRole = Lens.lens (\StartMigrationResponse' {v2BotRole} -> v2BotRole) (\s@StartMigrationResponse' {} a -> s {v2BotRole = a} :: StartMigrationResponse)

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

instance Prelude.NFData StartMigrationResponse where
  rnf StartMigrationResponse' {..} =
    Prelude.rnf migrationId
      `Prelude.seq` Prelude.rnf migrationStrategy
      `Prelude.seq` Prelude.rnf migrationTimestamp
      `Prelude.seq` Prelude.rnf v1BotLocale
      `Prelude.seq` Prelude.rnf v1BotName
      `Prelude.seq` Prelude.rnf v1BotVersion
      `Prelude.seq` Prelude.rnf v2BotId
      `Prelude.seq` Prelude.rnf v2BotRole
      `Prelude.seq` Prelude.rnf httpStatus