{-# 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.EC2.CancelImportTask
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Cancels an in-process import virtual machine or import snapshot task.
module Amazonka.EC2.CancelImportTask
  ( -- * Creating a Request
    CancelImportTask (..),
    newCancelImportTask,

    -- * Request Lenses
    cancelImportTask_cancelReason,
    cancelImportTask_dryRun,
    cancelImportTask_importTaskId,

    -- * Destructuring the Response
    CancelImportTaskResponse (..),
    newCancelImportTaskResponse,

    -- * Response Lenses
    cancelImportTaskResponse_importTaskId,
    cancelImportTaskResponse_previousState,
    cancelImportTaskResponse_state,
    cancelImportTaskResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCancelImportTask' smart constructor.
data CancelImportTask = CancelImportTask'
  { -- | The reason for canceling the task.
    CancelImportTask -> Maybe Text
cancelReason :: Prelude.Maybe Prelude.Text,
    -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    CancelImportTask -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the import image or import snapshot task to be canceled.
    CancelImportTask -> Maybe Text
importTaskId :: Prelude.Maybe Prelude.Text
  }
  deriving (CancelImportTask -> CancelImportTask -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CancelImportTask -> CancelImportTask -> Bool
$c/= :: CancelImportTask -> CancelImportTask -> Bool
== :: CancelImportTask -> CancelImportTask -> Bool
$c== :: CancelImportTask -> CancelImportTask -> Bool
Prelude.Eq, ReadPrec [CancelImportTask]
ReadPrec CancelImportTask
Int -> ReadS CancelImportTask
ReadS [CancelImportTask]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CancelImportTask]
$creadListPrec :: ReadPrec [CancelImportTask]
readPrec :: ReadPrec CancelImportTask
$creadPrec :: ReadPrec CancelImportTask
readList :: ReadS [CancelImportTask]
$creadList :: ReadS [CancelImportTask]
readsPrec :: Int -> ReadS CancelImportTask
$creadsPrec :: Int -> ReadS CancelImportTask
Prelude.Read, Int -> CancelImportTask -> ShowS
[CancelImportTask] -> ShowS
CancelImportTask -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CancelImportTask] -> ShowS
$cshowList :: [CancelImportTask] -> ShowS
show :: CancelImportTask -> String
$cshow :: CancelImportTask -> String
showsPrec :: Int -> CancelImportTask -> ShowS
$cshowsPrec :: Int -> CancelImportTask -> ShowS
Prelude.Show, forall x. Rep CancelImportTask x -> CancelImportTask
forall x. CancelImportTask -> Rep CancelImportTask x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CancelImportTask x -> CancelImportTask
$cfrom :: forall x. CancelImportTask -> Rep CancelImportTask x
Prelude.Generic)

-- |
-- Create a value of 'CancelImportTask' 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:
--
-- 'cancelReason', 'cancelImportTask_cancelReason' - The reason for canceling the task.
--
-- 'dryRun', 'cancelImportTask_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'importTaskId', 'cancelImportTask_importTaskId' - The ID of the import image or import snapshot task to be canceled.
newCancelImportTask ::
  CancelImportTask
newCancelImportTask :: CancelImportTask
newCancelImportTask =
  CancelImportTask'
    { $sel:cancelReason:CancelImportTask' :: Maybe Text
cancelReason = forall a. Maybe a
Prelude.Nothing,
      $sel:dryRun:CancelImportTask' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
      $sel:importTaskId:CancelImportTask' :: Maybe Text
importTaskId = forall a. Maybe a
Prelude.Nothing
    }

-- | The reason for canceling the task.
cancelImportTask_cancelReason :: Lens.Lens' CancelImportTask (Prelude.Maybe Prelude.Text)
cancelImportTask_cancelReason :: Lens' CancelImportTask (Maybe Text)
cancelImportTask_cancelReason = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CancelImportTask' {Maybe Text
cancelReason :: Maybe Text
$sel:cancelReason:CancelImportTask' :: CancelImportTask -> Maybe Text
cancelReason} -> Maybe Text
cancelReason) (\s :: CancelImportTask
s@CancelImportTask' {} Maybe Text
a -> CancelImportTask
s {$sel:cancelReason:CancelImportTask' :: Maybe Text
cancelReason = Maybe Text
a} :: CancelImportTask)

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
cancelImportTask_dryRun :: Lens.Lens' CancelImportTask (Prelude.Maybe Prelude.Bool)
cancelImportTask_dryRun :: Lens' CancelImportTask (Maybe Bool)
cancelImportTask_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CancelImportTask' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:CancelImportTask' :: CancelImportTask -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: CancelImportTask
s@CancelImportTask' {} Maybe Bool
a -> CancelImportTask
s {$sel:dryRun:CancelImportTask' :: Maybe Bool
dryRun = Maybe Bool
a} :: CancelImportTask)

-- | The ID of the import image or import snapshot task to be canceled.
cancelImportTask_importTaskId :: Lens.Lens' CancelImportTask (Prelude.Maybe Prelude.Text)
cancelImportTask_importTaskId :: Lens' CancelImportTask (Maybe Text)
cancelImportTask_importTaskId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CancelImportTask' {Maybe Text
importTaskId :: Maybe Text
$sel:importTaskId:CancelImportTask' :: CancelImportTask -> Maybe Text
importTaskId} -> Maybe Text
importTaskId) (\s :: CancelImportTask
s@CancelImportTask' {} Maybe Text
a -> CancelImportTask
s {$sel:importTaskId:CancelImportTask' :: Maybe Text
importTaskId = Maybe Text
a} :: CancelImportTask)

instance Core.AWSRequest CancelImportTask where
  type
    AWSResponse CancelImportTask =
      CancelImportTaskResponse
  request :: (Service -> Service)
-> CancelImportTask -> Request CancelImportTask
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CancelImportTask
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CancelImportTask)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Text
-> Maybe Text -> Maybe Text -> Int -> CancelImportTaskResponse
CancelImportTaskResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"importTaskId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"previousState")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"state")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable CancelImportTask where
  hashWithSalt :: Int -> CancelImportTask -> Int
hashWithSalt Int
_salt CancelImportTask' {Maybe Bool
Maybe Text
importTaskId :: Maybe Text
dryRun :: Maybe Bool
cancelReason :: Maybe Text
$sel:importTaskId:CancelImportTask' :: CancelImportTask -> Maybe Text
$sel:dryRun:CancelImportTask' :: CancelImportTask -> Maybe Bool
$sel:cancelReason:CancelImportTask' :: CancelImportTask -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
cancelReason
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
importTaskId

instance Prelude.NFData CancelImportTask where
  rnf :: CancelImportTask -> ()
rnf CancelImportTask' {Maybe Bool
Maybe Text
importTaskId :: Maybe Text
dryRun :: Maybe Bool
cancelReason :: Maybe Text
$sel:importTaskId:CancelImportTask' :: CancelImportTask -> Maybe Text
$sel:dryRun:CancelImportTask' :: CancelImportTask -> Maybe Bool
$sel:cancelReason:CancelImportTask' :: CancelImportTask -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
cancelReason
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
dryRun
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
importTaskId

instance Data.ToHeaders CancelImportTask where
  toHeaders :: CancelImportTask -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath CancelImportTask where
  toPath :: CancelImportTask -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery CancelImportTask where
  toQuery :: CancelImportTask -> QueryString
toQuery CancelImportTask' {Maybe Bool
Maybe Text
importTaskId :: Maybe Text
dryRun :: Maybe Bool
cancelReason :: Maybe Text
$sel:importTaskId:CancelImportTask' :: CancelImportTask -> Maybe Text
$sel:dryRun:CancelImportTask' :: CancelImportTask -> Maybe Bool
$sel:cancelReason:CancelImportTask' :: CancelImportTask -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"CancelImportTask" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"CancelReason" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
cancelReason,
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun,
        ByteString
"ImportTaskId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
importTaskId
      ]

-- | /See:/ 'newCancelImportTaskResponse' smart constructor.
data CancelImportTaskResponse = CancelImportTaskResponse'
  { -- | The ID of the task being canceled.
    CancelImportTaskResponse -> Maybe Text
importTaskId :: Prelude.Maybe Prelude.Text,
    -- | The current state of the task being canceled.
    CancelImportTaskResponse -> Maybe Text
previousState :: Prelude.Maybe Prelude.Text,
    -- | The current state of the task being canceled.
    CancelImportTaskResponse -> Maybe Text
state :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CancelImportTaskResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CancelImportTaskResponse -> CancelImportTaskResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CancelImportTaskResponse -> CancelImportTaskResponse -> Bool
$c/= :: CancelImportTaskResponse -> CancelImportTaskResponse -> Bool
== :: CancelImportTaskResponse -> CancelImportTaskResponse -> Bool
$c== :: CancelImportTaskResponse -> CancelImportTaskResponse -> Bool
Prelude.Eq, ReadPrec [CancelImportTaskResponse]
ReadPrec CancelImportTaskResponse
Int -> ReadS CancelImportTaskResponse
ReadS [CancelImportTaskResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CancelImportTaskResponse]
$creadListPrec :: ReadPrec [CancelImportTaskResponse]
readPrec :: ReadPrec CancelImportTaskResponse
$creadPrec :: ReadPrec CancelImportTaskResponse
readList :: ReadS [CancelImportTaskResponse]
$creadList :: ReadS [CancelImportTaskResponse]
readsPrec :: Int -> ReadS CancelImportTaskResponse
$creadsPrec :: Int -> ReadS CancelImportTaskResponse
Prelude.Read, Int -> CancelImportTaskResponse -> ShowS
[CancelImportTaskResponse] -> ShowS
CancelImportTaskResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CancelImportTaskResponse] -> ShowS
$cshowList :: [CancelImportTaskResponse] -> ShowS
show :: CancelImportTaskResponse -> String
$cshow :: CancelImportTaskResponse -> String
showsPrec :: Int -> CancelImportTaskResponse -> ShowS
$cshowsPrec :: Int -> CancelImportTaskResponse -> ShowS
Prelude.Show, forall x.
Rep CancelImportTaskResponse x -> CancelImportTaskResponse
forall x.
CancelImportTaskResponse -> Rep CancelImportTaskResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CancelImportTaskResponse x -> CancelImportTaskResponse
$cfrom :: forall x.
CancelImportTaskResponse -> Rep CancelImportTaskResponse x
Prelude.Generic)

-- |
-- Create a value of 'CancelImportTaskResponse' 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:
--
-- 'importTaskId', 'cancelImportTaskResponse_importTaskId' - The ID of the task being canceled.
--
-- 'previousState', 'cancelImportTaskResponse_previousState' - The current state of the task being canceled.
--
-- 'state', 'cancelImportTaskResponse_state' - The current state of the task being canceled.
--
-- 'httpStatus', 'cancelImportTaskResponse_httpStatus' - The response's http status code.
newCancelImportTaskResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CancelImportTaskResponse
newCancelImportTaskResponse :: Int -> CancelImportTaskResponse
newCancelImportTaskResponse Int
pHttpStatus_ =
  CancelImportTaskResponse'
    { $sel:importTaskId:CancelImportTaskResponse' :: Maybe Text
importTaskId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:previousState:CancelImportTaskResponse' :: Maybe Text
previousState = forall a. Maybe a
Prelude.Nothing,
      $sel:state:CancelImportTaskResponse' :: Maybe Text
state = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CancelImportTaskResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ID of the task being canceled.
cancelImportTaskResponse_importTaskId :: Lens.Lens' CancelImportTaskResponse (Prelude.Maybe Prelude.Text)
cancelImportTaskResponse_importTaskId :: Lens' CancelImportTaskResponse (Maybe Text)
cancelImportTaskResponse_importTaskId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CancelImportTaskResponse' {Maybe Text
importTaskId :: Maybe Text
$sel:importTaskId:CancelImportTaskResponse' :: CancelImportTaskResponse -> Maybe Text
importTaskId} -> Maybe Text
importTaskId) (\s :: CancelImportTaskResponse
s@CancelImportTaskResponse' {} Maybe Text
a -> CancelImportTaskResponse
s {$sel:importTaskId:CancelImportTaskResponse' :: Maybe Text
importTaskId = Maybe Text
a} :: CancelImportTaskResponse)

-- | The current state of the task being canceled.
cancelImportTaskResponse_previousState :: Lens.Lens' CancelImportTaskResponse (Prelude.Maybe Prelude.Text)
cancelImportTaskResponse_previousState :: Lens' CancelImportTaskResponse (Maybe Text)
cancelImportTaskResponse_previousState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CancelImportTaskResponse' {Maybe Text
previousState :: Maybe Text
$sel:previousState:CancelImportTaskResponse' :: CancelImportTaskResponse -> Maybe Text
previousState} -> Maybe Text
previousState) (\s :: CancelImportTaskResponse
s@CancelImportTaskResponse' {} Maybe Text
a -> CancelImportTaskResponse
s {$sel:previousState:CancelImportTaskResponse' :: Maybe Text
previousState = Maybe Text
a} :: CancelImportTaskResponse)

-- | The current state of the task being canceled.
cancelImportTaskResponse_state :: Lens.Lens' CancelImportTaskResponse (Prelude.Maybe Prelude.Text)
cancelImportTaskResponse_state :: Lens' CancelImportTaskResponse (Maybe Text)
cancelImportTaskResponse_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CancelImportTaskResponse' {Maybe Text
state :: Maybe Text
$sel:state:CancelImportTaskResponse' :: CancelImportTaskResponse -> Maybe Text
state} -> Maybe Text
state) (\s :: CancelImportTaskResponse
s@CancelImportTaskResponse' {} Maybe Text
a -> CancelImportTaskResponse
s {$sel:state:CancelImportTaskResponse' :: Maybe Text
state = Maybe Text
a} :: CancelImportTaskResponse)

-- | The response's http status code.
cancelImportTaskResponse_httpStatus :: Lens.Lens' CancelImportTaskResponse Prelude.Int
cancelImportTaskResponse_httpStatus :: Lens' CancelImportTaskResponse Int
cancelImportTaskResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CancelImportTaskResponse' {Int
httpStatus :: Int
$sel:httpStatus:CancelImportTaskResponse' :: CancelImportTaskResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: CancelImportTaskResponse
s@CancelImportTaskResponse' {} Int
a -> CancelImportTaskResponse
s {$sel:httpStatus:CancelImportTaskResponse' :: Int
httpStatus = Int
a} :: CancelImportTaskResponse)

instance Prelude.NFData CancelImportTaskResponse where
  rnf :: CancelImportTaskResponse -> ()
rnf CancelImportTaskResponse' {Int
Maybe Text
httpStatus :: Int
state :: Maybe Text
previousState :: Maybe Text
importTaskId :: Maybe Text
$sel:httpStatus:CancelImportTaskResponse' :: CancelImportTaskResponse -> Int
$sel:state:CancelImportTaskResponse' :: CancelImportTaskResponse -> Maybe Text
$sel:previousState:CancelImportTaskResponse' :: CancelImportTaskResponse -> Maybe Text
$sel:importTaskId:CancelImportTaskResponse' :: CancelImportTaskResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
importTaskId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
previousState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus