module Aws.Ses.Commands.GetIdentityNotificationAttributes ( GetIdentityNotificationAttributes(..) , GetIdentityNotificationAttributesResponse(..) , IdentityNotificationAttributes(..) ) where import Data.Text (Text) import qualified Data.ByteString.Char8 as BS import Control.Applicative ((<$>)) import Data.Text.Encoding as T (encodeUtf8) import Data.Text as T (toCaseFold) import Data.Typeable import Text.XML.Cursor (($//), ($/), (&|), laxElement) import Aws.Core import Aws.Ses.Core -- | Get notification settings for the given identities. data GetIdentityNotificationAttributes = GetIdentityNotificationAttributes [Text] deriving (Eq, Ord, Show, Typeable) -- | ServiceConfiguration: 'SesConfiguration' instance SignQuery GetIdentityNotificationAttributes where type ServiceConfiguration GetIdentityNotificationAttributes = SesConfiguration signQuery (GetIdentityNotificationAttributes identities) = sesSignQuery $ ("Action", "GetIdentityNotificationAttributes") : zip (enumMember <$> [1..]) (T.encodeUtf8 <$> identities) where enumMember (n :: Int) = BS.append "Identities.member." (BS.pack $ show n) data IdentityNotificationAttributes = IdentityNotificationAttributes { inIdentity :: Text , inBounceTopic :: Maybe Text , inComplaintTopic :: Maybe Text , inForwardingEnabled :: Bool } deriving (Eq, Ord, Show, Typeable) -- | The response sent back by Amazon SES after a -- 'GetIdentityNotificationAttributes' command. data GetIdentityNotificationAttributesResponse = GetIdentityNotificationAttributesResponse [IdentityNotificationAttributes] deriving (Eq, Ord, Show, Typeable) instance ResponseConsumer GetIdentityNotificationAttributes GetIdentityNotificationAttributesResponse where type ResponseMetadata GetIdentityNotificationAttributesResponse = SesMetadata responseConsumer _ = sesResponseConsumer $ \cursor -> do let buildAttr e = do inIdentity <- force "Missing Key" $ e $/ elContent "key" fwdText <- force "Missing ForwardingEnabled" $ e $// elContent "ForwardingEnabled" let inBounceTopic = headOrNothing (e $// elContent "BounceTopic") inComplaintTopic = headOrNothing (e $// elContent "ComplaintTopic") inForwardingEnabled = T.toCaseFold fwdText == T.toCaseFold "true" return IdentityNotificationAttributes{..} attributes <- sequence $ cursor $// laxElement "entry" &| buildAttr return $ GetIdentityNotificationAttributesResponse attributes where headOrNothing (x:_) = Just x headOrNothing _ = Nothing instance Transaction GetIdentityNotificationAttributes GetIdentityNotificationAttributesResponse where instance AsMemoryResponse GetIdentityNotificationAttributesResponse where type MemoryResponse GetIdentityNotificationAttributesResponse = GetIdentityNotificationAttributesResponse loadToMemory = return