module Aws.Sns.Commands.ConfirmSubscription
( ConfirmSubscription(..)
, ConfirmSubscriptionResponse(..)
, ConfirmSubscriptionErrors(..)
) where
import Aws.Core
import Aws.General
import Aws.Sns.Core
import Control.Applicative
import Control.Monad.Trans.Resource (throwM)
import Data.Monoid
import Data.String
import qualified Data.Text as T
import Data.Typeable
import Text.XML.Cursor (($//), (&/))
import qualified Text.XML.Cursor as CU
confirmSubscriptionAction :: SnsAction
confirmSubscriptionAction = SnsActionConfirmSubscription
newtype SubscriptionConfirmationToken = SubscriptionConfirmationToken
{ subscriptionConfirmationTokenText :: T.Text
}
deriving (Show, Read, Eq, Ord, Monoid, IsString, Typeable)
data ConfirmSubscription = ConfirmSubscription
{ confirmSubscriptionAuthenticateOnUnsubscribe:: !Bool
, confirmSubscriptionToken :: !SubscriptionConfirmationToken
, confirmSubscriptionTopicArn :: Arn
}
deriving (Show, Read, Eq, Ord, Typeable)
data ConfirmSubscriptionResponse = ConfirmSubscriptionResponse
{ confirmSubscriptionResSubscriptionArn :: !Arn
}
deriving (Show, Read, Eq, Ord, Typeable)
instance ResponseConsumer r ConfirmSubscriptionResponse where
type ResponseMetadata ConfirmSubscriptionResponse = SnsMetadata
responseConsumer _ = snsXmlResponseConsumer p
where
p el = ConfirmSubscriptionResponse <$> arn el
arn el = do
t <- force "Missing topic ARN" $ el
$// CU.laxElement "ConfirmSubscriptionResult"
&/ CU.laxElement "SubscriptionArn"
&/ CU.content
case fromText t of
Right a -> return a
Left e -> throwM $ SnsResponseDecodeError $
"failed to parse subscription ARN (" <> t <> "): " <> (T.pack . show) e
instance SignQuery ConfirmSubscription where
type ServiceConfiguration ConfirmSubscription = SnsConfiguration
signQuery ConfirmSubscription{..} = snsSignQuery SnsQuery
{ snsQueryMethod = Get
, snsQueryAction = confirmSubscriptionAction
, snsQueryParameters = authOnUnsubscribe <>
[ ("Token", Just $ subscriptionConfirmationTokenText confirmSubscriptionToken)
, ("TopicArn", Just $ toText confirmSubscriptionTopicArn)
]
, snsQueryBody = Nothing
}
where
authOnUnsubscribe = if confirmSubscriptionAuthenticateOnUnsubscribe
then [ ("AuthenticateOnUnsubscribe", Just "true") ]
else []
instance Transaction ConfirmSubscription ConfirmSubscriptionResponse
instance AsMemoryResponse ConfirmSubscriptionResponse where
type MemoryResponse ConfirmSubscriptionResponse = ConfirmSubscriptionResponse
loadToMemory = return
data ConfirmSubscriptionErrors
= ConfirmSubscriptionAuthorizationError
| ConfirmSubscriptionInternalError
| ConfirmSubscriptionInvalidParameter
| ConfirmSubscriptionNotFound
| ConfirmSubscriptionSubscriptionLimitExceeded
deriving (Show, Read, Eq, Ord, Enum, Bounded, Typeable)