{-# 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.ExportTask
-- 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.ExportTask 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.ExportTaskState
import Amazonka.EC2.Types.ExportToS3Task
import Amazonka.EC2.Types.InstanceExportDetails
import Amazonka.EC2.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes an export instance task.
--
-- /See:/ 'newExportTask' smart constructor.
data ExportTask = ExportTask'
  { -- | The tags for the export task.
    ExportTask -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | A description of the resource being exported.
    ExportTask -> Text
description :: Prelude.Text,
    -- | The ID of the export task.
    ExportTask -> Text
exportTaskId :: Prelude.Text,
    -- | Information about the export task.
    ExportTask -> ExportToS3Task
exportToS3Task :: ExportToS3Task,
    -- | Information about the instance to export.
    ExportTask -> InstanceExportDetails
instanceExportDetails :: InstanceExportDetails,
    -- | The state of the export task.
    ExportTask -> ExportTaskState
state :: ExportTaskState,
    -- | The status message related to the export task.
    ExportTask -> Text
statusMessage :: Prelude.Text
  }
  deriving (ExportTask -> ExportTask -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExportTask -> ExportTask -> Bool
$c/= :: ExportTask -> ExportTask -> Bool
== :: ExportTask -> ExportTask -> Bool
$c== :: ExportTask -> ExportTask -> Bool
Prelude.Eq, ReadPrec [ExportTask]
ReadPrec ExportTask
Int -> ReadS ExportTask
ReadS [ExportTask]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ExportTask]
$creadListPrec :: ReadPrec [ExportTask]
readPrec :: ReadPrec ExportTask
$creadPrec :: ReadPrec ExportTask
readList :: ReadS [ExportTask]
$creadList :: ReadS [ExportTask]
readsPrec :: Int -> ReadS ExportTask
$creadsPrec :: Int -> ReadS ExportTask
Prelude.Read, Int -> ExportTask -> ShowS
[ExportTask] -> ShowS
ExportTask -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExportTask] -> ShowS
$cshowList :: [ExportTask] -> ShowS
show :: ExportTask -> String
$cshow :: ExportTask -> String
showsPrec :: Int -> ExportTask -> ShowS
$cshowsPrec :: Int -> ExportTask -> ShowS
Prelude.Show, forall x. Rep ExportTask x -> ExportTask
forall x. ExportTask -> Rep ExportTask x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ExportTask x -> ExportTask
$cfrom :: forall x. ExportTask -> Rep ExportTask x
Prelude.Generic)

-- |
-- Create a value of 'ExportTask' 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', 'exportTask_tags' - The tags for the export task.
--
-- 'description', 'exportTask_description' - A description of the resource being exported.
--
-- 'exportTaskId', 'exportTask_exportTaskId' - The ID of the export task.
--
-- 'exportToS3Task', 'exportTask_exportToS3Task' - Information about the export task.
--
-- 'instanceExportDetails', 'exportTask_instanceExportDetails' - Information about the instance to export.
--
-- 'state', 'exportTask_state' - The state of the export task.
--
-- 'statusMessage', 'exportTask_statusMessage' - The status message related to the export task.
newExportTask ::
  -- | 'description'
  Prelude.Text ->
  -- | 'exportTaskId'
  Prelude.Text ->
  -- | 'exportToS3Task'
  ExportToS3Task ->
  -- | 'instanceExportDetails'
  InstanceExportDetails ->
  -- | 'state'
  ExportTaskState ->
  -- | 'statusMessage'
  Prelude.Text ->
  ExportTask
newExportTask :: Text
-> Text
-> ExportToS3Task
-> InstanceExportDetails
-> ExportTaskState
-> Text
-> ExportTask
newExportTask
  Text
pDescription_
  Text
pExportTaskId_
  ExportToS3Task
pExportToS3Task_
  InstanceExportDetails
pInstanceExportDetails_
  ExportTaskState
pState_
  Text
pStatusMessage_ =
    ExportTask'
      { $sel:tags:ExportTask' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:description:ExportTask' :: Text
description = Text
pDescription_,
        $sel:exportTaskId:ExportTask' :: Text
exportTaskId = Text
pExportTaskId_,
        $sel:exportToS3Task:ExportTask' :: ExportToS3Task
exportToS3Task = ExportToS3Task
pExportToS3Task_,
        $sel:instanceExportDetails:ExportTask' :: InstanceExportDetails
instanceExportDetails = InstanceExportDetails
pInstanceExportDetails_,
        $sel:state:ExportTask' :: ExportTaskState
state = ExportTaskState
pState_,
        $sel:statusMessage:ExportTask' :: Text
statusMessage = Text
pStatusMessage_
      }

-- | The tags for the export task.
exportTask_tags :: Lens.Lens' ExportTask (Prelude.Maybe [Tag])
exportTask_tags :: Lens' ExportTask (Maybe [Tag])
exportTask_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTask' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:ExportTask' :: ExportTask -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: ExportTask
s@ExportTask' {} Maybe [Tag]
a -> ExportTask
s {$sel:tags:ExportTask' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: ExportTask) 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

-- | A description of the resource being exported.
exportTask_description :: Lens.Lens' ExportTask Prelude.Text
exportTask_description :: Lens' ExportTask Text
exportTask_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTask' {Text
description :: Text
$sel:description:ExportTask' :: ExportTask -> Text
description} -> Text
description) (\s :: ExportTask
s@ExportTask' {} Text
a -> ExportTask
s {$sel:description:ExportTask' :: Text
description = Text
a} :: ExportTask)

-- | The ID of the export task.
exportTask_exportTaskId :: Lens.Lens' ExportTask Prelude.Text
exportTask_exportTaskId :: Lens' ExportTask Text
exportTask_exportTaskId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTask' {Text
exportTaskId :: Text
$sel:exportTaskId:ExportTask' :: ExportTask -> Text
exportTaskId} -> Text
exportTaskId) (\s :: ExportTask
s@ExportTask' {} Text
a -> ExportTask
s {$sel:exportTaskId:ExportTask' :: Text
exportTaskId = Text
a} :: ExportTask)

-- | Information about the export task.
exportTask_exportToS3Task :: Lens.Lens' ExportTask ExportToS3Task
exportTask_exportToS3Task :: Lens' ExportTask ExportToS3Task
exportTask_exportToS3Task = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTask' {ExportToS3Task
exportToS3Task :: ExportToS3Task
$sel:exportToS3Task:ExportTask' :: ExportTask -> ExportToS3Task
exportToS3Task} -> ExportToS3Task
exportToS3Task) (\s :: ExportTask
s@ExportTask' {} ExportToS3Task
a -> ExportTask
s {$sel:exportToS3Task:ExportTask' :: ExportToS3Task
exportToS3Task = ExportToS3Task
a} :: ExportTask)

-- | Information about the instance to export.
exportTask_instanceExportDetails :: Lens.Lens' ExportTask InstanceExportDetails
exportTask_instanceExportDetails :: Lens' ExportTask InstanceExportDetails
exportTask_instanceExportDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTask' {InstanceExportDetails
instanceExportDetails :: InstanceExportDetails
$sel:instanceExportDetails:ExportTask' :: ExportTask -> InstanceExportDetails
instanceExportDetails} -> InstanceExportDetails
instanceExportDetails) (\s :: ExportTask
s@ExportTask' {} InstanceExportDetails
a -> ExportTask
s {$sel:instanceExportDetails:ExportTask' :: InstanceExportDetails
instanceExportDetails = InstanceExportDetails
a} :: ExportTask)

-- | The state of the export task.
exportTask_state :: Lens.Lens' ExportTask ExportTaskState
exportTask_state :: Lens' ExportTask ExportTaskState
exportTask_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportTask' {ExportTaskState
state :: ExportTaskState
$sel:state:ExportTask' :: ExportTask -> ExportTaskState
state} -> ExportTaskState
state) (\s :: ExportTask
s@ExportTask' {} ExportTaskState
a -> ExportTask
s {$sel:state:ExportTask' :: ExportTaskState
state = ExportTaskState
a} :: ExportTask)

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

instance Data.FromXML ExportTask where
  parseXML :: [Node] -> Either String ExportTask
parseXML [Node]
x =
    Maybe [Tag]
-> Text
-> Text
-> ExportToS3Task
-> InstanceExportDetails
-> ExportTaskState
-> Text
-> ExportTask
ExportTask'
      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
"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")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"description")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"exportTaskId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"exportToS3")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"instanceExport")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String 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 a
Data..@ Text
"statusMessage")

instance Prelude.Hashable ExportTask where
  hashWithSalt :: Int -> ExportTask -> Int
hashWithSalt Int
_salt ExportTask' {Maybe [Tag]
Text
ExportTaskState
ExportToS3Task
InstanceExportDetails
statusMessage :: Text
state :: ExportTaskState
instanceExportDetails :: InstanceExportDetails
exportToS3Task :: ExportToS3Task
exportTaskId :: Text
description :: Text
tags :: Maybe [Tag]
$sel:statusMessage:ExportTask' :: ExportTask -> Text
$sel:state:ExportTask' :: ExportTask -> ExportTaskState
$sel:instanceExportDetails:ExportTask' :: ExportTask -> InstanceExportDetails
$sel:exportToS3Task:ExportTask' :: ExportTask -> ExportToS3Task
$sel:exportTaskId:ExportTask' :: ExportTask -> Text
$sel:description:ExportTask' :: ExportTask -> Text
$sel:tags:ExportTask' :: ExportTask -> Maybe [Tag]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
exportTaskId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ExportToS3Task
exportToS3Task
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` InstanceExportDetails
instanceExportDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ExportTaskState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
statusMessage

instance Prelude.NFData ExportTask where
  rnf :: ExportTask -> ()
rnf ExportTask' {Maybe [Tag]
Text
ExportTaskState
ExportToS3Task
InstanceExportDetails
statusMessage :: Text
state :: ExportTaskState
instanceExportDetails :: InstanceExportDetails
exportToS3Task :: ExportToS3Task
exportTaskId :: Text
description :: Text
tags :: Maybe [Tag]
$sel:statusMessage:ExportTask' :: ExportTask -> Text
$sel:state:ExportTask' :: ExportTask -> ExportTaskState
$sel:instanceExportDetails:ExportTask' :: ExportTask -> InstanceExportDetails
$sel:exportToS3Task:ExportTask' :: ExportTask -> ExportToS3Task
$sel:exportTaskId:ExportTask' :: ExportTask -> Text
$sel:description:ExportTask' :: ExportTask -> Text
$sel:tags:ExportTask' :: ExportTask -> Maybe [Tag]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
exportTaskId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ExportToS3Task
exportToS3Task
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf InstanceExportDetails
instanceExportDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ExportTaskState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
statusMessage