{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.StorageGateway.DescribeNFSFileShares
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets a description for one or more Network File System (NFS) file shares
-- from an S3 File Gateway. This operation is only supported for S3 File
-- Gateways.
module Amazonka.StorageGateway.DescribeNFSFileShares
  ( -- * Creating a Request
    DescribeNFSFileShares (..),
    newDescribeNFSFileShares,

    -- * Request Lenses
    describeNFSFileShares_fileShareARNList,

    -- * Destructuring the Response
    DescribeNFSFileSharesResponse (..),
    newDescribeNFSFileSharesResponse,

    -- * Response Lenses
    describeNFSFileSharesResponse_nFSFileShareInfoList,
    describeNFSFileSharesResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.StorageGateway.Types

-- | DescribeNFSFileSharesInput
--
-- /See:/ 'newDescribeNFSFileShares' smart constructor.
data DescribeNFSFileShares = DescribeNFSFileShares'
  { -- | An array containing the Amazon Resource Name (ARN) of each file share to
    -- be described.
    DescribeNFSFileShares -> NonEmpty Text
fileShareARNList :: Prelude.NonEmpty Prelude.Text
  }
  deriving (DescribeNFSFileShares -> DescribeNFSFileShares -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeNFSFileShares -> DescribeNFSFileShares -> Bool
$c/= :: DescribeNFSFileShares -> DescribeNFSFileShares -> Bool
== :: DescribeNFSFileShares -> DescribeNFSFileShares -> Bool
$c== :: DescribeNFSFileShares -> DescribeNFSFileShares -> Bool
Prelude.Eq, ReadPrec [DescribeNFSFileShares]
ReadPrec DescribeNFSFileShares
Int -> ReadS DescribeNFSFileShares
ReadS [DescribeNFSFileShares]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeNFSFileShares]
$creadListPrec :: ReadPrec [DescribeNFSFileShares]
readPrec :: ReadPrec DescribeNFSFileShares
$creadPrec :: ReadPrec DescribeNFSFileShares
readList :: ReadS [DescribeNFSFileShares]
$creadList :: ReadS [DescribeNFSFileShares]
readsPrec :: Int -> ReadS DescribeNFSFileShares
$creadsPrec :: Int -> ReadS DescribeNFSFileShares
Prelude.Read, Int -> DescribeNFSFileShares -> ShowS
[DescribeNFSFileShares] -> ShowS
DescribeNFSFileShares -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeNFSFileShares] -> ShowS
$cshowList :: [DescribeNFSFileShares] -> ShowS
show :: DescribeNFSFileShares -> String
$cshow :: DescribeNFSFileShares -> String
showsPrec :: Int -> DescribeNFSFileShares -> ShowS
$cshowsPrec :: Int -> DescribeNFSFileShares -> ShowS
Prelude.Show, forall x. Rep DescribeNFSFileShares x -> DescribeNFSFileShares
forall x. DescribeNFSFileShares -> Rep DescribeNFSFileShares x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeNFSFileShares x -> DescribeNFSFileShares
$cfrom :: forall x. DescribeNFSFileShares -> Rep DescribeNFSFileShares x
Prelude.Generic)

-- |
-- Create a value of 'DescribeNFSFileShares' 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:
--
-- 'fileShareARNList', 'describeNFSFileShares_fileShareARNList' - An array containing the Amazon Resource Name (ARN) of each file share to
-- be described.
newDescribeNFSFileShares ::
  -- | 'fileShareARNList'
  Prelude.NonEmpty Prelude.Text ->
  DescribeNFSFileShares
newDescribeNFSFileShares :: NonEmpty Text -> DescribeNFSFileShares
newDescribeNFSFileShares NonEmpty Text
pFileShareARNList_ =
  DescribeNFSFileShares'
    { $sel:fileShareARNList:DescribeNFSFileShares' :: NonEmpty Text
fileShareARNList =
        forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty Text
pFileShareARNList_
    }

-- | An array containing the Amazon Resource Name (ARN) of each file share to
-- be described.
describeNFSFileShares_fileShareARNList :: Lens.Lens' DescribeNFSFileShares (Prelude.NonEmpty Prelude.Text)
describeNFSFileShares_fileShareARNList :: Lens' DescribeNFSFileShares (NonEmpty Text)
describeNFSFileShares_fileShareARNList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeNFSFileShares' {NonEmpty Text
fileShareARNList :: NonEmpty Text
$sel:fileShareARNList:DescribeNFSFileShares' :: DescribeNFSFileShares -> NonEmpty Text
fileShareARNList} -> NonEmpty Text
fileShareARNList) (\s :: DescribeNFSFileShares
s@DescribeNFSFileShares' {} NonEmpty Text
a -> DescribeNFSFileShares
s {$sel:fileShareARNList:DescribeNFSFileShares' :: NonEmpty Text
fileShareARNList = NonEmpty Text
a} :: DescribeNFSFileShares) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest DescribeNFSFileShares where
  type
    AWSResponse DescribeNFSFileShares =
      DescribeNFSFileSharesResponse
  request :: (Service -> Service)
-> DescribeNFSFileShares -> Request DescribeNFSFileShares
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeNFSFileShares
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeNFSFileShares)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe [NFSFileShareInfo] -> Int -> DescribeNFSFileSharesResponse
DescribeNFSFileSharesResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"NFSFileShareInfoList"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable DescribeNFSFileShares where
  hashWithSalt :: Int -> DescribeNFSFileShares -> Int
hashWithSalt Int
_salt DescribeNFSFileShares' {NonEmpty Text
fileShareARNList :: NonEmpty Text
$sel:fileShareARNList:DescribeNFSFileShares' :: DescribeNFSFileShares -> NonEmpty Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Text
fileShareARNList

instance Prelude.NFData DescribeNFSFileShares where
  rnf :: DescribeNFSFileShares -> ()
rnf DescribeNFSFileShares' {NonEmpty Text
fileShareARNList :: NonEmpty Text
$sel:fileShareARNList:DescribeNFSFileShares' :: DescribeNFSFileShares -> NonEmpty Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf NonEmpty Text
fileShareARNList

instance Data.ToHeaders DescribeNFSFileShares where
  toHeaders :: DescribeNFSFileShares -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"StorageGateway_20130630.DescribeNFSFileShares" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DescribeNFSFileShares where
  toJSON :: DescribeNFSFileShares -> Value
toJSON DescribeNFSFileShares' {NonEmpty Text
fileShareARNList :: NonEmpty Text
$sel:fileShareARNList:DescribeNFSFileShares' :: DescribeNFSFileShares -> NonEmpty Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"FileShareARNList" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty Text
fileShareARNList)
          ]
      )

instance Data.ToPath DescribeNFSFileShares where
  toPath :: DescribeNFSFileShares -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery DescribeNFSFileShares where
  toQuery :: DescribeNFSFileShares -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | DescribeNFSFileSharesOutput
--
-- /See:/ 'newDescribeNFSFileSharesResponse' smart constructor.
data DescribeNFSFileSharesResponse = DescribeNFSFileSharesResponse'
  { -- | An array containing a description for each requested file share.
    DescribeNFSFileSharesResponse -> Maybe [NFSFileShareInfo]
nFSFileShareInfoList :: Prelude.Maybe [NFSFileShareInfo],
    -- | The response's http status code.
    DescribeNFSFileSharesResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeNFSFileSharesResponse
-> DescribeNFSFileSharesResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeNFSFileSharesResponse
-> DescribeNFSFileSharesResponse -> Bool
$c/= :: DescribeNFSFileSharesResponse
-> DescribeNFSFileSharesResponse -> Bool
== :: DescribeNFSFileSharesResponse
-> DescribeNFSFileSharesResponse -> Bool
$c== :: DescribeNFSFileSharesResponse
-> DescribeNFSFileSharesResponse -> Bool
Prelude.Eq, ReadPrec [DescribeNFSFileSharesResponse]
ReadPrec DescribeNFSFileSharesResponse
Int -> ReadS DescribeNFSFileSharesResponse
ReadS [DescribeNFSFileSharesResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeNFSFileSharesResponse]
$creadListPrec :: ReadPrec [DescribeNFSFileSharesResponse]
readPrec :: ReadPrec DescribeNFSFileSharesResponse
$creadPrec :: ReadPrec DescribeNFSFileSharesResponse
readList :: ReadS [DescribeNFSFileSharesResponse]
$creadList :: ReadS [DescribeNFSFileSharesResponse]
readsPrec :: Int -> ReadS DescribeNFSFileSharesResponse
$creadsPrec :: Int -> ReadS DescribeNFSFileSharesResponse
Prelude.Read, Int -> DescribeNFSFileSharesResponse -> ShowS
[DescribeNFSFileSharesResponse] -> ShowS
DescribeNFSFileSharesResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeNFSFileSharesResponse] -> ShowS
$cshowList :: [DescribeNFSFileSharesResponse] -> ShowS
show :: DescribeNFSFileSharesResponse -> String
$cshow :: DescribeNFSFileSharesResponse -> String
showsPrec :: Int -> DescribeNFSFileSharesResponse -> ShowS
$cshowsPrec :: Int -> DescribeNFSFileSharesResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeNFSFileSharesResponse x
-> DescribeNFSFileSharesResponse
forall x.
DescribeNFSFileSharesResponse
-> Rep DescribeNFSFileSharesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeNFSFileSharesResponse x
-> DescribeNFSFileSharesResponse
$cfrom :: forall x.
DescribeNFSFileSharesResponse
-> Rep DescribeNFSFileSharesResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeNFSFileSharesResponse' 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:
--
-- 'nFSFileShareInfoList', 'describeNFSFileSharesResponse_nFSFileShareInfoList' - An array containing a description for each requested file share.
--
-- 'httpStatus', 'describeNFSFileSharesResponse_httpStatus' - The response's http status code.
newDescribeNFSFileSharesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeNFSFileSharesResponse
newDescribeNFSFileSharesResponse :: Int -> DescribeNFSFileSharesResponse
newDescribeNFSFileSharesResponse Int
pHttpStatus_ =
  DescribeNFSFileSharesResponse'
    { $sel:nFSFileShareInfoList:DescribeNFSFileSharesResponse' :: Maybe [NFSFileShareInfo]
nFSFileShareInfoList =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeNFSFileSharesResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | An array containing a description for each requested file share.
describeNFSFileSharesResponse_nFSFileShareInfoList :: Lens.Lens' DescribeNFSFileSharesResponse (Prelude.Maybe [NFSFileShareInfo])
describeNFSFileSharesResponse_nFSFileShareInfoList :: Lens' DescribeNFSFileSharesResponse (Maybe [NFSFileShareInfo])
describeNFSFileSharesResponse_nFSFileShareInfoList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeNFSFileSharesResponse' {Maybe [NFSFileShareInfo]
nFSFileShareInfoList :: Maybe [NFSFileShareInfo]
$sel:nFSFileShareInfoList:DescribeNFSFileSharesResponse' :: DescribeNFSFileSharesResponse -> Maybe [NFSFileShareInfo]
nFSFileShareInfoList} -> Maybe [NFSFileShareInfo]
nFSFileShareInfoList) (\s :: DescribeNFSFileSharesResponse
s@DescribeNFSFileSharesResponse' {} Maybe [NFSFileShareInfo]
a -> DescribeNFSFileSharesResponse
s {$sel:nFSFileShareInfoList:DescribeNFSFileSharesResponse' :: Maybe [NFSFileShareInfo]
nFSFileShareInfoList = Maybe [NFSFileShareInfo]
a} :: DescribeNFSFileSharesResponse) 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 response's http status code.
describeNFSFileSharesResponse_httpStatus :: Lens.Lens' DescribeNFSFileSharesResponse Prelude.Int
describeNFSFileSharesResponse_httpStatus :: Lens' DescribeNFSFileSharesResponse Int
describeNFSFileSharesResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeNFSFileSharesResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeNFSFileSharesResponse' :: DescribeNFSFileSharesResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeNFSFileSharesResponse
s@DescribeNFSFileSharesResponse' {} Int
a -> DescribeNFSFileSharesResponse
s {$sel:httpStatus:DescribeNFSFileSharesResponse' :: Int
httpStatus = Int
a} :: DescribeNFSFileSharesResponse)

instance Prelude.NFData DescribeNFSFileSharesResponse where
  rnf :: DescribeNFSFileSharesResponse -> ()
rnf DescribeNFSFileSharesResponse' {Int
Maybe [NFSFileShareInfo]
httpStatus :: Int
nFSFileShareInfoList :: Maybe [NFSFileShareInfo]
$sel:httpStatus:DescribeNFSFileSharesResponse' :: DescribeNFSFileSharesResponse -> Int
$sel:nFSFileShareInfoList:DescribeNFSFileSharesResponse' :: DescribeNFSFileSharesResponse -> Maybe [NFSFileShareInfo]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [NFSFileShareInfo]
nFSFileShareInfoList
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus