{-# 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.Lightsail.GetRelationalDatabases
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns information about all of your databases in Amazon Lightsail.
--
-- This operation returns paginated results.
module Amazonka.Lightsail.GetRelationalDatabases
  ( -- * Creating a Request
    GetRelationalDatabases (..),
    newGetRelationalDatabases,

    -- * Request Lenses
    getRelationalDatabases_pageToken,

    -- * Destructuring the Response
    GetRelationalDatabasesResponse (..),
    newGetRelationalDatabasesResponse,

    -- * Response Lenses
    getRelationalDatabasesResponse_nextPageToken,
    getRelationalDatabasesResponse_relationalDatabases,
    getRelationalDatabasesResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetRelationalDatabases' smart constructor.
data GetRelationalDatabases = GetRelationalDatabases'
  { -- | The token to advance to the next page of results from your request.
    --
    -- To get a page token, perform an initial @GetRelationalDatabases@
    -- request. If your results are paginated, the response will return a next
    -- page token that you can specify as the page token in a subsequent
    -- request.
    GetRelationalDatabases -> Maybe Text
pageToken :: Prelude.Maybe Prelude.Text
  }
  deriving (GetRelationalDatabases -> GetRelationalDatabases -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetRelationalDatabases -> GetRelationalDatabases -> Bool
$c/= :: GetRelationalDatabases -> GetRelationalDatabases -> Bool
== :: GetRelationalDatabases -> GetRelationalDatabases -> Bool
$c== :: GetRelationalDatabases -> GetRelationalDatabases -> Bool
Prelude.Eq, ReadPrec [GetRelationalDatabases]
ReadPrec GetRelationalDatabases
Int -> ReadS GetRelationalDatabases
ReadS [GetRelationalDatabases]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetRelationalDatabases]
$creadListPrec :: ReadPrec [GetRelationalDatabases]
readPrec :: ReadPrec GetRelationalDatabases
$creadPrec :: ReadPrec GetRelationalDatabases
readList :: ReadS [GetRelationalDatabases]
$creadList :: ReadS [GetRelationalDatabases]
readsPrec :: Int -> ReadS GetRelationalDatabases
$creadsPrec :: Int -> ReadS GetRelationalDatabases
Prelude.Read, Int -> GetRelationalDatabases -> ShowS
[GetRelationalDatabases] -> ShowS
GetRelationalDatabases -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetRelationalDatabases] -> ShowS
$cshowList :: [GetRelationalDatabases] -> ShowS
show :: GetRelationalDatabases -> String
$cshow :: GetRelationalDatabases -> String
showsPrec :: Int -> GetRelationalDatabases -> ShowS
$cshowsPrec :: Int -> GetRelationalDatabases -> ShowS
Prelude.Show, forall x. Rep GetRelationalDatabases x -> GetRelationalDatabases
forall x. GetRelationalDatabases -> Rep GetRelationalDatabases x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetRelationalDatabases x -> GetRelationalDatabases
$cfrom :: forall x. GetRelationalDatabases -> Rep GetRelationalDatabases x
Prelude.Generic)

-- |
-- Create a value of 'GetRelationalDatabases' 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:
--
-- 'pageToken', 'getRelationalDatabases_pageToken' - The token to advance to the next page of results from your request.
--
-- To get a page token, perform an initial @GetRelationalDatabases@
-- request. If your results are paginated, the response will return a next
-- page token that you can specify as the page token in a subsequent
-- request.
newGetRelationalDatabases ::
  GetRelationalDatabases
newGetRelationalDatabases :: GetRelationalDatabases
newGetRelationalDatabases =
  GetRelationalDatabases'
    { $sel:pageToken:GetRelationalDatabases' :: Maybe Text
pageToken =
        forall a. Maybe a
Prelude.Nothing
    }

-- | The token to advance to the next page of results from your request.
--
-- To get a page token, perform an initial @GetRelationalDatabases@
-- request. If your results are paginated, the response will return a next
-- page token that you can specify as the page token in a subsequent
-- request.
getRelationalDatabases_pageToken :: Lens.Lens' GetRelationalDatabases (Prelude.Maybe Prelude.Text)
getRelationalDatabases_pageToken :: Lens' GetRelationalDatabases (Maybe Text)
getRelationalDatabases_pageToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabases' {Maybe Text
pageToken :: Maybe Text
$sel:pageToken:GetRelationalDatabases' :: GetRelationalDatabases -> Maybe Text
pageToken} -> Maybe Text
pageToken) (\s :: GetRelationalDatabases
s@GetRelationalDatabases' {} Maybe Text
a -> GetRelationalDatabases
s {$sel:pageToken:GetRelationalDatabases' :: Maybe Text
pageToken = Maybe Text
a} :: GetRelationalDatabases)

instance Core.AWSPager GetRelationalDatabases where
  page :: GetRelationalDatabases
-> AWSResponse GetRelationalDatabases
-> Maybe GetRelationalDatabases
page GetRelationalDatabases
rq AWSResponse GetRelationalDatabases
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse GetRelationalDatabases
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' GetRelationalDatabasesResponse (Maybe Text)
getRelationalDatabasesResponse_nextPageToken
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse GetRelationalDatabases
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' GetRelationalDatabasesResponse (Maybe [RelationalDatabase])
getRelationalDatabasesResponse_relationalDatabases
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
        forall a. a -> Maybe a
Prelude.Just
          forall a b. (a -> b) -> a -> b
Prelude.$ GetRelationalDatabases
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' GetRelationalDatabases (Maybe Text)
getRelationalDatabases_pageToken
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse GetRelationalDatabases
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' GetRelationalDatabasesResponse (Maybe Text)
getRelationalDatabasesResponse_nextPageToken
          forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance Core.AWSRequest GetRelationalDatabases where
  type
    AWSResponse GetRelationalDatabases =
      GetRelationalDatabasesResponse
  request :: (Service -> Service)
-> GetRelationalDatabases -> Request GetRelationalDatabases
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 GetRelationalDatabases
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetRelationalDatabases)))
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 Text
-> Maybe [RelationalDatabase]
-> Int
-> GetRelationalDatabasesResponse
GetRelationalDatabasesResponse'
            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
"nextPageToken")
            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
"relationalDatabases"
                            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 GetRelationalDatabases where
  hashWithSalt :: Int -> GetRelationalDatabases -> Int
hashWithSalt Int
_salt GetRelationalDatabases' {Maybe Text
pageToken :: Maybe Text
$sel:pageToken:GetRelationalDatabases' :: GetRelationalDatabases -> Maybe Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
pageToken

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

instance Data.ToHeaders GetRelationalDatabases where
  toHeaders :: GetRelationalDatabases -> 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
"Lightsail_20161128.GetRelationalDatabases" ::
                          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 GetRelationalDatabases where
  toJSON :: GetRelationalDatabases -> Value
toJSON GetRelationalDatabases' {Maybe Text
pageToken :: Maybe Text
$sel:pageToken:GetRelationalDatabases' :: GetRelationalDatabases -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [(Key
"pageToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
pageToken]
      )

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

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

-- | /See:/ 'newGetRelationalDatabasesResponse' smart constructor.
data GetRelationalDatabasesResponse = GetRelationalDatabasesResponse'
  { -- | The token to advance to the next page of results from your request.
    --
    -- A next page token is not returned if there are no more results to
    -- display.
    --
    -- To get the next page of results, perform another
    -- @GetRelationalDatabases@ request and specify the next page token using
    -- the @pageToken@ parameter.
    GetRelationalDatabasesResponse -> Maybe Text
nextPageToken :: Prelude.Maybe Prelude.Text,
    -- | An object describing the result of your get relational databases
    -- request.
    GetRelationalDatabasesResponse -> Maybe [RelationalDatabase]
relationalDatabases :: Prelude.Maybe [RelationalDatabase],
    -- | The response's http status code.
    GetRelationalDatabasesResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetRelationalDatabasesResponse
-> GetRelationalDatabasesResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetRelationalDatabasesResponse
-> GetRelationalDatabasesResponse -> Bool
$c/= :: GetRelationalDatabasesResponse
-> GetRelationalDatabasesResponse -> Bool
== :: GetRelationalDatabasesResponse
-> GetRelationalDatabasesResponse -> Bool
$c== :: GetRelationalDatabasesResponse
-> GetRelationalDatabasesResponse -> Bool
Prelude.Eq, ReadPrec [GetRelationalDatabasesResponse]
ReadPrec GetRelationalDatabasesResponse
Int -> ReadS GetRelationalDatabasesResponse
ReadS [GetRelationalDatabasesResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetRelationalDatabasesResponse]
$creadListPrec :: ReadPrec [GetRelationalDatabasesResponse]
readPrec :: ReadPrec GetRelationalDatabasesResponse
$creadPrec :: ReadPrec GetRelationalDatabasesResponse
readList :: ReadS [GetRelationalDatabasesResponse]
$creadList :: ReadS [GetRelationalDatabasesResponse]
readsPrec :: Int -> ReadS GetRelationalDatabasesResponse
$creadsPrec :: Int -> ReadS GetRelationalDatabasesResponse
Prelude.Read, Int -> GetRelationalDatabasesResponse -> ShowS
[GetRelationalDatabasesResponse] -> ShowS
GetRelationalDatabasesResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetRelationalDatabasesResponse] -> ShowS
$cshowList :: [GetRelationalDatabasesResponse] -> ShowS
show :: GetRelationalDatabasesResponse -> String
$cshow :: GetRelationalDatabasesResponse -> String
showsPrec :: Int -> GetRelationalDatabasesResponse -> ShowS
$cshowsPrec :: Int -> GetRelationalDatabasesResponse -> ShowS
Prelude.Show, forall x.
Rep GetRelationalDatabasesResponse x
-> GetRelationalDatabasesResponse
forall x.
GetRelationalDatabasesResponse
-> Rep GetRelationalDatabasesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetRelationalDatabasesResponse x
-> GetRelationalDatabasesResponse
$cfrom :: forall x.
GetRelationalDatabasesResponse
-> Rep GetRelationalDatabasesResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetRelationalDatabasesResponse' 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:
--
-- 'nextPageToken', 'getRelationalDatabasesResponse_nextPageToken' - The token to advance to the next page of results from your request.
--
-- A next page token is not returned if there are no more results to
-- display.
--
-- To get the next page of results, perform another
-- @GetRelationalDatabases@ request and specify the next page token using
-- the @pageToken@ parameter.
--
-- 'relationalDatabases', 'getRelationalDatabasesResponse_relationalDatabases' - An object describing the result of your get relational databases
-- request.
--
-- 'httpStatus', 'getRelationalDatabasesResponse_httpStatus' - The response's http status code.
newGetRelationalDatabasesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetRelationalDatabasesResponse
newGetRelationalDatabasesResponse :: Int -> GetRelationalDatabasesResponse
newGetRelationalDatabasesResponse Int
pHttpStatus_ =
  GetRelationalDatabasesResponse'
    { $sel:nextPageToken:GetRelationalDatabasesResponse' :: Maybe Text
nextPageToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:relationalDatabases:GetRelationalDatabasesResponse' :: Maybe [RelationalDatabase]
relationalDatabases = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetRelationalDatabasesResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The token to advance to the next page of results from your request.
--
-- A next page token is not returned if there are no more results to
-- display.
--
-- To get the next page of results, perform another
-- @GetRelationalDatabases@ request and specify the next page token using
-- the @pageToken@ parameter.
getRelationalDatabasesResponse_nextPageToken :: Lens.Lens' GetRelationalDatabasesResponse (Prelude.Maybe Prelude.Text)
getRelationalDatabasesResponse_nextPageToken :: Lens' GetRelationalDatabasesResponse (Maybe Text)
getRelationalDatabasesResponse_nextPageToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabasesResponse' {Maybe Text
nextPageToken :: Maybe Text
$sel:nextPageToken:GetRelationalDatabasesResponse' :: GetRelationalDatabasesResponse -> Maybe Text
nextPageToken} -> Maybe Text
nextPageToken) (\s :: GetRelationalDatabasesResponse
s@GetRelationalDatabasesResponse' {} Maybe Text
a -> GetRelationalDatabasesResponse
s {$sel:nextPageToken:GetRelationalDatabasesResponse' :: Maybe Text
nextPageToken = Maybe Text
a} :: GetRelationalDatabasesResponse)

-- | An object describing the result of your get relational databases
-- request.
getRelationalDatabasesResponse_relationalDatabases :: Lens.Lens' GetRelationalDatabasesResponse (Prelude.Maybe [RelationalDatabase])
getRelationalDatabasesResponse_relationalDatabases :: Lens' GetRelationalDatabasesResponse (Maybe [RelationalDatabase])
getRelationalDatabasesResponse_relationalDatabases = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabasesResponse' {Maybe [RelationalDatabase]
relationalDatabases :: Maybe [RelationalDatabase]
$sel:relationalDatabases:GetRelationalDatabasesResponse' :: GetRelationalDatabasesResponse -> Maybe [RelationalDatabase]
relationalDatabases} -> Maybe [RelationalDatabase]
relationalDatabases) (\s :: GetRelationalDatabasesResponse
s@GetRelationalDatabasesResponse' {} Maybe [RelationalDatabase]
a -> GetRelationalDatabasesResponse
s {$sel:relationalDatabases:GetRelationalDatabasesResponse' :: Maybe [RelationalDatabase]
relationalDatabases = Maybe [RelationalDatabase]
a} :: GetRelationalDatabasesResponse) 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.
getRelationalDatabasesResponse_httpStatus :: Lens.Lens' GetRelationalDatabasesResponse Prelude.Int
getRelationalDatabasesResponse_httpStatus :: Lens' GetRelationalDatabasesResponse Int
getRelationalDatabasesResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetRelationalDatabasesResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetRelationalDatabasesResponse' :: GetRelationalDatabasesResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetRelationalDatabasesResponse
s@GetRelationalDatabasesResponse' {} Int
a -> GetRelationalDatabasesResponse
s {$sel:httpStatus:GetRelationalDatabasesResponse' :: Int
httpStatus = Int
a} :: GetRelationalDatabasesResponse)

instance
  Prelude.NFData
    GetRelationalDatabasesResponse
  where
  rnf :: GetRelationalDatabasesResponse -> ()
rnf GetRelationalDatabasesResponse' {Int
Maybe [RelationalDatabase]
Maybe Text
httpStatus :: Int
relationalDatabases :: Maybe [RelationalDatabase]
nextPageToken :: Maybe Text
$sel:httpStatus:GetRelationalDatabasesResponse' :: GetRelationalDatabasesResponse -> Int
$sel:relationalDatabases:GetRelationalDatabasesResponse' :: GetRelationalDatabasesResponse -> Maybe [RelationalDatabase]
$sel:nextPageToken:GetRelationalDatabasesResponse' :: GetRelationalDatabasesResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextPageToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [RelationalDatabase]
relationalDatabases
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus