{-# 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.Inspector.ListAssessmentRuns
-- 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 the assessment runs that correspond to the assessment templates
-- that are specified by the ARNs of the assessment templates.
module Network.AWS.Inspector.ListAssessmentRuns
    (
    -- * Creating a Request
      listAssessmentRuns
    , ListAssessmentRuns
    -- * Request Lenses
    , larNextToken
    , larFilter
    , larAssessmentTemplateARNs
    , larMaxResults

    -- * Destructuring the Response
    , listAssessmentRunsResponse
    , ListAssessmentRunsResponse
    -- * Response Lenses
    , larrsNextToken
    , larrsResponseStatus
    , larrsAssessmentRunARNs
    ) where

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

-- | /See:/ 'listAssessmentRuns' smart constructor.
data ListAssessmentRuns = ListAssessmentRuns'
    { _larNextToken              :: !(Maybe Text)
    , _larFilter                 :: !(Maybe AssessmentRunFilter)
    , _larAssessmentTemplateARNs :: !(Maybe [Text])
    , _larMaxResults             :: !(Maybe Int)
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'ListAssessmentRuns' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'larNextToken'
--
-- * 'larFilter'
--
-- * 'larAssessmentTemplateARNs'
--
-- * 'larMaxResults'
listAssessmentRuns
    :: ListAssessmentRuns
listAssessmentRuns =
    ListAssessmentRuns'
    { _larNextToken = Nothing
    , _larFilter = Nothing
    , _larAssessmentTemplateARNs = Nothing
    , _larMaxResults = Nothing
    }

-- | You can use this parameter when paginating results. Set the value of
-- this parameter to null on your first call to the __ListAssessmentRuns__
-- action. Subsequent calls to the action fill __nextToken__ in the request
-- with the value of __NextToken__ from the previous response to continue
-- listing data.
larNextToken :: Lens' ListAssessmentRuns (Maybe Text)
larNextToken = lens _larNextToken (\ s a -> s{_larNextToken = a});

-- | You can use this parameter to specify a subset of data to be included in
-- the action\'s response.
--
-- For a record to match a filter, all specified filter attributes must
-- match. When multiple values are specified for a filter attribute, any of
-- the values can match.
larFilter :: Lens' ListAssessmentRuns (Maybe AssessmentRunFilter)
larFilter = lens _larFilter (\ s a -> s{_larFilter = a});

-- | The ARNs that specify the assessment templates whose assessment runs you
-- want to list.
larAssessmentTemplateARNs :: Lens' ListAssessmentRuns [Text]
larAssessmentTemplateARNs = lens _larAssessmentTemplateARNs (\ s a -> s{_larAssessmentTemplateARNs = a}) . _Default . _Coerce;

-- | You can use this parameter to indicate the maximum number of items that
-- you want in the response. The default value is 10. The maximum value is
-- 500.
larMaxResults :: Lens' ListAssessmentRuns (Maybe Int)
larMaxResults = lens _larMaxResults (\ s a -> s{_larMaxResults = a});

instance AWSRequest ListAssessmentRuns where
        type Rs ListAssessmentRuns =
             ListAssessmentRunsResponse
        request = postJSON inspector
        response
          = receiveJSON
              (\ s h x ->
                 ListAssessmentRunsResponse' <$>
                   (x .?> "nextToken") <*> (pure (fromEnum s)) <*>
                     (x .?> "assessmentRunArns" .!@ mempty))

instance Hashable ListAssessmentRuns

instance NFData ListAssessmentRuns

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

instance ToJSON ListAssessmentRuns where
        toJSON ListAssessmentRuns'{..}
          = object
              (catMaybes
                 [("nextToken" .=) <$> _larNextToken,
                  ("filter" .=) <$> _larFilter,
                  ("assessmentTemplateArns" .=) <$>
                    _larAssessmentTemplateARNs,
                  ("maxResults" .=) <$> _larMaxResults])

instance ToPath ListAssessmentRuns where
        toPath = const "/"

instance ToQuery ListAssessmentRuns where
        toQuery = const mempty

-- | /See:/ 'listAssessmentRunsResponse' smart constructor.
data ListAssessmentRunsResponse = ListAssessmentRunsResponse'
    { _larrsNextToken         :: !(Maybe Text)
    , _larrsResponseStatus    :: !Int
    , _larrsAssessmentRunARNs :: ![Text]
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'ListAssessmentRunsResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'larrsNextToken'
--
-- * 'larrsResponseStatus'
--
-- * 'larrsAssessmentRunARNs'
listAssessmentRunsResponse
    :: Int -- ^ 'larrsResponseStatus'
    -> ListAssessmentRunsResponse
listAssessmentRunsResponse pResponseStatus_ =
    ListAssessmentRunsResponse'
    { _larrsNextToken = Nothing
    , _larrsResponseStatus = pResponseStatus_
    , _larrsAssessmentRunARNs = mempty
    }

-- | When a response is generated, if there is more data to be listed, this
-- parameter is present in the response and contains the value to use for
-- the __nextToken__ parameter in a subsequent pagination request. If there
-- is no more data to be listed, this parameter is set to null.
larrsNextToken :: Lens' ListAssessmentRunsResponse (Maybe Text)
larrsNextToken = lens _larrsNextToken (\ s a -> s{_larrsNextToken = a});

-- | The response status code.
larrsResponseStatus :: Lens' ListAssessmentRunsResponse Int
larrsResponseStatus = lens _larrsResponseStatus (\ s a -> s{_larrsResponseStatus = a});

-- | A list of ARNs that specifies the assessment runs that are returned by
-- the action.
larrsAssessmentRunARNs :: Lens' ListAssessmentRunsResponse [Text]
larrsAssessmentRunARNs = lens _larrsAssessmentRunARNs (\ s a -> s{_larrsAssessmentRunARNs = a}) . _Coerce;

instance NFData ListAssessmentRunsResponse