module Aws.Sqs.Commands.CreateQueue where
import Aws.Response
import Aws.Sqs.Info
import Aws.Sqs.Metadata
import Aws.Sqs.Query
import Aws.Sqs.Response
import Aws.Signature
import Aws.Transaction
import Aws.Xml
import Control.Applicative
import Data.Maybe
import Text.XML.Cursor (($//), (&/))
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import qualified Text.XML.Cursor as Cu
import qualified Data.ByteString.Char8 as B
data CreateQueue = CreateQueue{
cqDefaultVisibilityTimeout :: Maybe Int,
cqQueueName :: T.Text
}deriving (Show)
data CreateQueueResponse = CreateQueueResponse{
cqrQueueUrl :: T.Text
} deriving (Show)
instance ResponseConsumer r CreateQueueResponse where
type ResponseMetadata CreateQueueResponse = SqsMetadata
responseConsumer _ = sqsXmlResponseConsumer parse
where
parse el = do
url <- force "Missing Queue Url" $ el $// Cu.laxElement "QueueUrl" &/ Cu.content
return CreateQueueResponse{ cqrQueueUrl = url}
instance SignQuery CreateQueue where
type Info CreateQueue = SqsInfo
signQuery CreateQueue {..} = sqsSignQuery SqsQuery {
sqsQueueName = Nothing,
sqsQuery = [("Action", Just "CreateQueue"),
("QueueName", Just $ TE.encodeUtf8 cqQueueName)] ++
catMaybes [("DefaultVisibilityTimeout",) <$> case cqDefaultVisibilityTimeout of
Just x -> Just $ Just $ B.pack $ show x
Nothing -> Nothing]}
instance Transaction CreateQueue CreateQueueResponse