{-# 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.ExportImageTask
-- 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.ExportImageTask 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.ExportTaskS3Location
import Amazonka.EC2.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes an export image task.
--
-- /See:/ 'newExportImageTask' smart constructor.
data ExportImageTask = ExportImageTask'
  { -- | A description of the image being exported.
    ExportImageTask -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The ID of the export image task.
    ExportImageTask -> Maybe Text
exportImageTaskId :: Prelude.Maybe Prelude.Text,
    -- | The ID of the image.
    ExportImageTask -> Maybe Text
imageId :: Prelude.Maybe Prelude.Text,
    -- | The percent complete of the export image task.
    ExportImageTask -> Maybe Text
progress :: Prelude.Maybe Prelude.Text,
    -- | Information about the destination Amazon S3 bucket.
    ExportImageTask -> Maybe ExportTaskS3Location
s3ExportLocation :: Prelude.Maybe ExportTaskS3Location,
    -- | The status of the export image task. The possible values are @active@,
    -- @completed@, @deleting@, and @deleted@.
    ExportImageTask -> Maybe Text
status :: Prelude.Maybe Prelude.Text,
    -- | The status message for the export image task.
    ExportImageTask -> Maybe Text
statusMessage :: Prelude.Maybe Prelude.Text,
    -- | Any tags assigned to the export image task.
    ExportImageTask -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (ExportImageTask -> ExportImageTask -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExportImageTask -> ExportImageTask -> Bool
$c/= :: ExportImageTask -> ExportImageTask -> Bool
== :: ExportImageTask -> ExportImageTask -> Bool
$c== :: ExportImageTask -> ExportImageTask -> Bool
Prelude.Eq, ReadPrec [ExportImageTask]
ReadPrec ExportImageTask
Int -> ReadS ExportImageTask
ReadS [ExportImageTask]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ExportImageTask]
$creadListPrec :: ReadPrec [ExportImageTask]
readPrec :: ReadPrec ExportImageTask
$creadPrec :: ReadPrec ExportImageTask
readList :: ReadS [ExportImageTask]
$creadList :: ReadS [ExportImageTask]
readsPrec :: Int -> ReadS ExportImageTask
$creadsPrec :: Int -> ReadS ExportImageTask
Prelude.Read, Int -> ExportImageTask -> ShowS
[ExportImageTask] -> ShowS
ExportImageTask -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExportImageTask] -> ShowS
$cshowList :: [ExportImageTask] -> ShowS
show :: ExportImageTask -> String
$cshow :: ExportImageTask -> String
showsPrec :: Int -> ExportImageTask -> ShowS
$cshowsPrec :: Int -> ExportImageTask -> ShowS
Prelude.Show, forall x. Rep ExportImageTask x -> ExportImageTask
forall x. ExportImageTask -> Rep ExportImageTask x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ExportImageTask x -> ExportImageTask
$cfrom :: forall x. ExportImageTask -> Rep ExportImageTask x
Prelude.Generic)

-- |
-- Create a value of 'ExportImageTask' 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:
--
-- 'description', 'exportImageTask_description' - A description of the image being exported.
--
-- 'exportImageTaskId', 'exportImageTask_exportImageTaskId' - The ID of the export image task.
--
-- 'imageId', 'exportImageTask_imageId' - The ID of the image.
--
-- 'progress', 'exportImageTask_progress' - The percent complete of the export image task.
--
-- 's3ExportLocation', 'exportImageTask_s3ExportLocation' - Information about the destination Amazon S3 bucket.
--
-- 'status', 'exportImageTask_status' - The status of the export image task. The possible values are @active@,
-- @completed@, @deleting@, and @deleted@.
--
-- 'statusMessage', 'exportImageTask_statusMessage' - The status message for the export image task.
--
-- 'tags', 'exportImageTask_tags' - Any tags assigned to the export image task.
newExportImageTask ::
  ExportImageTask
newExportImageTask :: ExportImageTask
newExportImageTask =
  ExportImageTask'
    { $sel:description:ExportImageTask' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:exportImageTaskId:ExportImageTask' :: Maybe Text
exportImageTaskId = forall a. Maybe a
Prelude.Nothing,
      $sel:imageId:ExportImageTask' :: Maybe Text
imageId = forall a. Maybe a
Prelude.Nothing,
      $sel:progress:ExportImageTask' :: Maybe Text
progress = forall a. Maybe a
Prelude.Nothing,
      $sel:s3ExportLocation:ExportImageTask' :: Maybe ExportTaskS3Location
s3ExportLocation = forall a. Maybe a
Prelude.Nothing,
      $sel:status:ExportImageTask' :: Maybe Text
status = forall a. Maybe a
Prelude.Nothing,
      $sel:statusMessage:ExportImageTask' :: Maybe Text
statusMessage = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:ExportImageTask' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

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

-- | The ID of the export image task.
exportImageTask_exportImageTaskId :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
exportImageTask_exportImageTaskId :: Lens' ExportImageTask (Maybe Text)
exportImageTask_exportImageTaskId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportImageTask' {Maybe Text
exportImageTaskId :: Maybe Text
$sel:exportImageTaskId:ExportImageTask' :: ExportImageTask -> Maybe Text
exportImageTaskId} -> Maybe Text
exportImageTaskId) (\s :: ExportImageTask
s@ExportImageTask' {} Maybe Text
a -> ExportImageTask
s {$sel:exportImageTaskId:ExportImageTask' :: Maybe Text
exportImageTaskId = Maybe Text
a} :: ExportImageTask)

-- | The ID of the image.
exportImageTask_imageId :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
exportImageTask_imageId :: Lens' ExportImageTask (Maybe Text)
exportImageTask_imageId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportImageTask' {Maybe Text
imageId :: Maybe Text
$sel:imageId:ExportImageTask' :: ExportImageTask -> Maybe Text
imageId} -> Maybe Text
imageId) (\s :: ExportImageTask
s@ExportImageTask' {} Maybe Text
a -> ExportImageTask
s {$sel:imageId:ExportImageTask' :: Maybe Text
imageId = Maybe Text
a} :: ExportImageTask)

-- | The percent complete of the export image task.
exportImageTask_progress :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
exportImageTask_progress :: Lens' ExportImageTask (Maybe Text)
exportImageTask_progress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportImageTask' {Maybe Text
progress :: Maybe Text
$sel:progress:ExportImageTask' :: ExportImageTask -> Maybe Text
progress} -> Maybe Text
progress) (\s :: ExportImageTask
s@ExportImageTask' {} Maybe Text
a -> ExportImageTask
s {$sel:progress:ExportImageTask' :: Maybe Text
progress = Maybe Text
a} :: ExportImageTask)

-- | Information about the destination Amazon S3 bucket.
exportImageTask_s3ExportLocation :: Lens.Lens' ExportImageTask (Prelude.Maybe ExportTaskS3Location)
exportImageTask_s3ExportLocation :: Lens' ExportImageTask (Maybe ExportTaskS3Location)
exportImageTask_s3ExportLocation = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportImageTask' {Maybe ExportTaskS3Location
s3ExportLocation :: Maybe ExportTaskS3Location
$sel:s3ExportLocation:ExportImageTask' :: ExportImageTask -> Maybe ExportTaskS3Location
s3ExportLocation} -> Maybe ExportTaskS3Location
s3ExportLocation) (\s :: ExportImageTask
s@ExportImageTask' {} Maybe ExportTaskS3Location
a -> ExportImageTask
s {$sel:s3ExportLocation:ExportImageTask' :: Maybe ExportTaskS3Location
s3ExportLocation = Maybe ExportTaskS3Location
a} :: ExportImageTask)

-- | The status of the export image task. The possible values are @active@,
-- @completed@, @deleting@, and @deleted@.
exportImageTask_status :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
exportImageTask_status :: Lens' ExportImageTask (Maybe Text)
exportImageTask_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportImageTask' {Maybe Text
status :: Maybe Text
$sel:status:ExportImageTask' :: ExportImageTask -> Maybe Text
status} -> Maybe Text
status) (\s :: ExportImageTask
s@ExportImageTask' {} Maybe Text
a -> ExportImageTask
s {$sel:status:ExportImageTask' :: Maybe Text
status = Maybe Text
a} :: ExportImageTask)

-- | The status message for the export image task.
exportImageTask_statusMessage :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
exportImageTask_statusMessage :: Lens' ExportImageTask (Maybe Text)
exportImageTask_statusMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportImageTask' {Maybe Text
statusMessage :: Maybe Text
$sel:statusMessage:ExportImageTask' :: ExportImageTask -> Maybe Text
statusMessage} -> Maybe Text
statusMessage) (\s :: ExportImageTask
s@ExportImageTask' {} Maybe Text
a -> ExportImageTask
s {$sel:statusMessage:ExportImageTask' :: Maybe Text
statusMessage = Maybe Text
a} :: ExportImageTask)

-- | Any tags assigned to the export image task.
exportImageTask_tags :: Lens.Lens' ExportImageTask (Prelude.Maybe [Tag])
exportImageTask_tags :: Lens' ExportImageTask (Maybe [Tag])
exportImageTask_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ExportImageTask' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:ExportImageTask' :: ExportImageTask -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: ExportImageTask
s@ExportImageTask' {} Maybe [Tag]
a -> ExportImageTask
s {$sel:tags:ExportImageTask' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: ExportImageTask) 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 ExportImageTask where
  parseXML :: [Node] -> Either String ExportImageTask
parseXML [Node]
x =
    Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe ExportTaskS3Location
-> Maybe Text
-> Maybe Text
-> Maybe [Tag]
-> ExportImageTask
ExportImageTask'
      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
"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 (Maybe a)
Data..@? Text
"exportImageTaskId")
      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
"imageId")
      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
"progress")
      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
"s3ExportLocation")
      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
"status")
      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 ExportImageTask where
  hashWithSalt :: Int -> ExportImageTask -> Int
hashWithSalt Int
_salt ExportImageTask' {Maybe [Tag]
Maybe Text
Maybe ExportTaskS3Location
tags :: Maybe [Tag]
statusMessage :: Maybe Text
status :: Maybe Text
s3ExportLocation :: Maybe ExportTaskS3Location
progress :: Maybe Text
imageId :: Maybe Text
exportImageTaskId :: Maybe Text
description :: Maybe Text
$sel:tags:ExportImageTask' :: ExportImageTask -> Maybe [Tag]
$sel:statusMessage:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:status:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:s3ExportLocation:ExportImageTask' :: ExportImageTask -> Maybe ExportTaskS3Location
$sel:progress:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:imageId:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:exportImageTaskId:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:description:ExportImageTask' :: ExportImageTask -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
exportImageTaskId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
imageId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
progress
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ExportTaskS3Location
s3ExportLocation
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
status
      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 ExportImageTask where
  rnf :: ExportImageTask -> ()
rnf ExportImageTask' {Maybe [Tag]
Maybe Text
Maybe ExportTaskS3Location
tags :: Maybe [Tag]
statusMessage :: Maybe Text
status :: Maybe Text
s3ExportLocation :: Maybe ExportTaskS3Location
progress :: Maybe Text
imageId :: Maybe Text
exportImageTaskId :: Maybe Text
description :: Maybe Text
$sel:tags:ExportImageTask' :: ExportImageTask -> Maybe [Tag]
$sel:statusMessage:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:status:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:s3ExportLocation:ExportImageTask' :: ExportImageTask -> Maybe ExportTaskS3Location
$sel:progress:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:imageId:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:exportImageTaskId:ExportImageTask' :: ExportImageTask -> Maybe Text
$sel:description:ExportImageTask' :: ExportImageTask -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
exportImageTaskId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
imageId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
progress
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ExportTaskS3Location
s3ExportLocation
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
status
      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