{-# 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 #-}
module Network.AWS.SES.DescribeConfigurationSet
    (
    
      describeConfigurationSet
    , DescribeConfigurationSet
    
    , dcsConfigurationSetAttributeNames
    , dcsConfigurationSetName
    
    , describeConfigurationSetResponse
    , DescribeConfigurationSetResponse
    
    , dcsrsConfigurationSet
    , dcsrsEventDestinations
    , dcsrsResponseStatus
    ) where
import           Network.AWS.Lens
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
import           Network.AWS.SES.Types
import           Network.AWS.SES.Types.Product
data DescribeConfigurationSet = DescribeConfigurationSet'
    { _dcsConfigurationSetAttributeNames :: !(Maybe [ConfigurationSetAttribute])
    , _dcsConfigurationSetName           :: !Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeConfigurationSet
    :: Text 
    -> DescribeConfigurationSet
describeConfigurationSet pConfigurationSetName_ =
    DescribeConfigurationSet'
    { _dcsConfigurationSetAttributeNames = Nothing
    , _dcsConfigurationSetName = pConfigurationSetName_
    }
dcsConfigurationSetAttributeNames :: Lens' DescribeConfigurationSet [ConfigurationSetAttribute]
dcsConfigurationSetAttributeNames = lens _dcsConfigurationSetAttributeNames (\ s a -> s{_dcsConfigurationSetAttributeNames = a}) . _Default . _Coerce;
dcsConfigurationSetName :: Lens' DescribeConfigurationSet Text
dcsConfigurationSetName = lens _dcsConfigurationSetName (\ s a -> s{_dcsConfigurationSetName = a});
instance AWSRequest DescribeConfigurationSet where
        type Rs DescribeConfigurationSet =
             DescribeConfigurationSetResponse
        request = postQuery ses
        response
          = receiveXMLWrapper "DescribeConfigurationSetResult"
              (\ s h x ->
                 DescribeConfigurationSetResponse' <$>
                   (x .@? "ConfigurationSet") <*>
                     (x .@? "EventDestinations" .!@ mempty >>=
                        may (parseXMLList "member"))
                     <*> (pure (fromEnum s)))
instance Hashable DescribeConfigurationSet
instance NFData DescribeConfigurationSet
instance ToHeaders DescribeConfigurationSet where
        toHeaders = const mempty
instance ToPath DescribeConfigurationSet where
        toPath = const "/"
instance ToQuery DescribeConfigurationSet where
        toQuery DescribeConfigurationSet'{..}
          = mconcat
              ["Action" =:
                 ("DescribeConfigurationSet" :: ByteString),
               "Version" =: ("2010-12-01" :: ByteString),
               "ConfigurationSetAttributeNames" =:
                 toQuery
                   (toQueryList "member" <$>
                      _dcsConfigurationSetAttributeNames),
               "ConfigurationSetName" =: _dcsConfigurationSetName]
data DescribeConfigurationSetResponse = DescribeConfigurationSetResponse'
    { _dcsrsConfigurationSet  :: !(Maybe ConfigurationSet)
    , _dcsrsEventDestinations :: !(Maybe [EventDestination])
    , _dcsrsResponseStatus    :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeConfigurationSetResponse
    :: Int 
    -> DescribeConfigurationSetResponse
describeConfigurationSetResponse pResponseStatus_ =
    DescribeConfigurationSetResponse'
    { _dcsrsConfigurationSet = Nothing
    , _dcsrsEventDestinations = Nothing
    , _dcsrsResponseStatus = pResponseStatus_
    }
dcsrsConfigurationSet :: Lens' DescribeConfigurationSetResponse (Maybe ConfigurationSet)
dcsrsConfigurationSet = lens _dcsrsConfigurationSet (\ s a -> s{_dcsrsConfigurationSet = a});
dcsrsEventDestinations :: Lens' DescribeConfigurationSetResponse [EventDestination]
dcsrsEventDestinations = lens _dcsrsEventDestinations (\ s a -> s{_dcsrsEventDestinations = a}) . _Default . _Coerce;
dcsrsResponseStatus :: Lens' DescribeConfigurationSetResponse Int
dcsrsResponseStatus = lens _dcsrsResponseStatus (\ s a -> s{_dcsrsResponseStatus = a});
instance NFData DescribeConfigurationSetResponse