{-# 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.QuickSight.DescribeDataSource
-- 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 a data source.
module Amazonka.QuickSight.DescribeDataSource
  ( -- * Creating a Request
    DescribeDataSource (..),
    newDescribeDataSource,

    -- * Request Lenses
    describeDataSource_awsAccountId,
    describeDataSource_dataSourceId,

    -- * Destructuring the Response
    DescribeDataSourceResponse (..),
    newDescribeDataSourceResponse,

    -- * Response Lenses
    describeDataSourceResponse_dataSource,
    describeDataSourceResponse_requestId,
    describeDataSourceResponse_status,
  )
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 Amazonka.QuickSight.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDescribeDataSource' smart constructor.
data DescribeDataSource = DescribeDataSource'
  { -- | The Amazon Web Services account ID.
    DescribeDataSource -> Text
awsAccountId :: Prelude.Text,
    -- | The ID of the data source. This ID is unique per Amazon Web Services
    -- Region for each Amazon Web Services account.
    DescribeDataSource -> Text
dataSourceId :: Prelude.Text
  }
  deriving (DescribeDataSource -> DescribeDataSource -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeDataSource -> DescribeDataSource -> Bool
$c/= :: DescribeDataSource -> DescribeDataSource -> Bool
== :: DescribeDataSource -> DescribeDataSource -> Bool
$c== :: DescribeDataSource -> DescribeDataSource -> Bool
Prelude.Eq, ReadPrec [DescribeDataSource]
ReadPrec DescribeDataSource
Int -> ReadS DescribeDataSource
ReadS [DescribeDataSource]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeDataSource]
$creadListPrec :: ReadPrec [DescribeDataSource]
readPrec :: ReadPrec DescribeDataSource
$creadPrec :: ReadPrec DescribeDataSource
readList :: ReadS [DescribeDataSource]
$creadList :: ReadS [DescribeDataSource]
readsPrec :: Int -> ReadS DescribeDataSource
$creadsPrec :: Int -> ReadS DescribeDataSource
Prelude.Read, Int -> DescribeDataSource -> ShowS
[DescribeDataSource] -> ShowS
DescribeDataSource -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeDataSource] -> ShowS
$cshowList :: [DescribeDataSource] -> ShowS
show :: DescribeDataSource -> String
$cshow :: DescribeDataSource -> String
showsPrec :: Int -> DescribeDataSource -> ShowS
$cshowsPrec :: Int -> DescribeDataSource -> ShowS
Prelude.Show, forall x. Rep DescribeDataSource x -> DescribeDataSource
forall x. DescribeDataSource -> Rep DescribeDataSource x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeDataSource x -> DescribeDataSource
$cfrom :: forall x. DescribeDataSource -> Rep DescribeDataSource x
Prelude.Generic)

-- |
-- Create a value of 'DescribeDataSource' 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:
--
-- 'awsAccountId', 'describeDataSource_awsAccountId' - The Amazon Web Services account ID.
--
-- 'dataSourceId', 'describeDataSource_dataSourceId' - The ID of the data source. This ID is unique per Amazon Web Services
-- Region for each Amazon Web Services account.
newDescribeDataSource ::
  -- | 'awsAccountId'
  Prelude.Text ->
  -- | 'dataSourceId'
  Prelude.Text ->
  DescribeDataSource
newDescribeDataSource :: Text -> Text -> DescribeDataSource
newDescribeDataSource Text
pAwsAccountId_ Text
pDataSourceId_ =
  DescribeDataSource'
    { $sel:awsAccountId:DescribeDataSource' :: Text
awsAccountId = Text
pAwsAccountId_,
      $sel:dataSourceId:DescribeDataSource' :: Text
dataSourceId = Text
pDataSourceId_
    }

-- | The Amazon Web Services account ID.
describeDataSource_awsAccountId :: Lens.Lens' DescribeDataSource Prelude.Text
describeDataSource_awsAccountId :: Lens' DescribeDataSource Text
describeDataSource_awsAccountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDataSource' {Text
awsAccountId :: Text
$sel:awsAccountId:DescribeDataSource' :: DescribeDataSource -> Text
awsAccountId} -> Text
awsAccountId) (\s :: DescribeDataSource
s@DescribeDataSource' {} Text
a -> DescribeDataSource
s {$sel:awsAccountId:DescribeDataSource' :: Text
awsAccountId = Text
a} :: DescribeDataSource)

-- | The ID of the data source. This ID is unique per Amazon Web Services
-- Region for each Amazon Web Services account.
describeDataSource_dataSourceId :: Lens.Lens' DescribeDataSource Prelude.Text
describeDataSource_dataSourceId :: Lens' DescribeDataSource Text
describeDataSource_dataSourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDataSource' {Text
dataSourceId :: Text
$sel:dataSourceId:DescribeDataSource' :: DescribeDataSource -> Text
dataSourceId} -> Text
dataSourceId) (\s :: DescribeDataSource
s@DescribeDataSource' {} Text
a -> DescribeDataSource
s {$sel:dataSourceId:DescribeDataSource' :: Text
dataSourceId = Text
a} :: DescribeDataSource)

instance Core.AWSRequest DescribeDataSource where
  type
    AWSResponse DescribeDataSource =
      DescribeDataSourceResponse
  request :: (Service -> Service)
-> DescribeDataSource -> Request DescribeDataSource
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeDataSource
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeDataSource)))
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 DataSource -> Maybe Text -> Int -> DescribeDataSourceResponse
DescribeDataSourceResponse'
            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
"DataSource")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"RequestId")
            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 DescribeDataSource where
  hashWithSalt :: Int -> DescribeDataSource -> Int
hashWithSalt Int
_salt DescribeDataSource' {Text
dataSourceId :: Text
awsAccountId :: Text
$sel:dataSourceId:DescribeDataSource' :: DescribeDataSource -> Text
$sel:awsAccountId:DescribeDataSource' :: DescribeDataSource -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
awsAccountId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dataSourceId

instance Prelude.NFData DescribeDataSource where
  rnf :: DescribeDataSource -> ()
rnf DescribeDataSource' {Text
dataSourceId :: Text
awsAccountId :: Text
$sel:dataSourceId:DescribeDataSource' :: DescribeDataSource -> Text
$sel:awsAccountId:DescribeDataSource' :: DescribeDataSource -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
awsAccountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dataSourceId

instance Data.ToHeaders DescribeDataSource where
  toHeaders :: DescribeDataSource -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToPath DescribeDataSource where
  toPath :: DescribeDataSource -> ByteString
toPath DescribeDataSource' {Text
dataSourceId :: Text
awsAccountId :: Text
$sel:dataSourceId:DescribeDataSource' :: DescribeDataSource -> Text
$sel:awsAccountId:DescribeDataSource' :: DescribeDataSource -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/accounts/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
awsAccountId,
        ByteString
"/data-sources/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
dataSourceId
      ]

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

-- | /See:/ 'newDescribeDataSourceResponse' smart constructor.
data DescribeDataSourceResponse = DescribeDataSourceResponse'
  { -- | The information on the data source.
    DescribeDataSourceResponse -> Maybe DataSource
dataSource :: Prelude.Maybe DataSource,
    -- | The Amazon Web Services request ID for this operation.
    DescribeDataSourceResponse -> Maybe Text
requestId :: Prelude.Maybe Prelude.Text,
    -- | The HTTP status of the request.
    DescribeDataSourceResponse -> Int
status :: Prelude.Int
  }
  deriving (DescribeDataSourceResponse -> DescribeDataSourceResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeDataSourceResponse -> DescribeDataSourceResponse -> Bool
$c/= :: DescribeDataSourceResponse -> DescribeDataSourceResponse -> Bool
== :: DescribeDataSourceResponse -> DescribeDataSourceResponse -> Bool
$c== :: DescribeDataSourceResponse -> DescribeDataSourceResponse -> Bool
Prelude.Eq, ReadPrec [DescribeDataSourceResponse]
ReadPrec DescribeDataSourceResponse
Int -> ReadS DescribeDataSourceResponse
ReadS [DescribeDataSourceResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeDataSourceResponse]
$creadListPrec :: ReadPrec [DescribeDataSourceResponse]
readPrec :: ReadPrec DescribeDataSourceResponse
$creadPrec :: ReadPrec DescribeDataSourceResponse
readList :: ReadS [DescribeDataSourceResponse]
$creadList :: ReadS [DescribeDataSourceResponse]
readsPrec :: Int -> ReadS DescribeDataSourceResponse
$creadsPrec :: Int -> ReadS DescribeDataSourceResponse
Prelude.Read, Int -> DescribeDataSourceResponse -> ShowS
[DescribeDataSourceResponse] -> ShowS
DescribeDataSourceResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeDataSourceResponse] -> ShowS
$cshowList :: [DescribeDataSourceResponse] -> ShowS
show :: DescribeDataSourceResponse -> String
$cshow :: DescribeDataSourceResponse -> String
showsPrec :: Int -> DescribeDataSourceResponse -> ShowS
$cshowsPrec :: Int -> DescribeDataSourceResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeDataSourceResponse x -> DescribeDataSourceResponse
forall x.
DescribeDataSourceResponse -> Rep DescribeDataSourceResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeDataSourceResponse x -> DescribeDataSourceResponse
$cfrom :: forall x.
DescribeDataSourceResponse -> Rep DescribeDataSourceResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeDataSourceResponse' 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:
--
-- 'dataSource', 'describeDataSourceResponse_dataSource' - The information on the data source.
--
-- 'requestId', 'describeDataSourceResponse_requestId' - The Amazon Web Services request ID for this operation.
--
-- 'status', 'describeDataSourceResponse_status' - The HTTP status of the request.
newDescribeDataSourceResponse ::
  -- | 'status'
  Prelude.Int ->
  DescribeDataSourceResponse
newDescribeDataSourceResponse :: Int -> DescribeDataSourceResponse
newDescribeDataSourceResponse Int
pStatus_ =
  DescribeDataSourceResponse'
    { $sel:dataSource:DescribeDataSourceResponse' :: Maybe DataSource
dataSource =
        forall a. Maybe a
Prelude.Nothing,
      $sel:requestId:DescribeDataSourceResponse' :: Maybe Text
requestId = forall a. Maybe a
Prelude.Nothing,
      $sel:status:DescribeDataSourceResponse' :: Int
status = Int
pStatus_
    }

-- | The information on the data source.
describeDataSourceResponse_dataSource :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe DataSource)
describeDataSourceResponse_dataSource :: Lens' DescribeDataSourceResponse (Maybe DataSource)
describeDataSourceResponse_dataSource = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDataSourceResponse' {Maybe DataSource
dataSource :: Maybe DataSource
$sel:dataSource:DescribeDataSourceResponse' :: DescribeDataSourceResponse -> Maybe DataSource
dataSource} -> Maybe DataSource
dataSource) (\s :: DescribeDataSourceResponse
s@DescribeDataSourceResponse' {} Maybe DataSource
a -> DescribeDataSourceResponse
s {$sel:dataSource:DescribeDataSourceResponse' :: Maybe DataSource
dataSource = Maybe DataSource
a} :: DescribeDataSourceResponse)

-- | The Amazon Web Services request ID for this operation.
describeDataSourceResponse_requestId :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
describeDataSourceResponse_requestId :: Lens' DescribeDataSourceResponse (Maybe Text)
describeDataSourceResponse_requestId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDataSourceResponse' {Maybe Text
requestId :: Maybe Text
$sel:requestId:DescribeDataSourceResponse' :: DescribeDataSourceResponse -> Maybe Text
requestId} -> Maybe Text
requestId) (\s :: DescribeDataSourceResponse
s@DescribeDataSourceResponse' {} Maybe Text
a -> DescribeDataSourceResponse
s {$sel:requestId:DescribeDataSourceResponse' :: Maybe Text
requestId = Maybe Text
a} :: DescribeDataSourceResponse)

-- | The HTTP status of the request.
describeDataSourceResponse_status :: Lens.Lens' DescribeDataSourceResponse Prelude.Int
describeDataSourceResponse_status :: Lens' DescribeDataSourceResponse Int
describeDataSourceResponse_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDataSourceResponse' {Int
status :: Int
$sel:status:DescribeDataSourceResponse' :: DescribeDataSourceResponse -> Int
status} -> Int
status) (\s :: DescribeDataSourceResponse
s@DescribeDataSourceResponse' {} Int
a -> DescribeDataSourceResponse
s {$sel:status:DescribeDataSourceResponse' :: Int
status = Int
a} :: DescribeDataSourceResponse)

instance Prelude.NFData DescribeDataSourceResponse where
  rnf :: DescribeDataSourceResponse -> ()
rnf DescribeDataSourceResponse' {Int
Maybe Text
Maybe DataSource
status :: Int
requestId :: Maybe Text
dataSource :: Maybe DataSource
$sel:status:DescribeDataSourceResponse' :: DescribeDataSourceResponse -> Int
$sel:requestId:DescribeDataSourceResponse' :: DescribeDataSourceResponse -> Maybe Text
$sel:dataSource:DescribeDataSourceResponse' :: DescribeDataSourceResponse -> Maybe DataSource
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DataSource
dataSource
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
requestId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
status