{-# 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.Greengrass.ListSubscriptionDefinitionVersions
-- Copyright   : (c) 2013-2017 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 versions of a subscription definition.
module Network.AWS.Greengrass.ListSubscriptionDefinitionVersions
    (
    -- * Creating a Request
      listSubscriptionDefinitionVersions
    , ListSubscriptionDefinitionVersions
    -- * Request Lenses
    , lsdvNextToken
    , lsdvMaxResults
    , lsdvSubscriptionDefinitionId

    -- * Destructuring the Response
    , listSubscriptionDefinitionVersionsResponse
    , ListSubscriptionDefinitionVersionsResponse
    -- * Response Lenses
    , lsdvrsVersions
    , lsdvrsNextToken
    , lsdvrsResponseStatus
    ) where

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

-- | /See:/ 'listSubscriptionDefinitionVersions' smart constructor.
data ListSubscriptionDefinitionVersions = ListSubscriptionDefinitionVersions'
  { _lsdvNextToken                :: !(Maybe Text)
  , _lsdvMaxResults               :: !(Maybe Text)
  , _lsdvSubscriptionDefinitionId :: !Text
  } deriving (Eq, Read, Show, Data, Typeable, Generic)


-- | Creates a value of 'ListSubscriptionDefinitionVersions' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'lsdvNextToken' - Specifies the pagination token used when iterating through a paginated request
--
-- * 'lsdvMaxResults' - Specifies the maximum number of list results to be returned in this page
--
-- * 'lsdvSubscriptionDefinitionId' - subscription definition Id
listSubscriptionDefinitionVersions
    :: Text -- ^ 'lsdvSubscriptionDefinitionId'
    -> ListSubscriptionDefinitionVersions
listSubscriptionDefinitionVersions pSubscriptionDefinitionId_ =
  ListSubscriptionDefinitionVersions'
  { _lsdvNextToken = Nothing
  , _lsdvMaxResults = Nothing
  , _lsdvSubscriptionDefinitionId = pSubscriptionDefinitionId_
  }


-- | Specifies the pagination token used when iterating through a paginated request
lsdvNextToken :: Lens' ListSubscriptionDefinitionVersions (Maybe Text)
lsdvNextToken = lens _lsdvNextToken (\ s a -> s{_lsdvNextToken = a});

-- | Specifies the maximum number of list results to be returned in this page
lsdvMaxResults :: Lens' ListSubscriptionDefinitionVersions (Maybe Text)
lsdvMaxResults = lens _lsdvMaxResults (\ s a -> s{_lsdvMaxResults = a});

-- | subscription definition Id
lsdvSubscriptionDefinitionId :: Lens' ListSubscriptionDefinitionVersions Text
lsdvSubscriptionDefinitionId = lens _lsdvSubscriptionDefinitionId (\ s a -> s{_lsdvSubscriptionDefinitionId = a});

instance AWSRequest
           ListSubscriptionDefinitionVersions
         where
        type Rs ListSubscriptionDefinitionVersions =
             ListSubscriptionDefinitionVersionsResponse
        request = get greengrass
        response
          = receiveJSON
              (\ s h x ->
                 ListSubscriptionDefinitionVersionsResponse' <$>
                   (x .?> "Versions" .!@ mempty) <*> (x .?> "NextToken")
                     <*> (pure (fromEnum s)))

instance Hashable ListSubscriptionDefinitionVersions
         where

instance NFData ListSubscriptionDefinitionVersions
         where

instance ToHeaders ListSubscriptionDefinitionVersions
         where
        toHeaders
          = const
              (mconcat
                 ["Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])

instance ToPath ListSubscriptionDefinitionVersions
         where
        toPath ListSubscriptionDefinitionVersions'{..}
          = mconcat
              ["/greengrass/definition/subscriptions/",
               toBS _lsdvSubscriptionDefinitionId, "/versions"]

instance ToQuery ListSubscriptionDefinitionVersions
         where
        toQuery ListSubscriptionDefinitionVersions'{..}
          = mconcat
              ["NextToken" =: _lsdvNextToken,
               "MaxResults" =: _lsdvMaxResults]

-- | /See:/ 'listSubscriptionDefinitionVersionsResponse' smart constructor.
data ListSubscriptionDefinitionVersionsResponse = ListSubscriptionDefinitionVersionsResponse'
  { _lsdvrsVersions       :: !(Maybe [VersionInformation])
  , _lsdvrsNextToken      :: !(Maybe Text)
  , _lsdvrsResponseStatus :: !Int
  } deriving (Eq, Read, Show, Data, Typeable, Generic)


-- | Creates a value of 'ListSubscriptionDefinitionVersionsResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'lsdvrsVersions' - Versions
--
-- * 'lsdvrsNextToken' - The token for the next set of results, or ''null'' if there are no additional results.
--
-- * 'lsdvrsResponseStatus' - -- | The response status code.
listSubscriptionDefinitionVersionsResponse
    :: Int -- ^ 'lsdvrsResponseStatus'
    -> ListSubscriptionDefinitionVersionsResponse
listSubscriptionDefinitionVersionsResponse pResponseStatus_ =
  ListSubscriptionDefinitionVersionsResponse'
  { _lsdvrsVersions = Nothing
  , _lsdvrsNextToken = Nothing
  , _lsdvrsResponseStatus = pResponseStatus_
  }


-- | Versions
lsdvrsVersions :: Lens' ListSubscriptionDefinitionVersionsResponse [VersionInformation]
lsdvrsVersions = lens _lsdvrsVersions (\ s a -> s{_lsdvrsVersions = a}) . _Default . _Coerce;

-- | The token for the next set of results, or ''null'' if there are no additional results.
lsdvrsNextToken :: Lens' ListSubscriptionDefinitionVersionsResponse (Maybe Text)
lsdvrsNextToken = lens _lsdvrsNextToken (\ s a -> s{_lsdvrsNextToken = a});

-- | -- | The response status code.
lsdvrsResponseStatus :: Lens' ListSubscriptionDefinitionVersionsResponse Int
lsdvrsResponseStatus = lens _lsdvrsResponseStatus (\ s a -> s{_lsdvrsResponseStatus = a});

instance NFData
           ListSubscriptionDefinitionVersionsResponse
         where