module Network.AWS.Config.DescribeConfigRules
    (
    
      describeConfigRules
    , DescribeConfigRules
    
    , dcrConfigRuleNames
    , dcrNextToken
    
    , describeConfigRulesResponse
    , DescribeConfigRulesResponse
    
    , dcrrsConfigRules
    , dcrrsNextToken
    , dcrrsResponseStatus
    ) where
import           Network.AWS.Config.Types
import           Network.AWS.Config.Types.Product
import           Network.AWS.Lens
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
data DescribeConfigRules = DescribeConfigRules'
    { _dcrConfigRuleNames :: !(Maybe [Text])
    , _dcrNextToken       :: !(Maybe Text)
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeConfigRules
    :: DescribeConfigRules
describeConfigRules =
    DescribeConfigRules'
    { _dcrConfigRuleNames = Nothing
    , _dcrNextToken = Nothing
    }
dcrConfigRuleNames :: Lens' DescribeConfigRules [Text]
dcrConfigRuleNames = lens _dcrConfigRuleNames (\ s a -> s{_dcrConfigRuleNames = a}) . _Default . _Coerce;
dcrNextToken :: Lens' DescribeConfigRules (Maybe Text)
dcrNextToken = lens _dcrNextToken (\ s a -> s{_dcrNextToken = a});
instance AWSRequest DescribeConfigRules where
        type Rs DescribeConfigRules =
             DescribeConfigRulesResponse
        request = postJSON config
        response
          = receiveJSON
              (\ s h x ->
                 DescribeConfigRulesResponse' <$>
                   (x .?> "ConfigRules" .!@ mempty) <*>
                     (x .?> "NextToken")
                     <*> (pure (fromEnum s)))
instance Hashable DescribeConfigRules
instance NFData DescribeConfigRules
instance ToHeaders DescribeConfigRules where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("StarlingDoveService.DescribeConfigRules" ::
                       ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON DescribeConfigRules where
        toJSON DescribeConfigRules'{..}
          = object
              (catMaybes
                 [("ConfigRuleNames" .=) <$> _dcrConfigRuleNames,
                  ("NextToken" .=) <$> _dcrNextToken])
instance ToPath DescribeConfigRules where
        toPath = const "/"
instance ToQuery DescribeConfigRules where
        toQuery = const mempty
data DescribeConfigRulesResponse = DescribeConfigRulesResponse'
    { _dcrrsConfigRules    :: !(Maybe [ConfigRule])
    , _dcrrsNextToken      :: !(Maybe Text)
    , _dcrrsResponseStatus :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeConfigRulesResponse
    :: Int 
    -> DescribeConfigRulesResponse
describeConfigRulesResponse pResponseStatus_ =
    DescribeConfigRulesResponse'
    { _dcrrsConfigRules = Nothing
    , _dcrrsNextToken = Nothing
    , _dcrrsResponseStatus = pResponseStatus_
    }
dcrrsConfigRules :: Lens' DescribeConfigRulesResponse [ConfigRule]
dcrrsConfigRules = lens _dcrrsConfigRules (\ s a -> s{_dcrrsConfigRules = a}) . _Default . _Coerce;
dcrrsNextToken :: Lens' DescribeConfigRulesResponse (Maybe Text)
dcrrsNextToken = lens _dcrrsNextToken (\ s a -> s{_dcrrsNextToken = a});
dcrrsResponseStatus :: Lens' DescribeConfigRulesResponse Int
dcrrsResponseStatus = lens _dcrrsResponseStatus (\ s a -> s{_dcrrsResponseStatus = a});
instance NFData DescribeConfigRulesResponse