module Aws.Sns.Commands.GetSubscriptionAttributes
( SubscriptionAttributes(..)
, GetSubscriptionAttributes(..)
, GetSubscriptionAttributesResponse(..)
, GetSubscriptionAttributesErrors(..)
) where
import Aws.Core
import Aws.General
import Aws.Sns.Internal
import Aws.Sns.Core
import Control.Applicative
import Control.Exception
import Control.Monad.Trans.Resource (throwM)
import qualified Data.Text as T
import qualified Data.Traversable as TR
import Data.Typeable
import Text.XML.Cursor (($//), (&/))
import qualified Text.XML.Cursor as CU
type DeliveryPolicy = T.Text
data SubscriptionAttributes = SubscriptionAttributes
{ subscriptionAttrSubscriptionArn :: !(Maybe Arn)
, subscriptionAttrTopicArn :: !(Maybe Arn)
, subscriptionAttrOwner :: !(Maybe AccountId)
, subscriptionAttrConfirmationWasAuthenticated :: !Bool
, subscriptionAttrDeliveryPolicy :: !(Maybe DeliveryPolicy)
, subscriptionAttrEffectiveDeliveryPolicy :: !(Maybe DeliveryPolicy)
}
deriving (Show, Read, Eq, Ord, Typeable)
getSubscriptionAttributesAction :: SnsAction
getSubscriptionAttributesAction = SnsActionGetSubscriptionAttributes
data GetSubscriptionAttributes = GetSubscriptionAttributes
{ getSubscriptionAttributesSubscriptionArn :: !Arn
}
deriving (Show, Read, Eq, Ord, Typeable)
data GetSubscriptionAttributesResponse = GetSubscriptionAttributesResponse
{ getSubscriptionAttributesResAttributes :: !SubscriptionAttributes
}
deriving (Show, Read, Eq, Ord, Typeable)
instance ResponseConsumer r GetSubscriptionAttributesResponse where
type ResponseMetadata GetSubscriptionAttributesResponse = SnsMetadata
responseConsumer _ = snsXmlResponseConsumer p
where
p :: CU.Cursor -> Response (ResponseMetadata GetSubscriptionAttributesResponse) GetSubscriptionAttributesResponse
p el = either throwM return $ do
entries <- fmap parseXmlEntryMap $ force "Missing Attributes" $ el
$// CU.laxElement "GetSubscriptionAttributesResult"
&/ CU.laxElement "Attributes"
fmapL (toException . XmlException) . fmap GetSubscriptionAttributesResponse $ SubscriptionAttributes
<$> TR.mapM fromText (lookup "SubscriptionArn" entries)
<*> TR.mapM fromText (lookup "TopicArn" entries)
<*> (pure $ fmap AccountId (lookup "Owner" entries))
<*> pure (maybe False (== "true") (lookup "ConfirmationWasAuthenticated" entries))
<*> pure (lookup "DeliveryPolicy" entries)
<*> pure (lookup "EffectiveDeliveryPolicy" entries)
instance SignQuery GetSubscriptionAttributes where
type ServiceConfiguration GetSubscriptionAttributes = SnsConfiguration
signQuery GetSubscriptionAttributes{..} = snsSignQuery SnsQuery
{ snsQueryMethod = Get
, snsQueryAction = getSubscriptionAttributesAction
, snsQueryParameters = [("SubscriptionArn", Just $ toText getSubscriptionAttributesSubscriptionArn)]
, snsQueryBody = Nothing
}
instance Transaction GetSubscriptionAttributes GetSubscriptionAttributesResponse
instance AsMemoryResponse GetSubscriptionAttributesResponse where
type MemoryResponse GetSubscriptionAttributesResponse = GetSubscriptionAttributesResponse
loadToMemory = return
data GetSubscriptionAttributesErrors
= GetSubscriptionAttributesAuthorizationError
| GetSubscriptionAttributesInternalError
| GetSubscriptionAttributesInvalidParameter
| GetSubscriptionAttributesNotFound
deriving (Show, Read, Eq, Ord, Enum, Bounded, Typeable)