{-# 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.DynamoDB.DescribeExport
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes an existing table export.
module Amazonka.DynamoDB.DescribeExport
  ( -- * Creating a Request
    DescribeExport (..),
    newDescribeExport,

    -- * Request Lenses
    describeExport_exportArn,

    -- * Destructuring the Response
    DescribeExportResponse (..),
    newDescribeExportResponse,

    -- * Response Lenses
    describeExportResponse_exportDescription,
    describeExportResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeExport' smart constructor.
data DescribeExport = DescribeExport'
  { -- | The Amazon Resource Name (ARN) associated with the export.
    DescribeExport -> Text
exportArn :: Prelude.Text
  }
  deriving (DescribeExport -> DescribeExport -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeExport -> DescribeExport -> Bool
$c/= :: DescribeExport -> DescribeExport -> Bool
== :: DescribeExport -> DescribeExport -> Bool
$c== :: DescribeExport -> DescribeExport -> Bool
Prelude.Eq, ReadPrec [DescribeExport]
ReadPrec DescribeExport
Int -> ReadS DescribeExport
ReadS [DescribeExport]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeExport]
$creadListPrec :: ReadPrec [DescribeExport]
readPrec :: ReadPrec DescribeExport
$creadPrec :: ReadPrec DescribeExport
readList :: ReadS [DescribeExport]
$creadList :: ReadS [DescribeExport]
readsPrec :: Int -> ReadS DescribeExport
$creadsPrec :: Int -> ReadS DescribeExport
Prelude.Read, Int -> DescribeExport -> ShowS
[DescribeExport] -> ShowS
DescribeExport -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeExport] -> ShowS
$cshowList :: [DescribeExport] -> ShowS
show :: DescribeExport -> String
$cshow :: DescribeExport -> String
showsPrec :: Int -> DescribeExport -> ShowS
$cshowsPrec :: Int -> DescribeExport -> ShowS
Prelude.Show, forall x. Rep DescribeExport x -> DescribeExport
forall x. DescribeExport -> Rep DescribeExport x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeExport x -> DescribeExport
$cfrom :: forall x. DescribeExport -> Rep DescribeExport x
Prelude.Generic)

-- |
-- Create a value of 'DescribeExport' 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:
--
-- 'exportArn', 'describeExport_exportArn' - The Amazon Resource Name (ARN) associated with the export.
newDescribeExport ::
  -- | 'exportArn'
  Prelude.Text ->
  DescribeExport
newDescribeExport :: Text -> DescribeExport
newDescribeExport Text
pExportArn_ =
  DescribeExport' {$sel:exportArn:DescribeExport' :: Text
exportArn = Text
pExportArn_}

-- | The Amazon Resource Name (ARN) associated with the export.
describeExport_exportArn :: Lens.Lens' DescribeExport Prelude.Text
describeExport_exportArn :: Lens' DescribeExport Text
describeExport_exportArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeExport' {Text
exportArn :: Text
$sel:exportArn:DescribeExport' :: DescribeExport -> Text
exportArn} -> Text
exportArn) (\s :: DescribeExport
s@DescribeExport' {} Text
a -> DescribeExport
s {$sel:exportArn:DescribeExport' :: Text
exportArn = Text
a} :: DescribeExport)

instance Core.AWSRequest DescribeExport where
  type
    AWSResponse DescribeExport =
      DescribeExportResponse
  request :: (Service -> Service) -> DescribeExport -> Request DescribeExport
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 DescribeExport
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DescribeExport)))
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 ExportDescription -> Int -> DescribeExportResponse
DescribeExportResponse'
            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
"ExportDescription")
            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 DescribeExport where
  hashWithSalt :: Int -> DescribeExport -> Int
hashWithSalt Int
_salt DescribeExport' {Text
exportArn :: Text
$sel:exportArn:DescribeExport' :: DescribeExport -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
exportArn

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

instance Data.ToHeaders DescribeExport where
  toHeaders :: DescribeExport -> 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
"DynamoDB_20120810.DescribeExport" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

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

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

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

-- | /See:/ 'newDescribeExportResponse' smart constructor.
data DescribeExportResponse = DescribeExportResponse'
  { -- | Represents the properties of the export.
    DescribeExportResponse -> Maybe ExportDescription
exportDescription :: Prelude.Maybe ExportDescription,
    -- | The response's http status code.
    DescribeExportResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeExportResponse -> DescribeExportResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeExportResponse -> DescribeExportResponse -> Bool
$c/= :: DescribeExportResponse -> DescribeExportResponse -> Bool
== :: DescribeExportResponse -> DescribeExportResponse -> Bool
$c== :: DescribeExportResponse -> DescribeExportResponse -> Bool
Prelude.Eq, ReadPrec [DescribeExportResponse]
ReadPrec DescribeExportResponse
Int -> ReadS DescribeExportResponse
ReadS [DescribeExportResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeExportResponse]
$creadListPrec :: ReadPrec [DescribeExportResponse]
readPrec :: ReadPrec DescribeExportResponse
$creadPrec :: ReadPrec DescribeExportResponse
readList :: ReadS [DescribeExportResponse]
$creadList :: ReadS [DescribeExportResponse]
readsPrec :: Int -> ReadS DescribeExportResponse
$creadsPrec :: Int -> ReadS DescribeExportResponse
Prelude.Read, Int -> DescribeExportResponse -> ShowS
[DescribeExportResponse] -> ShowS
DescribeExportResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeExportResponse] -> ShowS
$cshowList :: [DescribeExportResponse] -> ShowS
show :: DescribeExportResponse -> String
$cshow :: DescribeExportResponse -> String
showsPrec :: Int -> DescribeExportResponse -> ShowS
$cshowsPrec :: Int -> DescribeExportResponse -> ShowS
Prelude.Show, forall x. Rep DescribeExportResponse x -> DescribeExportResponse
forall x. DescribeExportResponse -> Rep DescribeExportResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeExportResponse x -> DescribeExportResponse
$cfrom :: forall x. DescribeExportResponse -> Rep DescribeExportResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeExportResponse' 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:
--
-- 'exportDescription', 'describeExportResponse_exportDescription' - Represents the properties of the export.
--
-- 'httpStatus', 'describeExportResponse_httpStatus' - The response's http status code.
newDescribeExportResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeExportResponse
newDescribeExportResponse :: Int -> DescribeExportResponse
newDescribeExportResponse Int
pHttpStatus_ =
  DescribeExportResponse'
    { $sel:exportDescription:DescribeExportResponse' :: Maybe ExportDescription
exportDescription =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeExportResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Represents the properties of the export.
describeExportResponse_exportDescription :: Lens.Lens' DescribeExportResponse (Prelude.Maybe ExportDescription)
describeExportResponse_exportDescription :: Lens' DescribeExportResponse (Maybe ExportDescription)
describeExportResponse_exportDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeExportResponse' {Maybe ExportDescription
exportDescription :: Maybe ExportDescription
$sel:exportDescription:DescribeExportResponse' :: DescribeExportResponse -> Maybe ExportDescription
exportDescription} -> Maybe ExportDescription
exportDescription) (\s :: DescribeExportResponse
s@DescribeExportResponse' {} Maybe ExportDescription
a -> DescribeExportResponse
s {$sel:exportDescription:DescribeExportResponse' :: Maybe ExportDescription
exportDescription = Maybe ExportDescription
a} :: DescribeExportResponse)

-- | The response's http status code.
describeExportResponse_httpStatus :: Lens.Lens' DescribeExportResponse Prelude.Int
describeExportResponse_httpStatus :: Lens' DescribeExportResponse Int
describeExportResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeExportResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeExportResponse' :: DescribeExportResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeExportResponse
s@DescribeExportResponse' {} Int
a -> DescribeExportResponse
s {$sel:httpStatus:DescribeExportResponse' :: Int
httpStatus = Int
a} :: DescribeExportResponse)

instance Prelude.NFData DescribeExportResponse where
  rnf :: DescribeExportResponse -> ()
rnf DescribeExportResponse' {Int
Maybe ExportDescription
httpStatus :: Int
exportDescription :: Maybe ExportDescription
$sel:httpStatus:DescribeExportResponse' :: DescribeExportResponse -> Int
$sel:exportDescription:DescribeExportResponse' :: DescribeExportResponse -> Maybe ExportDescription
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ExportDescription
exportDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus