{-# 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.Lightsail.Types.Disk
-- 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.Lightsail.Types.Disk where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Lightsail.Types.AddOn
import Amazonka.Lightsail.Types.DiskState
import Amazonka.Lightsail.Types.ResourceLocation
import Amazonka.Lightsail.Types.ResourceType
import Amazonka.Lightsail.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes a block storage disk.
--
-- /See:/ 'newDisk' smart constructor.
data Disk = Disk'
  { -- | An array of objects representing the add-ons enabled on the disk.
    Disk -> Maybe [AddOn]
addOns :: Prelude.Maybe [AddOn],
    -- | The Amazon Resource Name (ARN) of the disk.
    Disk -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The resources to which the disk is attached.
    Disk -> Maybe Text
attachedTo :: Prelude.Maybe Prelude.Text,
    -- | (Deprecated) The attachment state of the disk.
    --
    -- In releases prior to November 14, 2017, this parameter returned
    -- @attached@ for system disks in the API response. It is now deprecated,
    -- but still included in the response. Use @isAttached@ instead.
    Disk -> Maybe Text
attachmentState :: Prelude.Maybe Prelude.Text,
    -- | The date when the disk was created.
    Disk -> Maybe POSIX
createdAt :: Prelude.Maybe Data.POSIX,
    -- | (Deprecated) The number of GB in use by the disk.
    --
    -- In releases prior to November 14, 2017, this parameter was not included
    -- in the API response. It is now deprecated.
    Disk -> Maybe Int
gbInUse :: Prelude.Maybe Prelude.Int,
    -- | The input\/output operations per second (IOPS) of the disk.
    Disk -> Maybe Int
iops :: Prelude.Maybe Prelude.Int,
    -- | A Boolean value indicating whether the disk is attached.
    Disk -> Maybe Bool
isAttached :: Prelude.Maybe Prelude.Bool,
    -- | A Boolean value indicating whether this disk is a system disk (has an
    -- operating system loaded on it).
    Disk -> Maybe Bool
isSystemDisk :: Prelude.Maybe Prelude.Bool,
    -- | The AWS Region and Availability Zone where the disk is located.
    Disk -> Maybe ResourceLocation
location :: Prelude.Maybe ResourceLocation,
    -- | The unique name of the disk.
    Disk -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The disk path.
    Disk -> Maybe Text
path :: Prelude.Maybe Prelude.Text,
    -- | The Lightsail resource type (e.g., @Disk@).
    Disk -> Maybe ResourceType
resourceType :: Prelude.Maybe ResourceType,
    -- | The size of the disk in GB.
    Disk -> Maybe Int
sizeInGb :: Prelude.Maybe Prelude.Int,
    -- | Describes the status of the disk.
    Disk -> Maybe DiskState
state :: Prelude.Maybe DiskState,
    -- | The support code. Include this code in your email to support when you
    -- have questions about an instance or another resource in Lightsail. This
    -- code enables our support team to look up your Lightsail information more
    -- easily.
    Disk -> Maybe Text
supportCode :: Prelude.Maybe Prelude.Text,
    -- | The tag keys and optional values for the resource. For more information
    -- about tags in Lightsail, see the
    -- <https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags Amazon Lightsail Developer Guide>.
    Disk -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (Disk -> Disk -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Disk -> Disk -> Bool
$c/= :: Disk -> Disk -> Bool
== :: Disk -> Disk -> Bool
$c== :: Disk -> Disk -> Bool
Prelude.Eq, ReadPrec [Disk]
ReadPrec Disk
Int -> ReadS Disk
ReadS [Disk]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Disk]
$creadListPrec :: ReadPrec [Disk]
readPrec :: ReadPrec Disk
$creadPrec :: ReadPrec Disk
readList :: ReadS [Disk]
$creadList :: ReadS [Disk]
readsPrec :: Int -> ReadS Disk
$creadsPrec :: Int -> ReadS Disk
Prelude.Read, Int -> Disk -> ShowS
[Disk] -> ShowS
Disk -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Disk] -> ShowS
$cshowList :: [Disk] -> ShowS
show :: Disk -> String
$cshow :: Disk -> String
showsPrec :: Int -> Disk -> ShowS
$cshowsPrec :: Int -> Disk -> ShowS
Prelude.Show, forall x. Rep Disk x -> Disk
forall x. Disk -> Rep Disk x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Disk x -> Disk
$cfrom :: forall x. Disk -> Rep Disk x
Prelude.Generic)

-- |
-- Create a value of 'Disk' 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:
--
-- 'addOns', 'disk_addOns' - An array of objects representing the add-ons enabled on the disk.
--
-- 'arn', 'disk_arn' - The Amazon Resource Name (ARN) of the disk.
--
-- 'attachedTo', 'disk_attachedTo' - The resources to which the disk is attached.
--
-- 'attachmentState', 'disk_attachmentState' - (Deprecated) The attachment state of the disk.
--
-- In releases prior to November 14, 2017, this parameter returned
-- @attached@ for system disks in the API response. It is now deprecated,
-- but still included in the response. Use @isAttached@ instead.
--
-- 'createdAt', 'disk_createdAt' - The date when the disk was created.
--
-- 'gbInUse', 'disk_gbInUse' - (Deprecated) The number of GB in use by the disk.
--
-- In releases prior to November 14, 2017, this parameter was not included
-- in the API response. It is now deprecated.
--
-- 'iops', 'disk_iops' - The input\/output operations per second (IOPS) of the disk.
--
-- 'isAttached', 'disk_isAttached' - A Boolean value indicating whether the disk is attached.
--
-- 'isSystemDisk', 'disk_isSystemDisk' - A Boolean value indicating whether this disk is a system disk (has an
-- operating system loaded on it).
--
-- 'location', 'disk_location' - The AWS Region and Availability Zone where the disk is located.
--
-- 'name', 'disk_name' - The unique name of the disk.
--
-- 'path', 'disk_path' - The disk path.
--
-- 'resourceType', 'disk_resourceType' - The Lightsail resource type (e.g., @Disk@).
--
-- 'sizeInGb', 'disk_sizeInGb' - The size of the disk in GB.
--
-- 'state', 'disk_state' - Describes the status of the disk.
--
-- 'supportCode', 'disk_supportCode' - The support code. Include this code in your email to support when you
-- have questions about an instance or another resource in Lightsail. This
-- code enables our support team to look up your Lightsail information more
-- easily.
--
-- 'tags', 'disk_tags' - The tag keys and optional values for the resource. For more information
-- about tags in Lightsail, see the
-- <https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags Amazon Lightsail Developer Guide>.
newDisk ::
  Disk
newDisk :: Disk
newDisk =
  Disk'
    { $sel:addOns:Disk' :: Maybe [AddOn]
addOns = forall a. Maybe a
Prelude.Nothing,
      $sel:arn:Disk' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:attachedTo:Disk' :: Maybe Text
attachedTo = forall a. Maybe a
Prelude.Nothing,
      $sel:attachmentState:Disk' :: Maybe Text
attachmentState = forall a. Maybe a
Prelude.Nothing,
      $sel:createdAt:Disk' :: Maybe POSIX
createdAt = forall a. Maybe a
Prelude.Nothing,
      $sel:gbInUse:Disk' :: Maybe Int
gbInUse = forall a. Maybe a
Prelude.Nothing,
      $sel:iops:Disk' :: Maybe Int
iops = forall a. Maybe a
Prelude.Nothing,
      $sel:isAttached:Disk' :: Maybe Bool
isAttached = forall a. Maybe a
Prelude.Nothing,
      $sel:isSystemDisk:Disk' :: Maybe Bool
isSystemDisk = forall a. Maybe a
Prelude.Nothing,
      $sel:location:Disk' :: Maybe ResourceLocation
location = forall a. Maybe a
Prelude.Nothing,
      $sel:name:Disk' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:path:Disk' :: Maybe Text
path = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceType:Disk' :: Maybe ResourceType
resourceType = forall a. Maybe a
Prelude.Nothing,
      $sel:sizeInGb:Disk' :: Maybe Int
sizeInGb = forall a. Maybe a
Prelude.Nothing,
      $sel:state:Disk' :: Maybe DiskState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:supportCode:Disk' :: Maybe Text
supportCode = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:Disk' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | An array of objects representing the add-ons enabled on the disk.
disk_addOns :: Lens.Lens' Disk (Prelude.Maybe [AddOn])
disk_addOns :: Lens' Disk (Maybe [AddOn])
disk_addOns = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe [AddOn]
addOns :: Maybe [AddOn]
$sel:addOns:Disk' :: Disk -> Maybe [AddOn]
addOns} -> Maybe [AddOn]
addOns) (\s :: Disk
s@Disk' {} Maybe [AddOn]
a -> Disk
s {$sel:addOns:Disk' :: Maybe [AddOn]
addOns = Maybe [AddOn]
a} :: Disk) 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

-- | The Amazon Resource Name (ARN) of the disk.
disk_arn :: Lens.Lens' Disk (Prelude.Maybe Prelude.Text)
disk_arn :: Lens' Disk (Maybe Text)
disk_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Text
arn :: Maybe Text
$sel:arn:Disk' :: Disk -> Maybe Text
arn} -> Maybe Text
arn) (\s :: Disk
s@Disk' {} Maybe Text
a -> Disk
s {$sel:arn:Disk' :: Maybe Text
arn = Maybe Text
a} :: Disk)

-- | The resources to which the disk is attached.
disk_attachedTo :: Lens.Lens' Disk (Prelude.Maybe Prelude.Text)
disk_attachedTo :: Lens' Disk (Maybe Text)
disk_attachedTo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Text
attachedTo :: Maybe Text
$sel:attachedTo:Disk' :: Disk -> Maybe Text
attachedTo} -> Maybe Text
attachedTo) (\s :: Disk
s@Disk' {} Maybe Text
a -> Disk
s {$sel:attachedTo:Disk' :: Maybe Text
attachedTo = Maybe Text
a} :: Disk)

-- | (Deprecated) The attachment state of the disk.
--
-- In releases prior to November 14, 2017, this parameter returned
-- @attached@ for system disks in the API response. It is now deprecated,
-- but still included in the response. Use @isAttached@ instead.
disk_attachmentState :: Lens.Lens' Disk (Prelude.Maybe Prelude.Text)
disk_attachmentState :: Lens' Disk (Maybe Text)
disk_attachmentState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Text
attachmentState :: Maybe Text
$sel:attachmentState:Disk' :: Disk -> Maybe Text
attachmentState} -> Maybe Text
attachmentState) (\s :: Disk
s@Disk' {} Maybe Text
a -> Disk
s {$sel:attachmentState:Disk' :: Maybe Text
attachmentState = Maybe Text
a} :: Disk)

-- | The date when the disk was created.
disk_createdAt :: Lens.Lens' Disk (Prelude.Maybe Prelude.UTCTime)
disk_createdAt :: Lens' Disk (Maybe UTCTime)
disk_createdAt = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe POSIX
createdAt :: Maybe POSIX
$sel:createdAt:Disk' :: Disk -> Maybe POSIX
createdAt} -> Maybe POSIX
createdAt) (\s :: Disk
s@Disk' {} Maybe POSIX
a -> Disk
s {$sel:createdAt:Disk' :: Maybe POSIX
createdAt = Maybe POSIX
a} :: Disk) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | (Deprecated) The number of GB in use by the disk.
--
-- In releases prior to November 14, 2017, this parameter was not included
-- in the API response. It is now deprecated.
disk_gbInUse :: Lens.Lens' Disk (Prelude.Maybe Prelude.Int)
disk_gbInUse :: Lens' Disk (Maybe Int)
disk_gbInUse = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Int
gbInUse :: Maybe Int
$sel:gbInUse:Disk' :: Disk -> Maybe Int
gbInUse} -> Maybe Int
gbInUse) (\s :: Disk
s@Disk' {} Maybe Int
a -> Disk
s {$sel:gbInUse:Disk' :: Maybe Int
gbInUse = Maybe Int
a} :: Disk)

-- | The input\/output operations per second (IOPS) of the disk.
disk_iops :: Lens.Lens' Disk (Prelude.Maybe Prelude.Int)
disk_iops :: Lens' Disk (Maybe Int)
disk_iops = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Int
iops :: Maybe Int
$sel:iops:Disk' :: Disk -> Maybe Int
iops} -> Maybe Int
iops) (\s :: Disk
s@Disk' {} Maybe Int
a -> Disk
s {$sel:iops:Disk' :: Maybe Int
iops = Maybe Int
a} :: Disk)

-- | A Boolean value indicating whether the disk is attached.
disk_isAttached :: Lens.Lens' Disk (Prelude.Maybe Prelude.Bool)
disk_isAttached :: Lens' Disk (Maybe Bool)
disk_isAttached = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Bool
isAttached :: Maybe Bool
$sel:isAttached:Disk' :: Disk -> Maybe Bool
isAttached} -> Maybe Bool
isAttached) (\s :: Disk
s@Disk' {} Maybe Bool
a -> Disk
s {$sel:isAttached:Disk' :: Maybe Bool
isAttached = Maybe Bool
a} :: Disk)

-- | A Boolean value indicating whether this disk is a system disk (has an
-- operating system loaded on it).
disk_isSystemDisk :: Lens.Lens' Disk (Prelude.Maybe Prelude.Bool)
disk_isSystemDisk :: Lens' Disk (Maybe Bool)
disk_isSystemDisk = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Bool
isSystemDisk :: Maybe Bool
$sel:isSystemDisk:Disk' :: Disk -> Maybe Bool
isSystemDisk} -> Maybe Bool
isSystemDisk) (\s :: Disk
s@Disk' {} Maybe Bool
a -> Disk
s {$sel:isSystemDisk:Disk' :: Maybe Bool
isSystemDisk = Maybe Bool
a} :: Disk)

-- | The AWS Region and Availability Zone where the disk is located.
disk_location :: Lens.Lens' Disk (Prelude.Maybe ResourceLocation)
disk_location :: Lens' Disk (Maybe ResourceLocation)
disk_location = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe ResourceLocation
location :: Maybe ResourceLocation
$sel:location:Disk' :: Disk -> Maybe ResourceLocation
location} -> Maybe ResourceLocation
location) (\s :: Disk
s@Disk' {} Maybe ResourceLocation
a -> Disk
s {$sel:location:Disk' :: Maybe ResourceLocation
location = Maybe ResourceLocation
a} :: Disk)

-- | The unique name of the disk.
disk_name :: Lens.Lens' Disk (Prelude.Maybe Prelude.Text)
disk_name :: Lens' Disk (Maybe Text)
disk_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Text
name :: Maybe Text
$sel:name:Disk' :: Disk -> Maybe Text
name} -> Maybe Text
name) (\s :: Disk
s@Disk' {} Maybe Text
a -> Disk
s {$sel:name:Disk' :: Maybe Text
name = Maybe Text
a} :: Disk)

-- | The disk path.
disk_path :: Lens.Lens' Disk (Prelude.Maybe Prelude.Text)
disk_path :: Lens' Disk (Maybe Text)
disk_path = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Text
path :: Maybe Text
$sel:path:Disk' :: Disk -> Maybe Text
path} -> Maybe Text
path) (\s :: Disk
s@Disk' {} Maybe Text
a -> Disk
s {$sel:path:Disk' :: Maybe Text
path = Maybe Text
a} :: Disk)

-- | The Lightsail resource type (e.g., @Disk@).
disk_resourceType :: Lens.Lens' Disk (Prelude.Maybe ResourceType)
disk_resourceType :: Lens' Disk (Maybe ResourceType)
disk_resourceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe ResourceType
resourceType :: Maybe ResourceType
$sel:resourceType:Disk' :: Disk -> Maybe ResourceType
resourceType} -> Maybe ResourceType
resourceType) (\s :: Disk
s@Disk' {} Maybe ResourceType
a -> Disk
s {$sel:resourceType:Disk' :: Maybe ResourceType
resourceType = Maybe ResourceType
a} :: Disk)

-- | The size of the disk in GB.
disk_sizeInGb :: Lens.Lens' Disk (Prelude.Maybe Prelude.Int)
disk_sizeInGb :: Lens' Disk (Maybe Int)
disk_sizeInGb = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Int
sizeInGb :: Maybe Int
$sel:sizeInGb:Disk' :: Disk -> Maybe Int
sizeInGb} -> Maybe Int
sizeInGb) (\s :: Disk
s@Disk' {} Maybe Int
a -> Disk
s {$sel:sizeInGb:Disk' :: Maybe Int
sizeInGb = Maybe Int
a} :: Disk)

-- | Describes the status of the disk.
disk_state :: Lens.Lens' Disk (Prelude.Maybe DiskState)
disk_state :: Lens' Disk (Maybe DiskState)
disk_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe DiskState
state :: Maybe DiskState
$sel:state:Disk' :: Disk -> Maybe DiskState
state} -> Maybe DiskState
state) (\s :: Disk
s@Disk' {} Maybe DiskState
a -> Disk
s {$sel:state:Disk' :: Maybe DiskState
state = Maybe DiskState
a} :: Disk)

-- | The support code. Include this code in your email to support when you
-- have questions about an instance or another resource in Lightsail. This
-- code enables our support team to look up your Lightsail information more
-- easily.
disk_supportCode :: Lens.Lens' Disk (Prelude.Maybe Prelude.Text)
disk_supportCode :: Lens' Disk (Maybe Text)
disk_supportCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe Text
supportCode :: Maybe Text
$sel:supportCode:Disk' :: Disk -> Maybe Text
supportCode} -> Maybe Text
supportCode) (\s :: Disk
s@Disk' {} Maybe Text
a -> Disk
s {$sel:supportCode:Disk' :: Maybe Text
supportCode = Maybe Text
a} :: Disk)

-- | The tag keys and optional values for the resource. For more information
-- about tags in Lightsail, see the
-- <https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags Amazon Lightsail Developer Guide>.
disk_tags :: Lens.Lens' Disk (Prelude.Maybe [Tag])
disk_tags :: Lens' Disk (Maybe [Tag])
disk_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Disk' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:Disk' :: Disk -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: Disk
s@Disk' {} Maybe [Tag]
a -> Disk
s {$sel:tags:Disk' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: Disk) 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.FromJSON Disk where
  parseJSON :: Value -> Parser Disk
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Disk"
      ( \Object
x ->
          Maybe [AddOn]
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe POSIX
-> Maybe Int
-> Maybe Int
-> Maybe Bool
-> Maybe Bool
-> Maybe ResourceLocation
-> Maybe Text
-> Maybe Text
-> Maybe ResourceType
-> Maybe Int
-> Maybe DiskState
-> Maybe Text
-> Maybe [Tag]
-> Disk
Disk'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"addOns" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"arn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"attachedTo")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"attachmentState")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"createdAt")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"gbInUse")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"iops")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"isAttached")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"isSystemDisk")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"location")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"name")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"path")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"resourceType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"sizeInGb")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"state")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"supportCode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"tags" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
      )

instance Prelude.Hashable Disk where
  hashWithSalt :: Int -> Disk -> Int
hashWithSalt Int
_salt Disk' {Maybe Bool
Maybe Int
Maybe [AddOn]
Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe DiskState
Maybe ResourceLocation
Maybe ResourceType
tags :: Maybe [Tag]
supportCode :: Maybe Text
state :: Maybe DiskState
sizeInGb :: Maybe Int
resourceType :: Maybe ResourceType
path :: Maybe Text
name :: Maybe Text
location :: Maybe ResourceLocation
isSystemDisk :: Maybe Bool
isAttached :: Maybe Bool
iops :: Maybe Int
gbInUse :: Maybe Int
createdAt :: Maybe POSIX
attachmentState :: Maybe Text
attachedTo :: Maybe Text
arn :: Maybe Text
addOns :: Maybe [AddOn]
$sel:tags:Disk' :: Disk -> Maybe [Tag]
$sel:supportCode:Disk' :: Disk -> Maybe Text
$sel:state:Disk' :: Disk -> Maybe DiskState
$sel:sizeInGb:Disk' :: Disk -> Maybe Int
$sel:resourceType:Disk' :: Disk -> Maybe ResourceType
$sel:path:Disk' :: Disk -> Maybe Text
$sel:name:Disk' :: Disk -> Maybe Text
$sel:location:Disk' :: Disk -> Maybe ResourceLocation
$sel:isSystemDisk:Disk' :: Disk -> Maybe Bool
$sel:isAttached:Disk' :: Disk -> Maybe Bool
$sel:iops:Disk' :: Disk -> Maybe Int
$sel:gbInUse:Disk' :: Disk -> Maybe Int
$sel:createdAt:Disk' :: Disk -> Maybe POSIX
$sel:attachmentState:Disk' :: Disk -> Maybe Text
$sel:attachedTo:Disk' :: Disk -> Maybe Text
$sel:arn:Disk' :: Disk -> Maybe Text
$sel:addOns:Disk' :: Disk -> Maybe [AddOn]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AddOn]
addOns
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
arn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
attachedTo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
attachmentState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
createdAt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
gbInUse
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
iops
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
isAttached
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
isSystemDisk
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceLocation
location
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
path
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceType
resourceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
sizeInGb
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DiskState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
supportCode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData Disk where
  rnf :: Disk -> ()
rnf Disk' {Maybe Bool
Maybe Int
Maybe [AddOn]
Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe DiskState
Maybe ResourceLocation
Maybe ResourceType
tags :: Maybe [Tag]
supportCode :: Maybe Text
state :: Maybe DiskState
sizeInGb :: Maybe Int
resourceType :: Maybe ResourceType
path :: Maybe Text
name :: Maybe Text
location :: Maybe ResourceLocation
isSystemDisk :: Maybe Bool
isAttached :: Maybe Bool
iops :: Maybe Int
gbInUse :: Maybe Int
createdAt :: Maybe POSIX
attachmentState :: Maybe Text
attachedTo :: Maybe Text
arn :: Maybe Text
addOns :: Maybe [AddOn]
$sel:tags:Disk' :: Disk -> Maybe [Tag]
$sel:supportCode:Disk' :: Disk -> Maybe Text
$sel:state:Disk' :: Disk -> Maybe DiskState
$sel:sizeInGb:Disk' :: Disk -> Maybe Int
$sel:resourceType:Disk' :: Disk -> Maybe ResourceType
$sel:path:Disk' :: Disk -> Maybe Text
$sel:name:Disk' :: Disk -> Maybe Text
$sel:location:Disk' :: Disk -> Maybe ResourceLocation
$sel:isSystemDisk:Disk' :: Disk -> Maybe Bool
$sel:isAttached:Disk' :: Disk -> Maybe Bool
$sel:iops:Disk' :: Disk -> Maybe Int
$sel:gbInUse:Disk' :: Disk -> Maybe Int
$sel:createdAt:Disk' :: Disk -> Maybe POSIX
$sel:attachmentState:Disk' :: Disk -> Maybe Text
$sel:attachedTo:Disk' :: Disk -> Maybe Text
$sel:arn:Disk' :: Disk -> Maybe Text
$sel:addOns:Disk' :: Disk -> Maybe [AddOn]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AddOn]
addOns
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
attachedTo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
attachmentState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
createdAt
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
gbInUse
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
iops
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
isAttached
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
isSystemDisk
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceLocation
location
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
path
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceType
resourceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
sizeInGb
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DiskState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
supportCode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags