module Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
    (
    
      describeSubscriptionFilters
    , DescribeSubscriptionFilters
    
    , dsfFilterNamePrefix
    , dsfNextToken
    , dsfLimit
    , dsfLogGroupName
    
    , describeSubscriptionFiltersResponse
    , DescribeSubscriptionFiltersResponse
    
    , dsfrsSubscriptionFilters
    , dsfrsNextToken
    , dsfrsStatus
    ) where
import           Network.AWS.CloudWatchLogs.Types
import           Network.AWS.CloudWatchLogs.Types.Product
import           Network.AWS.Pager
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
data DescribeSubscriptionFilters = DescribeSubscriptionFilters'
    { _dsfFilterNamePrefix :: !(Maybe Text)
    , _dsfNextToken        :: !(Maybe Text)
    , _dsfLimit            :: !(Maybe Nat)
    , _dsfLogGroupName     :: !Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeSubscriptionFilters
    :: Text 
    -> DescribeSubscriptionFilters
describeSubscriptionFilters pLogGroupName_ =
    DescribeSubscriptionFilters'
    { _dsfFilterNamePrefix = Nothing
    , _dsfNextToken = Nothing
    , _dsfLimit = Nothing
    , _dsfLogGroupName = pLogGroupName_
    }
dsfFilterNamePrefix :: Lens' DescribeSubscriptionFilters (Maybe Text)
dsfFilterNamePrefix = lens _dsfFilterNamePrefix (\ s a -> s{_dsfFilterNamePrefix = a});
dsfNextToken :: Lens' DescribeSubscriptionFilters (Maybe Text)
dsfNextToken = lens _dsfNextToken (\ s a -> s{_dsfNextToken = a});
dsfLimit :: Lens' DescribeSubscriptionFilters (Maybe Natural)
dsfLimit = lens _dsfLimit (\ s a -> s{_dsfLimit = a}) . mapping _Nat;
dsfLogGroupName :: Lens' DescribeSubscriptionFilters Text
dsfLogGroupName = lens _dsfLogGroupName (\ s a -> s{_dsfLogGroupName = a});
instance AWSPager DescribeSubscriptionFilters where
        page rq rs
          | stop (rs ^. dsfrsNextToken) = Nothing
          | stop (rs ^. dsfrsSubscriptionFilters) = Nothing
          | otherwise =
            Just $ rq & dsfNextToken .~ rs ^. dsfrsNextToken
instance AWSRequest DescribeSubscriptionFilters where
        type Rs DescribeSubscriptionFilters =
             DescribeSubscriptionFiltersResponse
        request = postJSON cloudWatchLogs
        response
          = receiveJSON
              (\ s h x ->
                 DescribeSubscriptionFiltersResponse' <$>
                   (x .?> "subscriptionFilters" .!@ mempty) <*>
                     (x .?> "nextToken")
                     <*> (pure (fromEnum s)))
instance ToHeaders DescribeSubscriptionFilters where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("Logs_20140328.DescribeSubscriptionFilters" ::
                       ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON DescribeSubscriptionFilters where
        toJSON DescribeSubscriptionFilters'{..}
          = object
              (catMaybes
                 [("filterNamePrefix" .=) <$> _dsfFilterNamePrefix,
                  ("nextToken" .=) <$> _dsfNextToken,
                  ("limit" .=) <$> _dsfLimit,
                  Just ("logGroupName" .= _dsfLogGroupName)])
instance ToPath DescribeSubscriptionFilters where
        toPath = const "/"
instance ToQuery DescribeSubscriptionFilters where
        toQuery = const mempty
data DescribeSubscriptionFiltersResponse = DescribeSubscriptionFiltersResponse'
    { _dsfrsSubscriptionFilters :: !(Maybe [SubscriptionFilter])
    , _dsfrsNextToken           :: !(Maybe Text)
    , _dsfrsStatus              :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeSubscriptionFiltersResponse
    :: Int 
    -> DescribeSubscriptionFiltersResponse
describeSubscriptionFiltersResponse pStatus_ =
    DescribeSubscriptionFiltersResponse'
    { _dsfrsSubscriptionFilters = Nothing
    , _dsfrsNextToken = Nothing
    , _dsfrsStatus = pStatus_
    }
dsfrsSubscriptionFilters :: Lens' DescribeSubscriptionFiltersResponse [SubscriptionFilter]
dsfrsSubscriptionFilters = lens _dsfrsSubscriptionFilters (\ s a -> s{_dsfrsSubscriptionFilters = a}) . _Default . _Coerce;
dsfrsNextToken :: Lens' DescribeSubscriptionFiltersResponse (Maybe Text)
dsfrsNextToken = lens _dsfrsNextToken (\ s a -> s{_dsfrsNextToken = a});
dsfrsStatus :: Lens' DescribeSubscriptionFiltersResponse Int
dsfrsStatus = lens _dsfrsStatus (\ s a -> s{_dsfrsStatus = a});