{-# 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.DescribeSMBFileShares
-- 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 Server Message Block (SMB) file
-- shares from a S3 File Gateway. This operation is only supported for S3
-- File Gateways.
module Amazonka.StorageGateway.DescribeSMBFileShares
  ( -- * Creating a Request
    DescribeSMBFileShares (..),
    newDescribeSMBFileShares,

    -- * Request Lenses
    describeSMBFileShares_fileShareARNList,

    -- * Destructuring the Response
    DescribeSMBFileSharesResponse (..),
    newDescribeSMBFileSharesResponse,

    -- * Response Lenses
    describeSMBFileSharesResponse_sMBFileShareInfoList,
    describeSMBFileSharesResponse_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

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

-- |
-- Create a value of 'DescribeSMBFileShares' 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', 'describeSMBFileShares_fileShareARNList' - An array containing the Amazon Resource Name (ARN) of each file share to
-- be described.
newDescribeSMBFileShares ::
  -- | 'fileShareARNList'
  Prelude.NonEmpty Prelude.Text ->
  DescribeSMBFileShares
newDescribeSMBFileShares :: NonEmpty Text -> DescribeSMBFileShares
newDescribeSMBFileShares NonEmpty Text
pFileShareARNList_ =
  DescribeSMBFileShares'
    { $sel:fileShareARNList:DescribeSMBFileShares' :: 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.
describeSMBFileShares_fileShareARNList :: Lens.Lens' DescribeSMBFileShares (Prelude.NonEmpty Prelude.Text)
describeSMBFileShares_fileShareARNList :: Lens' DescribeSMBFileShares (NonEmpty Text)
describeSMBFileShares_fileShareARNList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSMBFileShares' {NonEmpty Text
fileShareARNList :: NonEmpty Text
$sel:fileShareARNList:DescribeSMBFileShares' :: DescribeSMBFileShares -> NonEmpty Text
fileShareARNList} -> NonEmpty Text
fileShareARNList) (\s :: DescribeSMBFileShares
s@DescribeSMBFileShares' {} NonEmpty Text
a -> DescribeSMBFileShares
s {$sel:fileShareARNList:DescribeSMBFileShares' :: NonEmpty Text
fileShareARNList = NonEmpty Text
a} :: DescribeSMBFileShares) 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 DescribeSMBFileShares where
  type
    AWSResponse DescribeSMBFileShares =
      DescribeSMBFileSharesResponse
  request :: (Service -> Service)
-> DescribeSMBFileShares -> Request DescribeSMBFileShares
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 DescribeSMBFileShares
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeSMBFileShares)))
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 [SMBFileShareInfo] -> Int -> DescribeSMBFileSharesResponse
DescribeSMBFileSharesResponse'
            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
"SMBFileShareInfoList"
                            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 DescribeSMBFileShares where
  hashWithSalt :: Int -> DescribeSMBFileShares -> Int
hashWithSalt Int
_salt DescribeSMBFileShares' {NonEmpty Text
fileShareARNList :: NonEmpty Text
$sel:fileShareARNList:DescribeSMBFileShares' :: DescribeSMBFileShares -> NonEmpty Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Text
fileShareARNList

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

instance Data.ToHeaders DescribeSMBFileShares where
  toHeaders :: DescribeSMBFileShares -> 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.DescribeSMBFileShares" ::
                          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 DescribeSMBFileShares where
  toJSON :: DescribeSMBFileShares -> Value
toJSON DescribeSMBFileShares' {NonEmpty Text
fileShareARNList :: NonEmpty Text
$sel:fileShareARNList:DescribeSMBFileShares' :: DescribeSMBFileShares -> 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 DescribeSMBFileShares where
  toPath :: DescribeSMBFileShares -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

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

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

-- |
-- Create a value of 'DescribeSMBFileSharesResponse' 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:
--
-- 'sMBFileShareInfoList', 'describeSMBFileSharesResponse_sMBFileShareInfoList' - An array containing a description for each requested file share.
--
-- 'httpStatus', 'describeSMBFileSharesResponse_httpStatus' - The response's http status code.
newDescribeSMBFileSharesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeSMBFileSharesResponse
newDescribeSMBFileSharesResponse :: Int -> DescribeSMBFileSharesResponse
newDescribeSMBFileSharesResponse Int
pHttpStatus_ =
  DescribeSMBFileSharesResponse'
    { $sel:sMBFileShareInfoList:DescribeSMBFileSharesResponse' :: Maybe [SMBFileShareInfo]
sMBFileShareInfoList =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeSMBFileSharesResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | An array containing a description for each requested file share.
describeSMBFileSharesResponse_sMBFileShareInfoList :: Lens.Lens' DescribeSMBFileSharesResponse (Prelude.Maybe [SMBFileShareInfo])
describeSMBFileSharesResponse_sMBFileShareInfoList :: Lens' DescribeSMBFileSharesResponse (Maybe [SMBFileShareInfo])
describeSMBFileSharesResponse_sMBFileShareInfoList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSMBFileSharesResponse' {Maybe [SMBFileShareInfo]
sMBFileShareInfoList :: Maybe [SMBFileShareInfo]
$sel:sMBFileShareInfoList:DescribeSMBFileSharesResponse' :: DescribeSMBFileSharesResponse -> Maybe [SMBFileShareInfo]
sMBFileShareInfoList} -> Maybe [SMBFileShareInfo]
sMBFileShareInfoList) (\s :: DescribeSMBFileSharesResponse
s@DescribeSMBFileSharesResponse' {} Maybe [SMBFileShareInfo]
a -> DescribeSMBFileSharesResponse
s {$sel:sMBFileShareInfoList:DescribeSMBFileSharesResponse' :: Maybe [SMBFileShareInfo]
sMBFileShareInfoList = Maybe [SMBFileShareInfo]
a} :: DescribeSMBFileSharesResponse) 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.
describeSMBFileSharesResponse_httpStatus :: Lens.Lens' DescribeSMBFileSharesResponse Prelude.Int
describeSMBFileSharesResponse_httpStatus :: Lens' DescribeSMBFileSharesResponse Int
describeSMBFileSharesResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSMBFileSharesResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeSMBFileSharesResponse' :: DescribeSMBFileSharesResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeSMBFileSharesResponse
s@DescribeSMBFileSharesResponse' {} Int
a -> DescribeSMBFileSharesResponse
s {$sel:httpStatus:DescribeSMBFileSharesResponse' :: Int
httpStatus = Int
a} :: DescribeSMBFileSharesResponse)

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