{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.ConversionTask
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.EC2.Types.ConversionTask where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import Amazonka.EC2.Types.ConversionTaskState
import Amazonka.EC2.Types.ImportInstanceTaskDetails
import Amazonka.EC2.Types.ImportVolumeTaskDetails
import Amazonka.EC2.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes a conversion task.
--
-- /See:/ 'newConversionTask' smart constructor.
data ConversionTask = ConversionTask'
  { -- | The ID of the conversion task.
    ConversionTask -> Maybe Text
conversionTaskId :: Prelude.Maybe Prelude.Text,
    -- | The time when the task expires. If the upload isn\'t complete before the
    -- expiration time, we automatically cancel the task.
    ConversionTask -> Maybe Text
expirationTime :: Prelude.Maybe Prelude.Text,
    -- | If the task is for importing an instance, this contains information
    -- about the import instance task.
    ConversionTask -> Maybe ImportInstanceTaskDetails
importInstance :: Prelude.Maybe ImportInstanceTaskDetails,
    -- | If the task is for importing a volume, this contains information about
    -- the import volume task.
    ConversionTask -> Maybe ImportVolumeTaskDetails
importVolume :: Prelude.Maybe ImportVolumeTaskDetails,
    -- | The state of the conversion task.
    ConversionTask -> Maybe ConversionTaskState
state :: Prelude.Maybe ConversionTaskState,
    -- | The status message related to the conversion task.
    ConversionTask -> Maybe Text
statusMessage :: Prelude.Maybe Prelude.Text,
    -- | Any tags assigned to the task.
    ConversionTask -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (ConversionTask -> ConversionTask -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ConversionTask -> ConversionTask -> Bool
$c/= :: ConversionTask -> ConversionTask -> Bool
== :: ConversionTask -> ConversionTask -> Bool
$c== :: ConversionTask -> ConversionTask -> Bool
Prelude.Eq, ReadPrec [ConversionTask]
ReadPrec ConversionTask
Int -> ReadS ConversionTask
ReadS [ConversionTask]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ConversionTask]
$creadListPrec :: ReadPrec [ConversionTask]
readPrec :: ReadPrec ConversionTask
$creadPrec :: ReadPrec ConversionTask
readList :: ReadS [ConversionTask]
$creadList :: ReadS [ConversionTask]
readsPrec :: Int -> ReadS ConversionTask
$creadsPrec :: Int -> ReadS ConversionTask
Prelude.Read, Int -> ConversionTask -> ShowS
[ConversionTask] -> ShowS
ConversionTask -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ConversionTask] -> ShowS
$cshowList :: [ConversionTask] -> ShowS
show :: ConversionTask -> String
$cshow :: ConversionTask -> String
showsPrec :: Int -> ConversionTask -> ShowS
$cshowsPrec :: Int -> ConversionTask -> ShowS
Prelude.Show, forall x. Rep ConversionTask x -> ConversionTask
forall x. ConversionTask -> Rep ConversionTask x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ConversionTask x -> ConversionTask
$cfrom :: forall x. ConversionTask -> Rep ConversionTask x
Prelude.Generic)

-- |
-- Create a value of 'ConversionTask' 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:
--
-- 'conversionTaskId', 'conversionTask_conversionTaskId' - The ID of the conversion task.
--
-- 'expirationTime', 'conversionTask_expirationTime' - The time when the task expires. If the upload isn\'t complete before the
-- expiration time, we automatically cancel the task.
--
-- 'importInstance', 'conversionTask_importInstance' - If the task is for importing an instance, this contains information
-- about the import instance task.
--
-- 'importVolume', 'conversionTask_importVolume' - If the task is for importing a volume, this contains information about
-- the import volume task.
--
-- 'state', 'conversionTask_state' - The state of the conversion task.
--
-- 'statusMessage', 'conversionTask_statusMessage' - The status message related to the conversion task.
--
-- 'tags', 'conversionTask_tags' - Any tags assigned to the task.
newConversionTask ::
  ConversionTask
newConversionTask :: ConversionTask
newConversionTask =
  ConversionTask'
    { $sel:conversionTaskId:ConversionTask' :: Maybe Text
conversionTaskId = forall a. Maybe a
Prelude.Nothing,
      $sel:expirationTime:ConversionTask' :: Maybe Text
expirationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:importInstance:ConversionTask' :: Maybe ImportInstanceTaskDetails
importInstance = forall a. Maybe a
Prelude.Nothing,
      $sel:importVolume:ConversionTask' :: Maybe ImportVolumeTaskDetails
importVolume = forall a. Maybe a
Prelude.Nothing,
      $sel:state:ConversionTask' :: Maybe ConversionTaskState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:statusMessage:ConversionTask' :: Maybe Text
statusMessage = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:ConversionTask' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | The ID of the conversion task.
conversionTask_conversionTaskId :: Lens.Lens' ConversionTask (Prelude.Maybe Prelude.Text)
conversionTask_conversionTaskId :: Lens' ConversionTask (Maybe Text)
conversionTask_conversionTaskId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConversionTask' {Maybe Text
conversionTaskId :: Maybe Text
$sel:conversionTaskId:ConversionTask' :: ConversionTask -> Maybe Text
conversionTaskId} -> Maybe Text
conversionTaskId) (\s :: ConversionTask
s@ConversionTask' {} Maybe Text
a -> ConversionTask
s {$sel:conversionTaskId:ConversionTask' :: Maybe Text
conversionTaskId = Maybe Text
a} :: ConversionTask)

-- | The time when the task expires. If the upload isn\'t complete before the
-- expiration time, we automatically cancel the task.
conversionTask_expirationTime :: Lens.Lens' ConversionTask (Prelude.Maybe Prelude.Text)
conversionTask_expirationTime :: Lens' ConversionTask (Maybe Text)
conversionTask_expirationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConversionTask' {Maybe Text
expirationTime :: Maybe Text
$sel:expirationTime:ConversionTask' :: ConversionTask -> Maybe Text
expirationTime} -> Maybe Text
expirationTime) (\s :: ConversionTask
s@ConversionTask' {} Maybe Text
a -> ConversionTask
s {$sel:expirationTime:ConversionTask' :: Maybe Text
expirationTime = Maybe Text
a} :: ConversionTask)

-- | If the task is for importing an instance, this contains information
-- about the import instance task.
conversionTask_importInstance :: Lens.Lens' ConversionTask (Prelude.Maybe ImportInstanceTaskDetails)
conversionTask_importInstance :: Lens' ConversionTask (Maybe ImportInstanceTaskDetails)
conversionTask_importInstance = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConversionTask' {Maybe ImportInstanceTaskDetails
importInstance :: Maybe ImportInstanceTaskDetails
$sel:importInstance:ConversionTask' :: ConversionTask -> Maybe ImportInstanceTaskDetails
importInstance} -> Maybe ImportInstanceTaskDetails
importInstance) (\s :: ConversionTask
s@ConversionTask' {} Maybe ImportInstanceTaskDetails
a -> ConversionTask
s {$sel:importInstance:ConversionTask' :: Maybe ImportInstanceTaskDetails
importInstance = Maybe ImportInstanceTaskDetails
a} :: ConversionTask)

-- | If the task is for importing a volume, this contains information about
-- the import volume task.
conversionTask_importVolume :: Lens.Lens' ConversionTask (Prelude.Maybe ImportVolumeTaskDetails)
conversionTask_importVolume :: Lens' ConversionTask (Maybe ImportVolumeTaskDetails)
conversionTask_importVolume = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConversionTask' {Maybe ImportVolumeTaskDetails
importVolume :: Maybe ImportVolumeTaskDetails
$sel:importVolume:ConversionTask' :: ConversionTask -> Maybe ImportVolumeTaskDetails
importVolume} -> Maybe ImportVolumeTaskDetails
importVolume) (\s :: ConversionTask
s@ConversionTask' {} Maybe ImportVolumeTaskDetails
a -> ConversionTask
s {$sel:importVolume:ConversionTask' :: Maybe ImportVolumeTaskDetails
importVolume = Maybe ImportVolumeTaskDetails
a} :: ConversionTask)

-- | The state of the conversion task.
conversionTask_state :: Lens.Lens' ConversionTask (Prelude.Maybe ConversionTaskState)
conversionTask_state :: Lens' ConversionTask (Maybe ConversionTaskState)
conversionTask_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConversionTask' {Maybe ConversionTaskState
state :: Maybe ConversionTaskState
$sel:state:ConversionTask' :: ConversionTask -> Maybe ConversionTaskState
state} -> Maybe ConversionTaskState
state) (\s :: ConversionTask
s@ConversionTask' {} Maybe ConversionTaskState
a -> ConversionTask
s {$sel:state:ConversionTask' :: Maybe ConversionTaskState
state = Maybe ConversionTaskState
a} :: ConversionTask)

-- | The status message related to the conversion task.
conversionTask_statusMessage :: Lens.Lens' ConversionTask (Prelude.Maybe Prelude.Text)
conversionTask_statusMessage :: Lens' ConversionTask (Maybe Text)
conversionTask_statusMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConversionTask' {Maybe Text
statusMessage :: Maybe Text
$sel:statusMessage:ConversionTask' :: ConversionTask -> Maybe Text
statusMessage} -> Maybe Text
statusMessage) (\s :: ConversionTask
s@ConversionTask' {} Maybe Text
a -> ConversionTask
s {$sel:statusMessage:ConversionTask' :: Maybe Text
statusMessage = Maybe Text
a} :: ConversionTask)

-- | Any tags assigned to the task.
conversionTask_tags :: Lens.Lens' ConversionTask (Prelude.Maybe [Tag])
conversionTask_tags :: Lens' ConversionTask (Maybe [Tag])
conversionTask_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ConversionTask' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:ConversionTask' :: ConversionTask -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: ConversionTask
s@ConversionTask' {} Maybe [Tag]
a -> ConversionTask
s {$sel:tags:ConversionTask' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: ConversionTask) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Data.FromXML ConversionTask where
  parseXML :: [Node] -> Either String ConversionTask
parseXML [Node]
x =
    Maybe Text
-> Maybe Text
-> Maybe ImportInstanceTaskDetails
-> Maybe ImportVolumeTaskDetails
-> Maybe ConversionTaskState
-> Maybe Text
-> Maybe [Tag]
-> ConversionTask
ConversionTask'
      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
"conversionTaskId")
      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
"expirationTime")
      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
"importInstance")
      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
"importVolume")
      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.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"statusMessage")
      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
"tagSet"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )

instance Prelude.Hashable ConversionTask where
  hashWithSalt :: Int -> ConversionTask -> Int
hashWithSalt Int
_salt ConversionTask' {Maybe [Tag]
Maybe Text
Maybe ConversionTaskState
Maybe ImportVolumeTaskDetails
Maybe ImportInstanceTaskDetails
tags :: Maybe [Tag]
statusMessage :: Maybe Text
state :: Maybe ConversionTaskState
importVolume :: Maybe ImportVolumeTaskDetails
importInstance :: Maybe ImportInstanceTaskDetails
expirationTime :: Maybe Text
conversionTaskId :: Maybe Text
$sel:tags:ConversionTask' :: ConversionTask -> Maybe [Tag]
$sel:statusMessage:ConversionTask' :: ConversionTask -> Maybe Text
$sel:state:ConversionTask' :: ConversionTask -> Maybe ConversionTaskState
$sel:importVolume:ConversionTask' :: ConversionTask -> Maybe ImportVolumeTaskDetails
$sel:importInstance:ConversionTask' :: ConversionTask -> Maybe ImportInstanceTaskDetails
$sel:expirationTime:ConversionTask' :: ConversionTask -> Maybe Text
$sel:conversionTaskId:ConversionTask' :: ConversionTask -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
conversionTaskId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
expirationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ImportInstanceTaskDetails
importInstance
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ImportVolumeTaskDetails
importVolume
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ConversionTaskState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
statusMessage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData ConversionTask where
  rnf :: ConversionTask -> ()
rnf ConversionTask' {Maybe [Tag]
Maybe Text
Maybe ConversionTaskState
Maybe ImportVolumeTaskDetails
Maybe ImportInstanceTaskDetails
tags :: Maybe [Tag]
statusMessage :: Maybe Text
state :: Maybe ConversionTaskState
importVolume :: Maybe ImportVolumeTaskDetails
importInstance :: Maybe ImportInstanceTaskDetails
expirationTime :: Maybe Text
conversionTaskId :: Maybe Text
$sel:tags:ConversionTask' :: ConversionTask -> Maybe [Tag]
$sel:statusMessage:ConversionTask' :: ConversionTask -> Maybe Text
$sel:state:ConversionTask' :: ConversionTask -> Maybe ConversionTaskState
$sel:importVolume:ConversionTask' :: ConversionTask -> Maybe ImportVolumeTaskDetails
$sel:importInstance:ConversionTask' :: ConversionTask -> Maybe ImportInstanceTaskDetails
$sel:expirationTime:ConversionTask' :: ConversionTask -> Maybe Text
$sel:conversionTaskId:ConversionTask' :: ConversionTask -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
conversionTaskId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
expirationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ImportInstanceTaskDetails
importInstance
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ImportVolumeTaskDetails
importVolume
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ConversionTaskState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
statusMessage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags