{-# 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.EFS.Types.FileSystemDescription
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.EFS.Types.FileSystemDescription where

import qualified Amazonka.Core as Core
import Amazonka.EFS.Types.FileSystemSize
import Amazonka.EFS.Types.LifeCycleState
import Amazonka.EFS.Types.PerformanceMode
import Amazonka.EFS.Types.Tag
import Amazonka.EFS.Types.ThroughputMode
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude

-- | A description of the file system.
--
-- /See:/ 'newFileSystemDescription' smart constructor.
data FileSystemDescription = FileSystemDescription'
  { -- | The unique and consistent identifier of the Availability Zone in which
    -- the file system\'s One Zone storage classes exist. For example,
    -- @use1-az1@ is an Availability Zone ID for the us-east-1 Amazon Web
    -- Services Region, and it has the same location in every Amazon Web
    -- Services account.
    FileSystemDescription -> Maybe Text
availabilityZoneId :: Prelude.Maybe Prelude.Text,
    -- | The amount of provisioned throughput, measured in MiB\/s, for the file
    -- system. Valid for file systems using @ThroughputMode@ set to
    -- @provisioned@.
    FileSystemDescription -> Maybe Double
provisionedThroughputInMibps :: Prelude.Maybe Prelude.Double,
    -- | Describes the Amazon Web Services Availability Zone in which the file
    -- system is located, and is valid only for file systems using One Zone
    -- storage classes. For more information, see
    -- <https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html Using EFS storage classes>
    -- in the /Amazon EFS User Guide/.
    FileSystemDescription -> Maybe Text
availabilityZoneName :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) for the EFS file system, in the format
    -- @arn:aws:elasticfilesystem:region:account-id:file-system\/file-system-id @.
    -- Example with sample data:
    -- @arn:aws:elasticfilesystem:us-west-2:1111333322228888:file-system\/fs-01234567@
    FileSystemDescription -> Maybe Text
fileSystemArn :: Prelude.Maybe Prelude.Text,
    -- | A Boolean value that, if true, indicates that the file system is
    -- encrypted.
    FileSystemDescription -> Maybe Bool
encrypted :: Prelude.Maybe Prelude.Bool,
    -- | Displays the file system\'s throughput mode. For more information, see
    -- <https://docs.aws.amazon.com/efs/latest/ug/performance.html#throughput-modes Throughput modes>
    -- in the /Amazon EFS User Guide/.
    FileSystemDescription -> Maybe ThroughputMode
throughputMode :: Prelude.Maybe ThroughputMode,
    -- | The ID of an Key Management Service customer master key (CMK) that was
    -- used to protect the encrypted file system.
    FileSystemDescription -> Maybe Text
kmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | You can add tags to a file system, including a @Name@ tag. For more
    -- information, see CreateFileSystem. If the file system has a @Name@ tag,
    -- Amazon EFS returns the value in this field.
    FileSystemDescription -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Web Services account that created the file system. If the
    -- file system was created by an IAM user, the parent account to which the
    -- user belongs is the owner.
    FileSystemDescription -> Text
ownerId :: Prelude.Text,
    -- | The opaque string specified in the request.
    FileSystemDescription -> Text
creationToken :: Prelude.Text,
    -- | The ID of the file system, assigned by Amazon EFS.
    FileSystemDescription -> Text
fileSystemId :: Prelude.Text,
    -- | The time that the file system was created, in seconds (since
    -- 1970-01-01T00:00:00Z).
    FileSystemDescription -> POSIX
creationTime :: Core.POSIX,
    -- | The lifecycle phase of the file system.
    FileSystemDescription -> LifeCycleState
lifeCycleState :: LifeCycleState,
    -- | The current number of mount targets that the file system has. For more
    -- information, see CreateMountTarget.
    FileSystemDescription -> Natural
numberOfMountTargets :: Prelude.Natural,
    -- | The latest known metered size (in bytes) of data stored in the file
    -- system, in its @Value@ field, and the time at which that size was
    -- determined in its @Timestamp@ field. The @Timestamp@ value is the
    -- integer number of seconds since 1970-01-01T00:00:00Z. The @SizeInBytes@
    -- value doesn\'t represent the size of a consistent snapshot of the file
    -- system, but it is eventually consistent when there are no writes to the
    -- file system. That is, @SizeInBytes@ represents actual size only if the
    -- file system is not modified for a period longer than a couple of hours.
    -- Otherwise, the value is not the exact size that the file system was at
    -- any point in time.
    FileSystemDescription -> FileSystemSize
sizeInBytes :: FileSystemSize,
    -- | The performance mode of the file system.
    FileSystemDescription -> PerformanceMode
performanceMode :: PerformanceMode,
    -- | The tags associated with the file system, presented as an array of @Tag@
    -- objects.
    FileSystemDescription -> [Tag]
tags :: [Tag]
  }
  deriving (FileSystemDescription -> FileSystemDescription -> Bool
(FileSystemDescription -> FileSystemDescription -> Bool)
-> (FileSystemDescription -> FileSystemDescription -> Bool)
-> Eq FileSystemDescription
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FileSystemDescription -> FileSystemDescription -> Bool
$c/= :: FileSystemDescription -> FileSystemDescription -> Bool
== :: FileSystemDescription -> FileSystemDescription -> Bool
$c== :: FileSystemDescription -> FileSystemDescription -> Bool
Prelude.Eq, ReadPrec [FileSystemDescription]
ReadPrec FileSystemDescription
Int -> ReadS FileSystemDescription
ReadS [FileSystemDescription]
(Int -> ReadS FileSystemDescription)
-> ReadS [FileSystemDescription]
-> ReadPrec FileSystemDescription
-> ReadPrec [FileSystemDescription]
-> Read FileSystemDescription
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [FileSystemDescription]
$creadListPrec :: ReadPrec [FileSystemDescription]
readPrec :: ReadPrec FileSystemDescription
$creadPrec :: ReadPrec FileSystemDescription
readList :: ReadS [FileSystemDescription]
$creadList :: ReadS [FileSystemDescription]
readsPrec :: Int -> ReadS FileSystemDescription
$creadsPrec :: Int -> ReadS FileSystemDescription
Prelude.Read, Int -> FileSystemDescription -> ShowS
[FileSystemDescription] -> ShowS
FileSystemDescription -> String
(Int -> FileSystemDescription -> ShowS)
-> (FileSystemDescription -> String)
-> ([FileSystemDescription] -> ShowS)
-> Show FileSystemDescription
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FileSystemDescription] -> ShowS
$cshowList :: [FileSystemDescription] -> ShowS
show :: FileSystemDescription -> String
$cshow :: FileSystemDescription -> String
showsPrec :: Int -> FileSystemDescription -> ShowS
$cshowsPrec :: Int -> FileSystemDescription -> ShowS
Prelude.Show, (forall x. FileSystemDescription -> Rep FileSystemDescription x)
-> (forall x. Rep FileSystemDescription x -> FileSystemDescription)
-> Generic FileSystemDescription
forall x. Rep FileSystemDescription x -> FileSystemDescription
forall x. FileSystemDescription -> Rep FileSystemDescription x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep FileSystemDescription x -> FileSystemDescription
$cfrom :: forall x. FileSystemDescription -> Rep FileSystemDescription x
Prelude.Generic)

-- |
-- Create a value of 'FileSystemDescription' 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:
--
-- 'availabilityZoneId', 'fileSystemDescription_availabilityZoneId' - The unique and consistent identifier of the Availability Zone in which
-- the file system\'s One Zone storage classes exist. For example,
-- @use1-az1@ is an Availability Zone ID for the us-east-1 Amazon Web
-- Services Region, and it has the same location in every Amazon Web
-- Services account.
--
-- 'provisionedThroughputInMibps', 'fileSystemDescription_provisionedThroughputInMibps' - The amount of provisioned throughput, measured in MiB\/s, for the file
-- system. Valid for file systems using @ThroughputMode@ set to
-- @provisioned@.
--
-- 'availabilityZoneName', 'fileSystemDescription_availabilityZoneName' - Describes the Amazon Web Services Availability Zone in which the file
-- system is located, and is valid only for file systems using One Zone
-- storage classes. For more information, see
-- <https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html Using EFS storage classes>
-- in the /Amazon EFS User Guide/.
--
-- 'fileSystemArn', 'fileSystemDescription_fileSystemArn' - The Amazon Resource Name (ARN) for the EFS file system, in the format
-- @arn:aws:elasticfilesystem:region:account-id:file-system\/file-system-id @.
-- Example with sample data:
-- @arn:aws:elasticfilesystem:us-west-2:1111333322228888:file-system\/fs-01234567@
--
-- 'encrypted', 'fileSystemDescription_encrypted' - A Boolean value that, if true, indicates that the file system is
-- encrypted.
--
-- 'throughputMode', 'fileSystemDescription_throughputMode' - Displays the file system\'s throughput mode. For more information, see
-- <https://docs.aws.amazon.com/efs/latest/ug/performance.html#throughput-modes Throughput modes>
-- in the /Amazon EFS User Guide/.
--
-- 'kmsKeyId', 'fileSystemDescription_kmsKeyId' - The ID of an Key Management Service customer master key (CMK) that was
-- used to protect the encrypted file system.
--
-- 'name', 'fileSystemDescription_name' - You can add tags to a file system, including a @Name@ tag. For more
-- information, see CreateFileSystem. If the file system has a @Name@ tag,
-- Amazon EFS returns the value in this field.
--
-- 'ownerId', 'fileSystemDescription_ownerId' - The Amazon Web Services account that created the file system. If the
-- file system was created by an IAM user, the parent account to which the
-- user belongs is the owner.
--
-- 'creationToken', 'fileSystemDescription_creationToken' - The opaque string specified in the request.
--
-- 'fileSystemId', 'fileSystemDescription_fileSystemId' - The ID of the file system, assigned by Amazon EFS.
--
-- 'creationTime', 'fileSystemDescription_creationTime' - The time that the file system was created, in seconds (since
-- 1970-01-01T00:00:00Z).
--
-- 'lifeCycleState', 'fileSystemDescription_lifeCycleState' - The lifecycle phase of the file system.
--
-- 'numberOfMountTargets', 'fileSystemDescription_numberOfMountTargets' - The current number of mount targets that the file system has. For more
-- information, see CreateMountTarget.
--
-- 'sizeInBytes', 'fileSystemDescription_sizeInBytes' - The latest known metered size (in bytes) of data stored in the file
-- system, in its @Value@ field, and the time at which that size was
-- determined in its @Timestamp@ field. The @Timestamp@ value is the
-- integer number of seconds since 1970-01-01T00:00:00Z. The @SizeInBytes@
-- value doesn\'t represent the size of a consistent snapshot of the file
-- system, but it is eventually consistent when there are no writes to the
-- file system. That is, @SizeInBytes@ represents actual size only if the
-- file system is not modified for a period longer than a couple of hours.
-- Otherwise, the value is not the exact size that the file system was at
-- any point in time.
--
-- 'performanceMode', 'fileSystemDescription_performanceMode' - The performance mode of the file system.
--
-- 'tags', 'fileSystemDescription_tags' - The tags associated with the file system, presented as an array of @Tag@
-- objects.
newFileSystemDescription ::
  -- | 'ownerId'
  Prelude.Text ->
  -- | 'creationToken'
  Prelude.Text ->
  -- | 'fileSystemId'
  Prelude.Text ->
  -- | 'creationTime'
  Prelude.UTCTime ->
  -- | 'lifeCycleState'
  LifeCycleState ->
  -- | 'numberOfMountTargets'
  Prelude.Natural ->
  -- | 'sizeInBytes'
  FileSystemSize ->
  -- | 'performanceMode'
  PerformanceMode ->
  FileSystemDescription
newFileSystemDescription :: Text
-> Text
-> Text
-> UTCTime
-> LifeCycleState
-> Natural
-> FileSystemSize
-> PerformanceMode
-> FileSystemDescription
newFileSystemDescription
  Text
pOwnerId_
  Text
pCreationToken_
  Text
pFileSystemId_
  UTCTime
pCreationTime_
  LifeCycleState
pLifeCycleState_
  Natural
pNumberOfMountTargets_
  FileSystemSize
pSizeInBytes_
  PerformanceMode
pPerformanceMode_ =
    FileSystemDescription' :: Maybe Text
-> Maybe Double
-> Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe ThroughputMode
-> Maybe Text
-> Maybe Text
-> Text
-> Text
-> Text
-> POSIX
-> LifeCycleState
-> Natural
-> FileSystemSize
-> PerformanceMode
-> [Tag]
-> FileSystemDescription
FileSystemDescription'
      { $sel:availabilityZoneId:FileSystemDescription' :: Maybe Text
availabilityZoneId =
          Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:provisionedThroughputInMibps:FileSystemDescription' :: Maybe Double
provisionedThroughputInMibps = Maybe Double
forall a. Maybe a
Prelude.Nothing,
        $sel:availabilityZoneName:FileSystemDescription' :: Maybe Text
availabilityZoneName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:fileSystemArn:FileSystemDescription' :: Maybe Text
fileSystemArn = Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:encrypted:FileSystemDescription' :: Maybe Bool
encrypted = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
        $sel:throughputMode:FileSystemDescription' :: Maybe ThroughputMode
throughputMode = Maybe ThroughputMode
forall a. Maybe a
Prelude.Nothing,
        $sel:kmsKeyId:FileSystemDescription' :: Maybe Text
kmsKeyId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:name:FileSystemDescription' :: Maybe Text
name = Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:ownerId:FileSystemDescription' :: Text
ownerId = Text
pOwnerId_,
        $sel:creationToken:FileSystemDescription' :: Text
creationToken = Text
pCreationToken_,
        $sel:fileSystemId:FileSystemDescription' :: Text
fileSystemId = Text
pFileSystemId_,
        $sel:creationTime:FileSystemDescription' :: POSIX
creationTime = Tagged UTCTime (Identity UTCTime) -> Tagged POSIX (Identity POSIX)
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time (Tagged UTCTime (Identity UTCTime)
 -> Tagged POSIX (Identity POSIX))
-> UTCTime -> POSIX
forall t b. AReview t b -> b -> t
Lens.# UTCTime
pCreationTime_,
        $sel:lifeCycleState:FileSystemDescription' :: LifeCycleState
lifeCycleState = LifeCycleState
pLifeCycleState_,
        $sel:numberOfMountTargets:FileSystemDescription' :: Natural
numberOfMountTargets = Natural
pNumberOfMountTargets_,
        $sel:sizeInBytes:FileSystemDescription' :: FileSystemSize
sizeInBytes = FileSystemSize
pSizeInBytes_,
        $sel:performanceMode:FileSystemDescription' :: PerformanceMode
performanceMode = PerformanceMode
pPerformanceMode_,
        $sel:tags:FileSystemDescription' :: [Tag]
tags = [Tag]
forall a. Monoid a => a
Prelude.mempty
      }

-- | The unique and consistent identifier of the Availability Zone in which
-- the file system\'s One Zone storage classes exist. For example,
-- @use1-az1@ is an Availability Zone ID for the us-east-1 Amazon Web
-- Services Region, and it has the same location in every Amazon Web
-- Services account.
fileSystemDescription_availabilityZoneId :: Lens.Lens' FileSystemDescription (Prelude.Maybe Prelude.Text)
fileSystemDescription_availabilityZoneId :: (Maybe Text -> f (Maybe Text))
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_availabilityZoneId = (FileSystemDescription -> Maybe Text)
-> (FileSystemDescription -> Maybe Text -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Maybe Text
availabilityZoneId :: Maybe Text
$sel:availabilityZoneId:FileSystemDescription' :: FileSystemDescription -> Maybe Text
availabilityZoneId} -> Maybe Text
availabilityZoneId) (\s :: FileSystemDescription
s@FileSystemDescription' {} Maybe Text
a -> FileSystemDescription
s {$sel:availabilityZoneId:FileSystemDescription' :: Maybe Text
availabilityZoneId = Maybe Text
a} :: FileSystemDescription)

-- | The amount of provisioned throughput, measured in MiB\/s, for the file
-- system. Valid for file systems using @ThroughputMode@ set to
-- @provisioned@.
fileSystemDescription_provisionedThroughputInMibps :: Lens.Lens' FileSystemDescription (Prelude.Maybe Prelude.Double)
fileSystemDescription_provisionedThroughputInMibps :: (Maybe Double -> f (Maybe Double))
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_provisionedThroughputInMibps = (FileSystemDescription -> Maybe Double)
-> (FileSystemDescription -> Maybe Double -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     (Maybe Double)
     (Maybe Double)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Maybe Double
provisionedThroughputInMibps :: Maybe Double
$sel:provisionedThroughputInMibps:FileSystemDescription' :: FileSystemDescription -> Maybe Double
provisionedThroughputInMibps} -> Maybe Double
provisionedThroughputInMibps) (\s :: FileSystemDescription
s@FileSystemDescription' {} Maybe Double
a -> FileSystemDescription
s {$sel:provisionedThroughputInMibps:FileSystemDescription' :: Maybe Double
provisionedThroughputInMibps = Maybe Double
a} :: FileSystemDescription)

-- | Describes the Amazon Web Services Availability Zone in which the file
-- system is located, and is valid only for file systems using One Zone
-- storage classes. For more information, see
-- <https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html Using EFS storage classes>
-- in the /Amazon EFS User Guide/.
fileSystemDescription_availabilityZoneName :: Lens.Lens' FileSystemDescription (Prelude.Maybe Prelude.Text)
fileSystemDescription_availabilityZoneName :: (Maybe Text -> f (Maybe Text))
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_availabilityZoneName = (FileSystemDescription -> Maybe Text)
-> (FileSystemDescription -> Maybe Text -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Maybe Text
availabilityZoneName :: Maybe Text
$sel:availabilityZoneName:FileSystemDescription' :: FileSystemDescription -> Maybe Text
availabilityZoneName} -> Maybe Text
availabilityZoneName) (\s :: FileSystemDescription
s@FileSystemDescription' {} Maybe Text
a -> FileSystemDescription
s {$sel:availabilityZoneName:FileSystemDescription' :: Maybe Text
availabilityZoneName = Maybe Text
a} :: FileSystemDescription)

-- | The Amazon Resource Name (ARN) for the EFS file system, in the format
-- @arn:aws:elasticfilesystem:region:account-id:file-system\/file-system-id @.
-- Example with sample data:
-- @arn:aws:elasticfilesystem:us-west-2:1111333322228888:file-system\/fs-01234567@
fileSystemDescription_fileSystemArn :: Lens.Lens' FileSystemDescription (Prelude.Maybe Prelude.Text)
fileSystemDescription_fileSystemArn :: (Maybe Text -> f (Maybe Text))
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_fileSystemArn = (FileSystemDescription -> Maybe Text)
-> (FileSystemDescription -> Maybe Text -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Maybe Text
fileSystemArn :: Maybe Text
$sel:fileSystemArn:FileSystemDescription' :: FileSystemDescription -> Maybe Text
fileSystemArn} -> Maybe Text
fileSystemArn) (\s :: FileSystemDescription
s@FileSystemDescription' {} Maybe Text
a -> FileSystemDescription
s {$sel:fileSystemArn:FileSystemDescription' :: Maybe Text
fileSystemArn = Maybe Text
a} :: FileSystemDescription)

-- | A Boolean value that, if true, indicates that the file system is
-- encrypted.
fileSystemDescription_encrypted :: Lens.Lens' FileSystemDescription (Prelude.Maybe Prelude.Bool)
fileSystemDescription_encrypted :: (Maybe Bool -> f (Maybe Bool))
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_encrypted = (FileSystemDescription -> Maybe Bool)
-> (FileSystemDescription -> Maybe Bool -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     (Maybe Bool)
     (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Maybe Bool
encrypted :: Maybe Bool
$sel:encrypted:FileSystemDescription' :: FileSystemDescription -> Maybe Bool
encrypted} -> Maybe Bool
encrypted) (\s :: FileSystemDescription
s@FileSystemDescription' {} Maybe Bool
a -> FileSystemDescription
s {$sel:encrypted:FileSystemDescription' :: Maybe Bool
encrypted = Maybe Bool
a} :: FileSystemDescription)

-- | Displays the file system\'s throughput mode. For more information, see
-- <https://docs.aws.amazon.com/efs/latest/ug/performance.html#throughput-modes Throughput modes>
-- in the /Amazon EFS User Guide/.
fileSystemDescription_throughputMode :: Lens.Lens' FileSystemDescription (Prelude.Maybe ThroughputMode)
fileSystemDescription_throughputMode :: (Maybe ThroughputMode -> f (Maybe ThroughputMode))
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_throughputMode = (FileSystemDescription -> Maybe ThroughputMode)
-> (FileSystemDescription
    -> Maybe ThroughputMode -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     (Maybe ThroughputMode)
     (Maybe ThroughputMode)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Maybe ThroughputMode
throughputMode :: Maybe ThroughputMode
$sel:throughputMode:FileSystemDescription' :: FileSystemDescription -> Maybe ThroughputMode
throughputMode} -> Maybe ThroughputMode
throughputMode) (\s :: FileSystemDescription
s@FileSystemDescription' {} Maybe ThroughputMode
a -> FileSystemDescription
s {$sel:throughputMode:FileSystemDescription' :: Maybe ThroughputMode
throughputMode = Maybe ThroughputMode
a} :: FileSystemDescription)

-- | The ID of an Key Management Service customer master key (CMK) that was
-- used to protect the encrypted file system.
fileSystemDescription_kmsKeyId :: Lens.Lens' FileSystemDescription (Prelude.Maybe Prelude.Text)
fileSystemDescription_kmsKeyId :: (Maybe Text -> f (Maybe Text))
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_kmsKeyId = (FileSystemDescription -> Maybe Text)
-> (FileSystemDescription -> Maybe Text -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Maybe Text
kmsKeyId :: Maybe Text
$sel:kmsKeyId:FileSystemDescription' :: FileSystemDescription -> Maybe Text
kmsKeyId} -> Maybe Text
kmsKeyId) (\s :: FileSystemDescription
s@FileSystemDescription' {} Maybe Text
a -> FileSystemDescription
s {$sel:kmsKeyId:FileSystemDescription' :: Maybe Text
kmsKeyId = Maybe Text
a} :: FileSystemDescription)

-- | You can add tags to a file system, including a @Name@ tag. For more
-- information, see CreateFileSystem. If the file system has a @Name@ tag,
-- Amazon EFS returns the value in this field.
fileSystemDescription_name :: Lens.Lens' FileSystemDescription (Prelude.Maybe Prelude.Text)
fileSystemDescription_name :: (Maybe Text -> f (Maybe Text))
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_name = (FileSystemDescription -> Maybe Text)
-> (FileSystemDescription -> Maybe Text -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Maybe Text
name :: Maybe Text
$sel:name:FileSystemDescription' :: FileSystemDescription -> Maybe Text
name} -> Maybe Text
name) (\s :: FileSystemDescription
s@FileSystemDescription' {} Maybe Text
a -> FileSystemDescription
s {$sel:name:FileSystemDescription' :: Maybe Text
name = Maybe Text
a} :: FileSystemDescription)

-- | The Amazon Web Services account that created the file system. If the
-- file system was created by an IAM user, the parent account to which the
-- user belongs is the owner.
fileSystemDescription_ownerId :: Lens.Lens' FileSystemDescription Prelude.Text
fileSystemDescription_ownerId :: (Text -> f Text)
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_ownerId = (FileSystemDescription -> Text)
-> (FileSystemDescription -> Text -> FileSystemDescription)
-> Lens FileSystemDescription FileSystemDescription Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Text
ownerId :: Text
$sel:ownerId:FileSystemDescription' :: FileSystemDescription -> Text
ownerId} -> Text
ownerId) (\s :: FileSystemDescription
s@FileSystemDescription' {} Text
a -> FileSystemDescription
s {$sel:ownerId:FileSystemDescription' :: Text
ownerId = Text
a} :: FileSystemDescription)

-- | The opaque string specified in the request.
fileSystemDescription_creationToken :: Lens.Lens' FileSystemDescription Prelude.Text
fileSystemDescription_creationToken :: (Text -> f Text)
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_creationToken = (FileSystemDescription -> Text)
-> (FileSystemDescription -> Text -> FileSystemDescription)
-> Lens FileSystemDescription FileSystemDescription Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Text
creationToken :: Text
$sel:creationToken:FileSystemDescription' :: FileSystemDescription -> Text
creationToken} -> Text
creationToken) (\s :: FileSystemDescription
s@FileSystemDescription' {} Text
a -> FileSystemDescription
s {$sel:creationToken:FileSystemDescription' :: Text
creationToken = Text
a} :: FileSystemDescription)

-- | The ID of the file system, assigned by Amazon EFS.
fileSystemDescription_fileSystemId :: Lens.Lens' FileSystemDescription Prelude.Text
fileSystemDescription_fileSystemId :: (Text -> f Text)
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_fileSystemId = (FileSystemDescription -> Text)
-> (FileSystemDescription -> Text -> FileSystemDescription)
-> Lens FileSystemDescription FileSystemDescription Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Text
fileSystemId :: Text
$sel:fileSystemId:FileSystemDescription' :: FileSystemDescription -> Text
fileSystemId} -> Text
fileSystemId) (\s :: FileSystemDescription
s@FileSystemDescription' {} Text
a -> FileSystemDescription
s {$sel:fileSystemId:FileSystemDescription' :: Text
fileSystemId = Text
a} :: FileSystemDescription)

-- | The time that the file system was created, in seconds (since
-- 1970-01-01T00:00:00Z).
fileSystemDescription_creationTime :: Lens.Lens' FileSystemDescription Prelude.UTCTime
fileSystemDescription_creationTime :: (UTCTime -> f UTCTime)
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_creationTime = (FileSystemDescription -> POSIX)
-> (FileSystemDescription -> POSIX -> FileSystemDescription)
-> Lens FileSystemDescription FileSystemDescription POSIX POSIX
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {POSIX
creationTime :: POSIX
$sel:creationTime:FileSystemDescription' :: FileSystemDescription -> POSIX
creationTime} -> POSIX
creationTime) (\s :: FileSystemDescription
s@FileSystemDescription' {} POSIX
a -> FileSystemDescription
s {$sel:creationTime:FileSystemDescription' :: POSIX
creationTime = POSIX
a} :: FileSystemDescription) ((POSIX -> f POSIX)
 -> FileSystemDescription -> f FileSystemDescription)
-> ((UTCTime -> f UTCTime) -> POSIX -> f POSIX)
-> (UTCTime -> f UTCTime)
-> FileSystemDescription
-> f FileSystemDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. (UTCTime -> f UTCTime) -> POSIX -> f POSIX
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | The lifecycle phase of the file system.
fileSystemDescription_lifeCycleState :: Lens.Lens' FileSystemDescription LifeCycleState
fileSystemDescription_lifeCycleState :: (LifeCycleState -> f LifeCycleState)
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_lifeCycleState = (FileSystemDescription -> LifeCycleState)
-> (FileSystemDescription
    -> LifeCycleState -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     LifeCycleState
     LifeCycleState
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {LifeCycleState
lifeCycleState :: LifeCycleState
$sel:lifeCycleState:FileSystemDescription' :: FileSystemDescription -> LifeCycleState
lifeCycleState} -> LifeCycleState
lifeCycleState) (\s :: FileSystemDescription
s@FileSystemDescription' {} LifeCycleState
a -> FileSystemDescription
s {$sel:lifeCycleState:FileSystemDescription' :: LifeCycleState
lifeCycleState = LifeCycleState
a} :: FileSystemDescription)

-- | The current number of mount targets that the file system has. For more
-- information, see CreateMountTarget.
fileSystemDescription_numberOfMountTargets :: Lens.Lens' FileSystemDescription Prelude.Natural
fileSystemDescription_numberOfMountTargets :: (Natural -> f Natural)
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_numberOfMountTargets = (FileSystemDescription -> Natural)
-> (FileSystemDescription -> Natural -> FileSystemDescription)
-> Lens FileSystemDescription FileSystemDescription Natural Natural
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {Natural
numberOfMountTargets :: Natural
$sel:numberOfMountTargets:FileSystemDescription' :: FileSystemDescription -> Natural
numberOfMountTargets} -> Natural
numberOfMountTargets) (\s :: FileSystemDescription
s@FileSystemDescription' {} Natural
a -> FileSystemDescription
s {$sel:numberOfMountTargets:FileSystemDescription' :: Natural
numberOfMountTargets = Natural
a} :: FileSystemDescription)

-- | The latest known metered size (in bytes) of data stored in the file
-- system, in its @Value@ field, and the time at which that size was
-- determined in its @Timestamp@ field. The @Timestamp@ value is the
-- integer number of seconds since 1970-01-01T00:00:00Z. The @SizeInBytes@
-- value doesn\'t represent the size of a consistent snapshot of the file
-- system, but it is eventually consistent when there are no writes to the
-- file system. That is, @SizeInBytes@ represents actual size only if the
-- file system is not modified for a period longer than a couple of hours.
-- Otherwise, the value is not the exact size that the file system was at
-- any point in time.
fileSystemDescription_sizeInBytes :: Lens.Lens' FileSystemDescription FileSystemSize
fileSystemDescription_sizeInBytes :: (FileSystemSize -> f FileSystemSize)
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_sizeInBytes = (FileSystemDescription -> FileSystemSize)
-> (FileSystemDescription
    -> FileSystemSize -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     FileSystemSize
     FileSystemSize
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {FileSystemSize
sizeInBytes :: FileSystemSize
$sel:sizeInBytes:FileSystemDescription' :: FileSystemDescription -> FileSystemSize
sizeInBytes} -> FileSystemSize
sizeInBytes) (\s :: FileSystemDescription
s@FileSystemDescription' {} FileSystemSize
a -> FileSystemDescription
s {$sel:sizeInBytes:FileSystemDescription' :: FileSystemSize
sizeInBytes = FileSystemSize
a} :: FileSystemDescription)

-- | The performance mode of the file system.
fileSystemDescription_performanceMode :: Lens.Lens' FileSystemDescription PerformanceMode
fileSystemDescription_performanceMode :: (PerformanceMode -> f PerformanceMode)
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_performanceMode = (FileSystemDescription -> PerformanceMode)
-> (FileSystemDescription
    -> PerformanceMode -> FileSystemDescription)
-> Lens
     FileSystemDescription
     FileSystemDescription
     PerformanceMode
     PerformanceMode
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {PerformanceMode
performanceMode :: PerformanceMode
$sel:performanceMode:FileSystemDescription' :: FileSystemDescription -> PerformanceMode
performanceMode} -> PerformanceMode
performanceMode) (\s :: FileSystemDescription
s@FileSystemDescription' {} PerformanceMode
a -> FileSystemDescription
s {$sel:performanceMode:FileSystemDescription' :: PerformanceMode
performanceMode = PerformanceMode
a} :: FileSystemDescription)

-- | The tags associated with the file system, presented as an array of @Tag@
-- objects.
fileSystemDescription_tags :: Lens.Lens' FileSystemDescription [Tag]
fileSystemDescription_tags :: ([Tag] -> f [Tag])
-> FileSystemDescription -> f FileSystemDescription
fileSystemDescription_tags = (FileSystemDescription -> [Tag])
-> (FileSystemDescription -> [Tag] -> FileSystemDescription)
-> Lens FileSystemDescription FileSystemDescription [Tag] [Tag]
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FileSystemDescription' {[Tag]
tags :: [Tag]
$sel:tags:FileSystemDescription' :: FileSystemDescription -> [Tag]
tags} -> [Tag]
tags) (\s :: FileSystemDescription
s@FileSystemDescription' {} [Tag]
a -> FileSystemDescription
s {$sel:tags:FileSystemDescription' :: [Tag]
tags = [Tag]
a} :: FileSystemDescription) (([Tag] -> f [Tag])
 -> FileSystemDescription -> f FileSystemDescription)
-> (([Tag] -> f [Tag]) -> [Tag] -> f [Tag])
-> ([Tag] -> f [Tag])
-> FileSystemDescription
-> f FileSystemDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. ([Tag] -> f [Tag]) -> [Tag] -> f [Tag]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.FromJSON FileSystemDescription where
  parseJSON :: Value -> Parser FileSystemDescription
parseJSON =
    String
-> (Object -> Parser FileSystemDescription)
-> Value
-> Parser FileSystemDescription
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Core.withObject
      String
"FileSystemDescription"
      ( \Object
x ->
          Maybe Text
-> Maybe Double
-> Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe ThroughputMode
-> Maybe Text
-> Maybe Text
-> Text
-> Text
-> Text
-> POSIX
-> LifeCycleState
-> Natural
-> FileSystemSize
-> PerformanceMode
-> [Tag]
-> FileSystemDescription
FileSystemDescription'
            (Maybe Text
 -> Maybe Double
 -> Maybe Text
 -> Maybe Text
 -> Maybe Bool
 -> Maybe ThroughputMode
 -> Maybe Text
 -> Maybe Text
 -> Text
 -> Text
 -> Text
 -> POSIX
 -> LifeCycleState
 -> Natural
 -> FileSystemSize
 -> PerformanceMode
 -> [Tag]
 -> FileSystemDescription)
-> Parser (Maybe Text)
-> Parser
     (Maybe Double
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe ThroughputMode
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"AvailabilityZoneId")
            Parser
  (Maybe Double
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe ThroughputMode
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser (Maybe Double)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe ThroughputMode
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Double)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"ProvisionedThroughputInMibps")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe ThroughputMode
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Bool
      -> Maybe ThroughputMode
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"AvailabilityZoneName")
            Parser
  (Maybe Text
   -> Maybe Bool
   -> Maybe ThroughputMode
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser (Maybe Text)
-> Parser
     (Maybe Bool
      -> Maybe ThroughputMode
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"FileSystemArn")
            Parser
  (Maybe Bool
   -> Maybe ThroughputMode
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser (Maybe Bool)
-> Parser
     (Maybe ThroughputMode
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Encrypted")
            Parser
  (Maybe ThroughputMode
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser (Maybe ThroughputMode)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe ThroughputMode)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"ThroughputMode")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Text
      -> Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"KmsKeyId")
            Parser
  (Maybe Text
   -> Text
   -> Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser (Maybe Text)
-> Parser
     (Text
      -> Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Name")
            Parser
  (Text
   -> Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser Text
-> Parser
     (Text
      -> Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"OwnerId")
            Parser
  (Text
   -> Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser Text
-> Parser
     (Text
      -> POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"CreationToken")
            Parser
  (Text
   -> POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser Text
-> Parser
     (POSIX
      -> LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"FileSystemId")
            Parser
  (POSIX
   -> LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser POSIX
-> Parser
     (LifeCycleState
      -> Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser POSIX
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"CreationTime")
            Parser
  (LifeCycleState
   -> Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser LifeCycleState
-> Parser
     (Natural
      -> FileSystemSize
      -> PerformanceMode
      -> [Tag]
      -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser LifeCycleState
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"LifeCycleState")
            Parser
  (Natural
   -> FileSystemSize
   -> PerformanceMode
   -> [Tag]
   -> FileSystemDescription)
-> Parser Natural
-> Parser
     (FileSystemSize
      -> PerformanceMode -> [Tag] -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser Natural
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"NumberOfMountTargets")
            Parser
  (FileSystemSize
   -> PerformanceMode -> [Tag] -> FileSystemDescription)
-> Parser FileSystemSize
-> Parser (PerformanceMode -> [Tag] -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser FileSystemSize
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"SizeInBytes")
            Parser (PerformanceMode -> [Tag] -> FileSystemDescription)
-> Parser PerformanceMode
-> Parser ([Tag] -> FileSystemDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser PerformanceMode
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"PerformanceMode")
            Parser ([Tag] -> FileSystemDescription)
-> Parser [Tag] -> Parser FileSystemDescription
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe [Tag])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Tags" Parser (Maybe [Tag]) -> [Tag] -> Parser [Tag]
forall a. Parser (Maybe a) -> a -> Parser a
Core..!= [Tag]
forall a. Monoid a => a
Prelude.mempty)
      )

instance Prelude.Hashable FileSystemDescription

instance Prelude.NFData FileSystemDescription