{-# 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.CloudFront.ListCloudFrontOriginAccessIdentities
-- Copyright   : (c) 2013-2016 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Lists origin access identities.
--
--
--
-- This operation returns paginated results.
module Network.AWS.CloudFront.ListCloudFrontOriginAccessIdentities
    (
    -- * Creating a Request
      listCloudFrontOriginAccessIdentities
    , ListCloudFrontOriginAccessIdentities
    -- * Request Lenses
    , lcfoaiMarker
    , lcfoaiMaxItems

    -- * Destructuring the Response
    , listCloudFrontOriginAccessIdentitiesResponse
    , ListCloudFrontOriginAccessIdentitiesResponse
    -- * Response Lenses
    , lcfoairsResponseStatus
    , lcfoairsCloudFrontOriginAccessIdentityList
    ) where

import           Network.AWS.CloudFront.Types
import           Network.AWS.CloudFront.Types.Product
import           Network.AWS.Lens
import           Network.AWS.Pager
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response

-- | The request to list origin access identities.
--
--
--
-- /See:/ 'listCloudFrontOriginAccessIdentities' smart constructor.
data ListCloudFrontOriginAccessIdentities = ListCloudFrontOriginAccessIdentities'
    { _lcfoaiMarker   :: !(Maybe Text)
    , _lcfoaiMaxItems :: !(Maybe Text)
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'ListCloudFrontOriginAccessIdentities' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'lcfoaiMarker' - Use this when paginating results to indicate where to begin in your list of origin access identities. The results include identities in the list that occur after the marker. To get the next page of results, set the @Marker@ to the value of the @NextMarker@ from the current page's response (which is also the ID of the last identity on that page).
--
-- * 'lcfoaiMaxItems' - The maximum number of origin access identities you want in the response body.
listCloudFrontOriginAccessIdentities
    :: ListCloudFrontOriginAccessIdentities
listCloudFrontOriginAccessIdentities =
    ListCloudFrontOriginAccessIdentities'
    { _lcfoaiMarker = Nothing
    , _lcfoaiMaxItems = Nothing
    }

-- | Use this when paginating results to indicate where to begin in your list of origin access identities. The results include identities in the list that occur after the marker. To get the next page of results, set the @Marker@ to the value of the @NextMarker@ from the current page's response (which is also the ID of the last identity on that page).
lcfoaiMarker :: Lens' ListCloudFrontOriginAccessIdentities (Maybe Text)
lcfoaiMarker = lens _lcfoaiMarker (\ s a -> s{_lcfoaiMarker = a});

-- | The maximum number of origin access identities you want in the response body.
lcfoaiMaxItems :: Lens' ListCloudFrontOriginAccessIdentities (Maybe Text)
lcfoaiMaxItems = lens _lcfoaiMaxItems (\ s a -> s{_lcfoaiMaxItems = a});

instance AWSPager
         ListCloudFrontOriginAccessIdentities where
        page rq rs
          | stop
              (rs ^.
                 lcfoairsCloudFrontOriginAccessIdentityList .
                   cfoailIsTruncated)
            = Nothing
          | isNothing
              (rs ^?
                 lcfoairsCloudFrontOriginAccessIdentityList .
                   cfoailNextMarker . _Just)
            = Nothing
          | otherwise =
            Just $ rq &
              lcfoaiMarker .~
                rs ^?
                  lcfoairsCloudFrontOriginAccessIdentityList .
                    cfoailNextMarker . _Just

instance AWSRequest
         ListCloudFrontOriginAccessIdentities where
        type Rs ListCloudFrontOriginAccessIdentities =
             ListCloudFrontOriginAccessIdentitiesResponse
        request = get cloudFront
        response
          = receiveXML
              (\ s h x ->
                 ListCloudFrontOriginAccessIdentitiesResponse' <$>
                   (pure (fromEnum s)) <*> (parseXML x))

instance Hashable
         ListCloudFrontOriginAccessIdentities

instance NFData ListCloudFrontOriginAccessIdentities

instance ToHeaders
         ListCloudFrontOriginAccessIdentities where
        toHeaders = const mempty

instance ToPath ListCloudFrontOriginAccessIdentities
         where
        toPath
          = const
              "/2016-09-29/origin-access-identity/cloudfront"

instance ToQuery ListCloudFrontOriginAccessIdentities
         where
        toQuery ListCloudFrontOriginAccessIdentities'{..}
          = mconcat
              ["Marker" =: _lcfoaiMarker,
               "MaxItems" =: _lcfoaiMaxItems]

-- | The returned result of the corresponding request.
--
--
--
-- /See:/ 'listCloudFrontOriginAccessIdentitiesResponse' smart constructor.
data ListCloudFrontOriginAccessIdentitiesResponse = ListCloudFrontOriginAccessIdentitiesResponse'
    { _lcfoairsResponseStatus                     :: !Int
    , _lcfoairsCloudFrontOriginAccessIdentityList :: !CloudFrontOriginAccessIdentityList
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'ListCloudFrontOriginAccessIdentitiesResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'lcfoairsResponseStatus' - -- | The response status code.
--
-- * 'lcfoairsCloudFrontOriginAccessIdentityList' - The @CloudFrontOriginAccessIdentityList@ type.
listCloudFrontOriginAccessIdentitiesResponse
    :: Int -- ^ 'lcfoairsResponseStatus'
    -> CloudFrontOriginAccessIdentityList -- ^ 'lcfoairsCloudFrontOriginAccessIdentityList'
    -> ListCloudFrontOriginAccessIdentitiesResponse
listCloudFrontOriginAccessIdentitiesResponse pResponseStatus_ pCloudFrontOriginAccessIdentityList_ =
    ListCloudFrontOriginAccessIdentitiesResponse'
    { _lcfoairsResponseStatus = pResponseStatus_
    , _lcfoairsCloudFrontOriginAccessIdentityList = pCloudFrontOriginAccessIdentityList_
    }

-- | -- | The response status code.
lcfoairsResponseStatus :: Lens' ListCloudFrontOriginAccessIdentitiesResponse Int
lcfoairsResponseStatus = lens _lcfoairsResponseStatus (\ s a -> s{_lcfoairsResponseStatus = a});

-- | The @CloudFrontOriginAccessIdentityList@ type.
lcfoairsCloudFrontOriginAccessIdentityList :: Lens' ListCloudFrontOriginAccessIdentitiesResponse CloudFrontOriginAccessIdentityList
lcfoairsCloudFrontOriginAccessIdentityList = lens _lcfoairsCloudFrontOriginAccessIdentityList (\ s a -> s{_lcfoairsCloudFrontOriginAccessIdentityList = a});

instance NFData
         ListCloudFrontOriginAccessIdentitiesResponse