{-# 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.MGN.DescribeVcenterClients
-- 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 a list of the installed vCenter clients.
--
-- This operation returns paginated results.
module Amazonka.MGN.DescribeVcenterClients
  ( -- * Creating a Request
    DescribeVcenterClients (..),
    newDescribeVcenterClients,

    -- * Request Lenses
    describeVcenterClients_maxResults,
    describeVcenterClients_nextToken,

    -- * Destructuring the Response
    DescribeVcenterClientsResponse (..),
    newDescribeVcenterClientsResponse,

    -- * Response Lenses
    describeVcenterClientsResponse_items,
    describeVcenterClientsResponse_nextToken,
    describeVcenterClientsResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeVcenterClients' smart constructor.
data DescribeVcenterClients = DescribeVcenterClients'
  { -- | Maximum results to be returned in DescribeVcenterClients.
    DescribeVcenterClients -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    -- | Next pagination token to be provided for DescribeVcenterClients.
    DescribeVcenterClients -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text
  }
  deriving (DescribeVcenterClients -> DescribeVcenterClients -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeVcenterClients -> DescribeVcenterClients -> Bool
$c/= :: DescribeVcenterClients -> DescribeVcenterClients -> Bool
== :: DescribeVcenterClients -> DescribeVcenterClients -> Bool
$c== :: DescribeVcenterClients -> DescribeVcenterClients -> Bool
Prelude.Eq, ReadPrec [DescribeVcenterClients]
ReadPrec DescribeVcenterClients
Int -> ReadS DescribeVcenterClients
ReadS [DescribeVcenterClients]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeVcenterClients]
$creadListPrec :: ReadPrec [DescribeVcenterClients]
readPrec :: ReadPrec DescribeVcenterClients
$creadPrec :: ReadPrec DescribeVcenterClients
readList :: ReadS [DescribeVcenterClients]
$creadList :: ReadS [DescribeVcenterClients]
readsPrec :: Int -> ReadS DescribeVcenterClients
$creadsPrec :: Int -> ReadS DescribeVcenterClients
Prelude.Read, Int -> DescribeVcenterClients -> ShowS
[DescribeVcenterClients] -> ShowS
DescribeVcenterClients -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeVcenterClients] -> ShowS
$cshowList :: [DescribeVcenterClients] -> ShowS
show :: DescribeVcenterClients -> String
$cshow :: DescribeVcenterClients -> String
showsPrec :: Int -> DescribeVcenterClients -> ShowS
$cshowsPrec :: Int -> DescribeVcenterClients -> ShowS
Prelude.Show, forall x. Rep DescribeVcenterClients x -> DescribeVcenterClients
forall x. DescribeVcenterClients -> Rep DescribeVcenterClients x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeVcenterClients x -> DescribeVcenterClients
$cfrom :: forall x. DescribeVcenterClients -> Rep DescribeVcenterClients x
Prelude.Generic)

-- |
-- Create a value of 'DescribeVcenterClients' 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:
--
-- 'maxResults', 'describeVcenterClients_maxResults' - Maximum results to be returned in DescribeVcenterClients.
--
-- 'nextToken', 'describeVcenterClients_nextToken' - Next pagination token to be provided for DescribeVcenterClients.
newDescribeVcenterClients ::
  DescribeVcenterClients
newDescribeVcenterClients :: DescribeVcenterClients
newDescribeVcenterClients =
  DescribeVcenterClients'
    { $sel:maxResults:DescribeVcenterClients' :: Maybe Natural
maxResults =
        forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:DescribeVcenterClients' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing
    }

-- | Maximum results to be returned in DescribeVcenterClients.
describeVcenterClients_maxResults :: Lens.Lens' DescribeVcenterClients (Prelude.Maybe Prelude.Natural)
describeVcenterClients_maxResults :: Lens' DescribeVcenterClients (Maybe Natural)
describeVcenterClients_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeVcenterClients' {Maybe Natural
maxResults :: Maybe Natural
$sel:maxResults:DescribeVcenterClients' :: DescribeVcenterClients -> Maybe Natural
maxResults} -> Maybe Natural
maxResults) (\s :: DescribeVcenterClients
s@DescribeVcenterClients' {} Maybe Natural
a -> DescribeVcenterClients
s {$sel:maxResults:DescribeVcenterClients' :: Maybe Natural
maxResults = Maybe Natural
a} :: DescribeVcenterClients)

-- | Next pagination token to be provided for DescribeVcenterClients.
describeVcenterClients_nextToken :: Lens.Lens' DescribeVcenterClients (Prelude.Maybe Prelude.Text)
describeVcenterClients_nextToken :: Lens' DescribeVcenterClients (Maybe Text)
describeVcenterClients_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeVcenterClients' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribeVcenterClients' :: DescribeVcenterClients -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribeVcenterClients
s@DescribeVcenterClients' {} Maybe Text
a -> DescribeVcenterClients
s {$sel:nextToken:DescribeVcenterClients' :: Maybe Text
nextToken = Maybe Text
a} :: DescribeVcenterClients)

instance Core.AWSPager DescribeVcenterClients where
  page :: DescribeVcenterClients
-> AWSResponse DescribeVcenterClients
-> Maybe DescribeVcenterClients
page DescribeVcenterClients
rq AWSResponse DescribeVcenterClients
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeVcenterClients
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeVcenterClientsResponse (Maybe Text)
describeVcenterClientsResponse_nextToken
            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 DescribeVcenterClients
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeVcenterClientsResponse (Maybe [VcenterClient])
describeVcenterClientsResponse_items
            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.$ DescribeVcenterClients
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' DescribeVcenterClients (Maybe Text)
describeVcenterClients_nextToken
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse DescribeVcenterClients
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeVcenterClientsResponse (Maybe Text)
describeVcenterClientsResponse_nextToken
          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 DescribeVcenterClients where
  type
    AWSResponse DescribeVcenterClients =
      DescribeVcenterClientsResponse
  request :: (Service -> Service)
-> DescribeVcenterClients -> Request DescribeVcenterClients
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 DescribeVcenterClients
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeVcenterClients)))
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 [VcenterClient]
-> Maybe Text -> Int -> DescribeVcenterClientsResponse
DescribeVcenterClientsResponse'
            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
"items" 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.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"nextToken")
            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 DescribeVcenterClients where
  hashWithSalt :: Int -> DescribeVcenterClients -> Int
hashWithSalt Int
_salt DescribeVcenterClients' {Maybe Natural
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:nextToken:DescribeVcenterClients' :: DescribeVcenterClients -> Maybe Text
$sel:maxResults:DescribeVcenterClients' :: DescribeVcenterClients -> Maybe Natural
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maxResults
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken

instance Prelude.NFData DescribeVcenterClients where
  rnf :: DescribeVcenterClients -> ()
rnf DescribeVcenterClients' {Maybe Natural
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:nextToken:DescribeVcenterClients' :: DescribeVcenterClients -> Maybe Text
$sel:maxResults:DescribeVcenterClients' :: DescribeVcenterClients -> Maybe Natural
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken

instance Data.ToHeaders DescribeVcenterClients where
  toHeaders :: DescribeVcenterClients -> 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.1" ::
                          Prelude.ByteString
                      )
          ]
      )

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

instance Data.ToQuery DescribeVcenterClients where
  toQuery :: DescribeVcenterClients -> QueryString
toQuery DescribeVcenterClients' {Maybe Natural
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:nextToken:DescribeVcenterClients' :: DescribeVcenterClients -> Maybe Text
$sel:maxResults:DescribeVcenterClients' :: DescribeVcenterClients -> Maybe Natural
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"maxResults" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Natural
maxResults,
        ByteString
"nextToken" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
nextToken
      ]

-- | /See:/ 'newDescribeVcenterClientsResponse' smart constructor.
data DescribeVcenterClientsResponse = DescribeVcenterClientsResponse'
  { -- | List of items returned by DescribeVcenterClients.
    DescribeVcenterClientsResponse -> Maybe [VcenterClient]
items :: Prelude.Maybe [VcenterClient],
    -- | Next pagination token returned from DescribeVcenterClients.
    DescribeVcenterClientsResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    DescribeVcenterClientsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeVcenterClientsResponse
-> DescribeVcenterClientsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeVcenterClientsResponse
-> DescribeVcenterClientsResponse -> Bool
$c/= :: DescribeVcenterClientsResponse
-> DescribeVcenterClientsResponse -> Bool
== :: DescribeVcenterClientsResponse
-> DescribeVcenterClientsResponse -> Bool
$c== :: DescribeVcenterClientsResponse
-> DescribeVcenterClientsResponse -> Bool
Prelude.Eq, Int -> DescribeVcenterClientsResponse -> ShowS
[DescribeVcenterClientsResponse] -> ShowS
DescribeVcenterClientsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeVcenterClientsResponse] -> ShowS
$cshowList :: [DescribeVcenterClientsResponse] -> ShowS
show :: DescribeVcenterClientsResponse -> String
$cshow :: DescribeVcenterClientsResponse -> String
showsPrec :: Int -> DescribeVcenterClientsResponse -> ShowS
$cshowsPrec :: Int -> DescribeVcenterClientsResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeVcenterClientsResponse x
-> DescribeVcenterClientsResponse
forall x.
DescribeVcenterClientsResponse
-> Rep DescribeVcenterClientsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeVcenterClientsResponse x
-> DescribeVcenterClientsResponse
$cfrom :: forall x.
DescribeVcenterClientsResponse
-> Rep DescribeVcenterClientsResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeVcenterClientsResponse' 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:
--
-- 'items', 'describeVcenterClientsResponse_items' - List of items returned by DescribeVcenterClients.
--
-- 'nextToken', 'describeVcenterClientsResponse_nextToken' - Next pagination token returned from DescribeVcenterClients.
--
-- 'httpStatus', 'describeVcenterClientsResponse_httpStatus' - The response's http status code.
newDescribeVcenterClientsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeVcenterClientsResponse
newDescribeVcenterClientsResponse :: Int -> DescribeVcenterClientsResponse
newDescribeVcenterClientsResponse Int
pHttpStatus_ =
  DescribeVcenterClientsResponse'
    { $sel:items:DescribeVcenterClientsResponse' :: Maybe [VcenterClient]
items =
        forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:DescribeVcenterClientsResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeVcenterClientsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | List of items returned by DescribeVcenterClients.
describeVcenterClientsResponse_items :: Lens.Lens' DescribeVcenterClientsResponse (Prelude.Maybe [VcenterClient])
describeVcenterClientsResponse_items :: Lens' DescribeVcenterClientsResponse (Maybe [VcenterClient])
describeVcenterClientsResponse_items = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeVcenterClientsResponse' {Maybe [VcenterClient]
items :: Maybe [VcenterClient]
$sel:items:DescribeVcenterClientsResponse' :: DescribeVcenterClientsResponse -> Maybe [VcenterClient]
items} -> Maybe [VcenterClient]
items) (\s :: DescribeVcenterClientsResponse
s@DescribeVcenterClientsResponse' {} Maybe [VcenterClient]
a -> DescribeVcenterClientsResponse
s {$sel:items:DescribeVcenterClientsResponse' :: Maybe [VcenterClient]
items = Maybe [VcenterClient]
a} :: DescribeVcenterClientsResponse) 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

-- | Next pagination token returned from DescribeVcenterClients.
describeVcenterClientsResponse_nextToken :: Lens.Lens' DescribeVcenterClientsResponse (Prelude.Maybe Prelude.Text)
describeVcenterClientsResponse_nextToken :: Lens' DescribeVcenterClientsResponse (Maybe Text)
describeVcenterClientsResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeVcenterClientsResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribeVcenterClientsResponse' :: DescribeVcenterClientsResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribeVcenterClientsResponse
s@DescribeVcenterClientsResponse' {} Maybe Text
a -> DescribeVcenterClientsResponse
s {$sel:nextToken:DescribeVcenterClientsResponse' :: Maybe Text
nextToken = Maybe Text
a} :: DescribeVcenterClientsResponse)

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

instance
  Prelude.NFData
    DescribeVcenterClientsResponse
  where
  rnf :: DescribeVcenterClientsResponse -> ()
rnf DescribeVcenterClientsResponse' {Int
Maybe [VcenterClient]
Maybe Text
httpStatus :: Int
nextToken :: Maybe Text
items :: Maybe [VcenterClient]
$sel:httpStatus:DescribeVcenterClientsResponse' :: DescribeVcenterClientsResponse -> Int
$sel:nextToken:DescribeVcenterClientsResponse' :: DescribeVcenterClientsResponse -> Maybe Text
$sel:items:DescribeVcenterClientsResponse' :: DescribeVcenterClientsResponse -> Maybe [VcenterClient]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [VcenterClient]
items
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus