{-# 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.ImportInstanceVolumeDetailItem
-- 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.ImportInstanceVolumeDetailItem 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.DiskImageDescription
import Amazonka.EC2.Types.DiskImageVolumeDescription
import qualified Amazonka.Prelude as Prelude

-- | Describes an import volume task.
--
-- /See:/ 'newImportInstanceVolumeDetailItem' smart constructor.
data ImportInstanceVolumeDetailItem = ImportInstanceVolumeDetailItem'
  { -- | The Availability Zone where the resulting instance will reside.
    ImportInstanceVolumeDetailItem -> Maybe Text
availabilityZone :: Prelude.Maybe Prelude.Text,
    -- | The number of bytes converted so far.
    ImportInstanceVolumeDetailItem -> Maybe Integer
bytesConverted :: Prelude.Maybe Prelude.Integer,
    -- | A description of the task.
    ImportInstanceVolumeDetailItem -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The image.
    ImportInstanceVolumeDetailItem -> Maybe DiskImageDescription
image :: Prelude.Maybe DiskImageDescription,
    -- | The status of the import of this particular disk image.
    ImportInstanceVolumeDetailItem -> Maybe Text
status :: Prelude.Maybe Prelude.Text,
    -- | The status information or errors related to the disk image.
    ImportInstanceVolumeDetailItem -> Maybe Text
statusMessage :: Prelude.Maybe Prelude.Text,
    -- | The volume.
    ImportInstanceVolumeDetailItem -> Maybe DiskImageVolumeDescription
volume :: Prelude.Maybe DiskImageVolumeDescription
  }
  deriving (ImportInstanceVolumeDetailItem
-> ImportInstanceVolumeDetailItem -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ImportInstanceVolumeDetailItem
-> ImportInstanceVolumeDetailItem -> Bool
$c/= :: ImportInstanceVolumeDetailItem
-> ImportInstanceVolumeDetailItem -> Bool
== :: ImportInstanceVolumeDetailItem
-> ImportInstanceVolumeDetailItem -> Bool
$c== :: ImportInstanceVolumeDetailItem
-> ImportInstanceVolumeDetailItem -> Bool
Prelude.Eq, ReadPrec [ImportInstanceVolumeDetailItem]
ReadPrec ImportInstanceVolumeDetailItem
Int -> ReadS ImportInstanceVolumeDetailItem
ReadS [ImportInstanceVolumeDetailItem]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ImportInstanceVolumeDetailItem]
$creadListPrec :: ReadPrec [ImportInstanceVolumeDetailItem]
readPrec :: ReadPrec ImportInstanceVolumeDetailItem
$creadPrec :: ReadPrec ImportInstanceVolumeDetailItem
readList :: ReadS [ImportInstanceVolumeDetailItem]
$creadList :: ReadS [ImportInstanceVolumeDetailItem]
readsPrec :: Int -> ReadS ImportInstanceVolumeDetailItem
$creadsPrec :: Int -> ReadS ImportInstanceVolumeDetailItem
Prelude.Read, Int -> ImportInstanceVolumeDetailItem -> ShowS
[ImportInstanceVolumeDetailItem] -> ShowS
ImportInstanceVolumeDetailItem -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ImportInstanceVolumeDetailItem] -> ShowS
$cshowList :: [ImportInstanceVolumeDetailItem] -> ShowS
show :: ImportInstanceVolumeDetailItem -> String
$cshow :: ImportInstanceVolumeDetailItem -> String
showsPrec :: Int -> ImportInstanceVolumeDetailItem -> ShowS
$cshowsPrec :: Int -> ImportInstanceVolumeDetailItem -> ShowS
Prelude.Show, forall x.
Rep ImportInstanceVolumeDetailItem x
-> ImportInstanceVolumeDetailItem
forall x.
ImportInstanceVolumeDetailItem
-> Rep ImportInstanceVolumeDetailItem x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ImportInstanceVolumeDetailItem x
-> ImportInstanceVolumeDetailItem
$cfrom :: forall x.
ImportInstanceVolumeDetailItem
-> Rep ImportInstanceVolumeDetailItem x
Prelude.Generic)

-- |
-- Create a value of 'ImportInstanceVolumeDetailItem' 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:
--
-- 'availabilityZone', 'importInstanceVolumeDetailItem_availabilityZone' - The Availability Zone where the resulting instance will reside.
--
-- 'bytesConverted', 'importInstanceVolumeDetailItem_bytesConverted' - The number of bytes converted so far.
--
-- 'description', 'importInstanceVolumeDetailItem_description' - A description of the task.
--
-- 'image', 'importInstanceVolumeDetailItem_image' - The image.
--
-- 'status', 'importInstanceVolumeDetailItem_status' - The status of the import of this particular disk image.
--
-- 'statusMessage', 'importInstanceVolumeDetailItem_statusMessage' - The status information or errors related to the disk image.
--
-- 'volume', 'importInstanceVolumeDetailItem_volume' - The volume.
newImportInstanceVolumeDetailItem ::
  ImportInstanceVolumeDetailItem
newImportInstanceVolumeDetailItem :: ImportInstanceVolumeDetailItem
newImportInstanceVolumeDetailItem =
  ImportInstanceVolumeDetailItem'
    { $sel:availabilityZone:ImportInstanceVolumeDetailItem' :: Maybe Text
availabilityZone =
        forall a. Maybe a
Prelude.Nothing,
      $sel:bytesConverted:ImportInstanceVolumeDetailItem' :: Maybe Integer
bytesConverted = forall a. Maybe a
Prelude.Nothing,
      $sel:description:ImportInstanceVolumeDetailItem' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:image:ImportInstanceVolumeDetailItem' :: Maybe DiskImageDescription
image = forall a. Maybe a
Prelude.Nothing,
      $sel:status:ImportInstanceVolumeDetailItem' :: Maybe Text
status = forall a. Maybe a
Prelude.Nothing,
      $sel:statusMessage:ImportInstanceVolumeDetailItem' :: Maybe Text
statusMessage = forall a. Maybe a
Prelude.Nothing,
      $sel:volume:ImportInstanceVolumeDetailItem' :: Maybe DiskImageVolumeDescription
volume = forall a. Maybe a
Prelude.Nothing
    }

-- | The Availability Zone where the resulting instance will reside.
importInstanceVolumeDetailItem_availabilityZone :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Text)
importInstanceVolumeDetailItem_availabilityZone :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
importInstanceVolumeDetailItem_availabilityZone = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImportInstanceVolumeDetailItem' {Maybe Text
availabilityZone :: Maybe Text
$sel:availabilityZone:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
availabilityZone} -> Maybe Text
availabilityZone) (\s :: ImportInstanceVolumeDetailItem
s@ImportInstanceVolumeDetailItem' {} Maybe Text
a -> ImportInstanceVolumeDetailItem
s {$sel:availabilityZone:ImportInstanceVolumeDetailItem' :: Maybe Text
availabilityZone = Maybe Text
a} :: ImportInstanceVolumeDetailItem)

-- | The number of bytes converted so far.
importInstanceVolumeDetailItem_bytesConverted :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Integer)
importInstanceVolumeDetailItem_bytesConverted :: Lens' ImportInstanceVolumeDetailItem (Maybe Integer)
importInstanceVolumeDetailItem_bytesConverted = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImportInstanceVolumeDetailItem' {Maybe Integer
bytesConverted :: Maybe Integer
$sel:bytesConverted:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Integer
bytesConverted} -> Maybe Integer
bytesConverted) (\s :: ImportInstanceVolumeDetailItem
s@ImportInstanceVolumeDetailItem' {} Maybe Integer
a -> ImportInstanceVolumeDetailItem
s {$sel:bytesConverted:ImportInstanceVolumeDetailItem' :: Maybe Integer
bytesConverted = Maybe Integer
a} :: ImportInstanceVolumeDetailItem)

-- | A description of the task.
importInstanceVolumeDetailItem_description :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Text)
importInstanceVolumeDetailItem_description :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
importInstanceVolumeDetailItem_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImportInstanceVolumeDetailItem' {Maybe Text
description :: Maybe Text
$sel:description:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
description} -> Maybe Text
description) (\s :: ImportInstanceVolumeDetailItem
s@ImportInstanceVolumeDetailItem' {} Maybe Text
a -> ImportInstanceVolumeDetailItem
s {$sel:description:ImportInstanceVolumeDetailItem' :: Maybe Text
description = Maybe Text
a} :: ImportInstanceVolumeDetailItem)

-- | The image.
importInstanceVolumeDetailItem_image :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe DiskImageDescription)
importInstanceVolumeDetailItem_image :: Lens' ImportInstanceVolumeDetailItem (Maybe DiskImageDescription)
importInstanceVolumeDetailItem_image = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImportInstanceVolumeDetailItem' {Maybe DiskImageDescription
image :: Maybe DiskImageDescription
$sel:image:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe DiskImageDescription
image} -> Maybe DiskImageDescription
image) (\s :: ImportInstanceVolumeDetailItem
s@ImportInstanceVolumeDetailItem' {} Maybe DiskImageDescription
a -> ImportInstanceVolumeDetailItem
s {$sel:image:ImportInstanceVolumeDetailItem' :: Maybe DiskImageDescription
image = Maybe DiskImageDescription
a} :: ImportInstanceVolumeDetailItem)

-- | The status of the import of this particular disk image.
importInstanceVolumeDetailItem_status :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Text)
importInstanceVolumeDetailItem_status :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
importInstanceVolumeDetailItem_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImportInstanceVolumeDetailItem' {Maybe Text
status :: Maybe Text
$sel:status:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
status} -> Maybe Text
status) (\s :: ImportInstanceVolumeDetailItem
s@ImportInstanceVolumeDetailItem' {} Maybe Text
a -> ImportInstanceVolumeDetailItem
s {$sel:status:ImportInstanceVolumeDetailItem' :: Maybe Text
status = Maybe Text
a} :: ImportInstanceVolumeDetailItem)

-- | The status information or errors related to the disk image.
importInstanceVolumeDetailItem_statusMessage :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Text)
importInstanceVolumeDetailItem_statusMessage :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
importInstanceVolumeDetailItem_statusMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImportInstanceVolumeDetailItem' {Maybe Text
statusMessage :: Maybe Text
$sel:statusMessage:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
statusMessage} -> Maybe Text
statusMessage) (\s :: ImportInstanceVolumeDetailItem
s@ImportInstanceVolumeDetailItem' {} Maybe Text
a -> ImportInstanceVolumeDetailItem
s {$sel:statusMessage:ImportInstanceVolumeDetailItem' :: Maybe Text
statusMessage = Maybe Text
a} :: ImportInstanceVolumeDetailItem)

-- | The volume.
importInstanceVolumeDetailItem_volume :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe DiskImageVolumeDescription)
importInstanceVolumeDetailItem_volume :: Lens'
  ImportInstanceVolumeDetailItem (Maybe DiskImageVolumeDescription)
importInstanceVolumeDetailItem_volume = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImportInstanceVolumeDetailItem' {Maybe DiskImageVolumeDescription
volume :: Maybe DiskImageVolumeDescription
$sel:volume:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe DiskImageVolumeDescription
volume} -> Maybe DiskImageVolumeDescription
volume) (\s :: ImportInstanceVolumeDetailItem
s@ImportInstanceVolumeDetailItem' {} Maybe DiskImageVolumeDescription
a -> ImportInstanceVolumeDetailItem
s {$sel:volume:ImportInstanceVolumeDetailItem' :: Maybe DiskImageVolumeDescription
volume = Maybe DiskImageVolumeDescription
a} :: ImportInstanceVolumeDetailItem)

instance Data.FromXML ImportInstanceVolumeDetailItem where
  parseXML :: [Node] -> Either String ImportInstanceVolumeDetailItem
parseXML [Node]
x =
    Maybe Text
-> Maybe Integer
-> Maybe Text
-> Maybe DiskImageDescription
-> Maybe Text
-> Maybe Text
-> Maybe DiskImageVolumeDescription
-> ImportInstanceVolumeDetailItem
ImportInstanceVolumeDetailItem'
      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
"availabilityZone")
      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
"bytesConverted")
      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
"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
"image")
      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
"volume")

instance
  Prelude.Hashable
    ImportInstanceVolumeDetailItem
  where
  hashWithSalt :: Int -> ImportInstanceVolumeDetailItem -> Int
hashWithSalt
    Int
_salt
    ImportInstanceVolumeDetailItem' {Maybe Integer
Maybe Text
Maybe DiskImageDescription
Maybe DiskImageVolumeDescription
volume :: Maybe DiskImageVolumeDescription
statusMessage :: Maybe Text
status :: Maybe Text
image :: Maybe DiskImageDescription
description :: Maybe Text
bytesConverted :: Maybe Integer
availabilityZone :: Maybe Text
$sel:volume:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe DiskImageVolumeDescription
$sel:statusMessage:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
$sel:status:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
$sel:image:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe DiskImageDescription
$sel:description:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
$sel:bytesConverted:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Integer
$sel:availabilityZone:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
availabilityZone
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
bytesConverted
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DiskImageDescription
image
        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 DiskImageVolumeDescription
volume

instance
  Prelude.NFData
    ImportInstanceVolumeDetailItem
  where
  rnf :: ImportInstanceVolumeDetailItem -> ()
rnf ImportInstanceVolumeDetailItem' {Maybe Integer
Maybe Text
Maybe DiskImageDescription
Maybe DiskImageVolumeDescription
volume :: Maybe DiskImageVolumeDescription
statusMessage :: Maybe Text
status :: Maybe Text
image :: Maybe DiskImageDescription
description :: Maybe Text
bytesConverted :: Maybe Integer
availabilityZone :: Maybe Text
$sel:volume:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe DiskImageVolumeDescription
$sel:statusMessage:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
$sel:status:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
$sel:image:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe DiskImageDescription
$sel:description:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
$sel:bytesConverted:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Integer
$sel:availabilityZone:ImportInstanceVolumeDetailItem' :: ImportInstanceVolumeDetailItem -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
availabilityZone
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
bytesConverted
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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 DiskImageDescription
image
      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 DiskImageVolumeDescription
volume