{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE OverloadedStrings  #-}
{-# LANGUAGE RecordWildCards    #-}
{-# LANGUAGE TypeFamilies       #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Network.AWS.CognitoIdentityProvider.ListResourceServers
-- Copyright   : (c) 2013-2018 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Lists the resource servers for a user pool.
--
--
module Network.AWS.CognitoIdentityProvider.ListResourceServers
    (
    -- * Creating a Request
      listResourceServers
    , ListResourceServers
    -- * Request Lenses
    , lrsNextToken
    , lrsMaxResults
    , lrsUserPoolId

    -- * Destructuring the Response
    , listResourceServersResponse
    , ListResourceServersResponse
    -- * Response Lenses
    , lrsrsNextToken
    , lrsrsResponseStatus
    , lrsrsResourceServers
    ) where

import Network.AWS.CognitoIdentityProvider.Types
import Network.AWS.CognitoIdentityProvider.Types.Product
import Network.AWS.Lens
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response

-- | /See:/ 'listResourceServers' smart constructor.
data ListResourceServers = ListResourceServers'
  { _lrsNextToken  :: !(Maybe Text)
  , _lrsMaxResults :: !(Maybe Nat)
  , _lrsUserPoolId :: !Text
  } deriving (Eq, Read, Show, Data, Typeable, Generic)


-- | Creates a value of 'ListResourceServers' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'lrsNextToken' - A pagination token.
--
-- * 'lrsMaxResults' - The maximum number of resource servers to return.
--
-- * 'lrsUserPoolId' - The user pool ID for the user pool.
listResourceServers
    :: Text -- ^ 'lrsUserPoolId'
    -> ListResourceServers
listResourceServers pUserPoolId_ =
  ListResourceServers'
    { _lrsNextToken = Nothing
    , _lrsMaxResults = Nothing
    , _lrsUserPoolId = pUserPoolId_
    }


-- | A pagination token.
lrsNextToken :: Lens' ListResourceServers (Maybe Text)
lrsNextToken = lens _lrsNextToken (\ s a -> s{_lrsNextToken = a})

-- | The maximum number of resource servers to return.
lrsMaxResults :: Lens' ListResourceServers (Maybe Natural)
lrsMaxResults = lens _lrsMaxResults (\ s a -> s{_lrsMaxResults = a}) . mapping _Nat

-- | The user pool ID for the user pool.
lrsUserPoolId :: Lens' ListResourceServers Text
lrsUserPoolId = lens _lrsUserPoolId (\ s a -> s{_lrsUserPoolId = a})

instance AWSRequest ListResourceServers where
        type Rs ListResourceServers =
             ListResourceServersResponse
        request = postJSON cognitoIdentityProvider
        response
          = receiveJSON
              (\ s h x ->
                 ListResourceServersResponse' <$>
                   (x .?> "NextToken") <*> (pure (fromEnum s)) <*>
                     (x .?> "ResourceServers" .!@ mempty))

instance Hashable ListResourceServers where

instance NFData ListResourceServers where

instance ToHeaders ListResourceServers where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("AWSCognitoIdentityProviderService.ListResourceServers"
                       :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])

instance ToJSON ListResourceServers where
        toJSON ListResourceServers'{..}
          = object
              (catMaybes
                 [("NextToken" .=) <$> _lrsNextToken,
                  ("MaxResults" .=) <$> _lrsMaxResults,
                  Just ("UserPoolId" .= _lrsUserPoolId)])

instance ToPath ListResourceServers where
        toPath = const "/"

instance ToQuery ListResourceServers where
        toQuery = const mempty

-- | /See:/ 'listResourceServersResponse' smart constructor.
data ListResourceServersResponse = ListResourceServersResponse'
  { _lrsrsNextToken       :: !(Maybe Text)
  , _lrsrsResponseStatus  :: !Int
  , _lrsrsResourceServers :: ![ResourceServerType]
  } deriving (Eq, Read, Show, Data, Typeable, Generic)


-- | Creates a value of 'ListResourceServersResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'lrsrsNextToken' - A pagination token.
--
-- * 'lrsrsResponseStatus' - -- | The response status code.
--
-- * 'lrsrsResourceServers' - The resource servers.
listResourceServersResponse
    :: Int -- ^ 'lrsrsResponseStatus'
    -> ListResourceServersResponse
listResourceServersResponse pResponseStatus_ =
  ListResourceServersResponse'
    { _lrsrsNextToken = Nothing
    , _lrsrsResponseStatus = pResponseStatus_
    , _lrsrsResourceServers = mempty
    }


-- | A pagination token.
lrsrsNextToken :: Lens' ListResourceServersResponse (Maybe Text)
lrsrsNextToken = lens _lrsrsNextToken (\ s a -> s{_lrsrsNextToken = a})

-- | -- | The response status code.
lrsrsResponseStatus :: Lens' ListResourceServersResponse Int
lrsrsResponseStatus = lens _lrsrsResponseStatus (\ s a -> s{_lrsrsResponseStatus = a})

-- | The resource servers.
lrsrsResourceServers :: Lens' ListResourceServersResponse [ResourceServerType]
lrsrsResourceServers = lens _lrsrsResourceServers (\ s a -> s{_lrsrsResourceServers = a}) . _Coerce

instance NFData ListResourceServersResponse where