{-# 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 #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.SQS.SendMessage -- Copyright : (c) 2013-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Delivers a message to the specified queue. -- -- -- /Important:/ The following list shows the characters (in Unicode) that are allowed in your message, according to the W3C XML specification: -- -- @#x9@ | @#xA@ | @#xD@ | [@#x20@ to @#xD7FF@ ] | [@#xE000@ to @#xFFFD@ ] | [@#x10000@ to @#x10FFFF@ ] -- -- For more information, see . If you send any characters that aren't included in this list, your request will be rejected. -- module Network.AWS.SQS.SendMessage ( -- * Creating a Request sendMessage , SendMessage -- * Request Lenses , smMessageAttributes , smDelaySeconds , smMessageDeduplicationId , smMessageGroupId , smQueueURL , smMessageBody -- * Destructuring the Response , sendMessageResponse , SendMessageResponse -- * Response Lenses , smrsSequenceNumber , smrsMessageId , smrsMD5OfMessageBody , smrsMD5OfMessageAttributes , smrsResponseStatus ) where import Network.AWS.Lens import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response import Network.AWS.SQS.Types import Network.AWS.SQS.Types.Product -- | -- -- -- -- /See:/ 'sendMessage' smart constructor. data SendMessage = SendMessage' { _smMessageAttributes :: !(Maybe (Map Text MessageAttributeValue)) , _smDelaySeconds :: !(Maybe Int) , _smMessageDeduplicationId :: !(Maybe Text) , _smMessageGroupId :: !(Maybe Text) , _smQueueURL :: !Text , _smMessageBody :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'SendMessage' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'smMessageAttributes' - Each message attribute consists of a Name, Type, and Value. For more information, see in the /Amazon SQS Developer Guide/ . -- -- * 'smDelaySeconds' - The number of seconds (0 to 900 - 15 minutes) to delay a specific message. Messages with a positive @DelaySeconds@ value become available for processing after the delay time is finished. If you don't specify a value, the default value for the queue applies. -- -- * 'smMessageDeduplicationId' - This parameter applies only to FIFO (first-in-first-out) queues. The token used for deduplication of sent messages. If a message with a particular @MessageDeduplicationId@ is sent successfully, any messages sent with the same @MessageDeduplicationId@ are accepted successfully but aren't delivered during the 5-minute deduplication interval. For more information, see in the /Amazon SQS Developer Guide/ . * Every message must have a unique @MessageDeduplicationId@ , * You may provide a @MessageDeduplicationId@ explicitly. * If you aren't able to provide a @MessageDeduplicationId@ and you enable @ContentBasedDeduplication@ for your queue, Amazon SQS uses a SHA-256 hash to generate the @MessageDeduplicationId@ using the body of the message (but not the attributes of the message). * If you don't provide a @MessageDeduplicationId@ and the queue doesn't have @ContentBasedDeduplication@ set, the action fails with an error. * If the queue has @ContentBasedDeduplication@ set, your @MessageDeduplicationId@ overrides the generated one. * When @ContentBasedDeduplication@ is in effect, messages with identical content sent within the deduplication interval are treated as duplicates and only one copy of the message is delivered. * You can also use @ContentBasedDeduplication@ for messages with identical content to be treated as duplicates. * If you send one message with @ContentBasedDeduplication@ enabled and then another message with a @MessageDeduplicationId@ that is the same as the one generated for the first @MessageDeduplicationId@ , the two messages are treated as duplicates and only one copy of the message is delivered. The length of @MessageDeduplicationId@ is 128 characters. @MessageDeduplicationId@ can contain alphanumeric characters (@a-z@ , @A-Z@ , @0-9@ ) and punctuation (@!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~@ ). For best practices of using @MessageDeduplicationId@ , see in the /Amazon Simple Queue Service Developer Guide/ . -- -- * 'smMessageGroupId' - This parameter applies only to FIFO (first-in-first-out) queues. The tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single queue, use @MessageGroupId@ values (for example, session data for multiple users). In this scenario, multiple readers can process the queue, but the session data of each user is processed in a FIFO fashion. * You must associate a non-empty @MessageGroupId@ with a message. If you don't provide a @MessageGroupId@ , the action fails. * @ReceiveMessage@ might return messages with multiple @MessageGroupId@ values. For each @MessageGroupId@ , the messages are sorted by time sent. The caller can't specify a @MessageGroupId@ . The length of @MessageGroupId@ is 128 characters. Valid values are alphanumeric characters and punctuation @(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)@ . For best practices of using @MessageGroupId@ , see in the /Amazon Simple Queue Service Developer Guide/ . -- -- * 'smQueueURL' - The URL of the Amazon SQS queue to take action on. Queue URLs are case-sensitive. -- -- * 'smMessageBody' - The message to send. String maximum 256 KB in size. For a list of allowed characters, see the preceding note. sendMessage :: Text -- ^ 'smQueueURL' -> Text -- ^ 'smMessageBody' -> SendMessage sendMessage pQueueURL_ pMessageBody_ = SendMessage' { _smMessageAttributes = Nothing , _smDelaySeconds = Nothing , _smMessageDeduplicationId = Nothing , _smMessageGroupId = Nothing , _smQueueURL = pQueueURL_ , _smMessageBody = pMessageBody_ } -- | Each message attribute consists of a Name, Type, and Value. For more information, see in the /Amazon SQS Developer Guide/ . smMessageAttributes :: Lens' SendMessage (HashMap Text MessageAttributeValue) smMessageAttributes = lens _smMessageAttributes (\ s a -> s{_smMessageAttributes = a}) . _Default . _Map; -- | The number of seconds (0 to 900 - 15 minutes) to delay a specific message. Messages with a positive @DelaySeconds@ value become available for processing after the delay time is finished. If you don't specify a value, the default value for the queue applies. smDelaySeconds :: Lens' SendMessage (Maybe Int) smDelaySeconds = lens _smDelaySeconds (\ s a -> s{_smDelaySeconds = a}); -- | This parameter applies only to FIFO (first-in-first-out) queues. The token used for deduplication of sent messages. If a message with a particular @MessageDeduplicationId@ is sent successfully, any messages sent with the same @MessageDeduplicationId@ are accepted successfully but aren't delivered during the 5-minute deduplication interval. For more information, see in the /Amazon SQS Developer Guide/ . * Every message must have a unique @MessageDeduplicationId@ , * You may provide a @MessageDeduplicationId@ explicitly. * If you aren't able to provide a @MessageDeduplicationId@ and you enable @ContentBasedDeduplication@ for your queue, Amazon SQS uses a SHA-256 hash to generate the @MessageDeduplicationId@ using the body of the message (but not the attributes of the message). * If you don't provide a @MessageDeduplicationId@ and the queue doesn't have @ContentBasedDeduplication@ set, the action fails with an error. * If the queue has @ContentBasedDeduplication@ set, your @MessageDeduplicationId@ overrides the generated one. * When @ContentBasedDeduplication@ is in effect, messages with identical content sent within the deduplication interval are treated as duplicates and only one copy of the message is delivered. * You can also use @ContentBasedDeduplication@ for messages with identical content to be treated as duplicates. * If you send one message with @ContentBasedDeduplication@ enabled and then another message with a @MessageDeduplicationId@ that is the same as the one generated for the first @MessageDeduplicationId@ , the two messages are treated as duplicates and only one copy of the message is delivered. The length of @MessageDeduplicationId@ is 128 characters. @MessageDeduplicationId@ can contain alphanumeric characters (@a-z@ , @A-Z@ , @0-9@ ) and punctuation (@!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~@ ). For best practices of using @MessageDeduplicationId@ , see in the /Amazon Simple Queue Service Developer Guide/ . smMessageDeduplicationId :: Lens' SendMessage (Maybe Text) smMessageDeduplicationId = lens _smMessageDeduplicationId (\ s a -> s{_smMessageDeduplicationId = a}); -- | This parameter applies only to FIFO (first-in-first-out) queues. The tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single queue, use @MessageGroupId@ values (for example, session data for multiple users). In this scenario, multiple readers can process the queue, but the session data of each user is processed in a FIFO fashion. * You must associate a non-empty @MessageGroupId@ with a message. If you don't provide a @MessageGroupId@ , the action fails. * @ReceiveMessage@ might return messages with multiple @MessageGroupId@ values. For each @MessageGroupId@ , the messages are sorted by time sent. The caller can't specify a @MessageGroupId@ . The length of @MessageGroupId@ is 128 characters. Valid values are alphanumeric characters and punctuation @(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)@ . For best practices of using @MessageGroupId@ , see in the /Amazon Simple Queue Service Developer Guide/ . smMessageGroupId :: Lens' SendMessage (Maybe Text) smMessageGroupId = lens _smMessageGroupId (\ s a -> s{_smMessageGroupId = a}); -- | The URL of the Amazon SQS queue to take action on. Queue URLs are case-sensitive. smQueueURL :: Lens' SendMessage Text smQueueURL = lens _smQueueURL (\ s a -> s{_smQueueURL = a}); -- | The message to send. String maximum 256 KB in size. For a list of allowed characters, see the preceding note. smMessageBody :: Lens' SendMessage Text smMessageBody = lens _smMessageBody (\ s a -> s{_smMessageBody = a}); instance AWSRequest SendMessage where type Rs SendMessage = SendMessageResponse request = postQuery sqs response = receiveXMLWrapper "SendMessageResult" (\ s h x -> SendMessageResponse' <$> (x .@? "SequenceNumber") <*> (x .@? "MessageId") <*> (x .@? "MD5OfMessageBody") <*> (x .@? "MD5OfMessageAttributes") <*> (pure (fromEnum s))) instance Hashable SendMessage instance NFData SendMessage instance ToHeaders SendMessage where toHeaders = const mempty instance ToPath SendMessage where toPath = const "/" instance ToQuery SendMessage where toQuery SendMessage'{..} = mconcat ["Action" =: ("SendMessage" :: ByteString), "Version" =: ("2012-11-05" :: ByteString), toQuery (toQueryMap "MessageAttribute" "Name" "Value" <$> _smMessageAttributes), "DelaySeconds" =: _smDelaySeconds, "MessageDeduplicationId" =: _smMessageDeduplicationId, "MessageGroupId" =: _smMessageGroupId, "QueueUrl" =: _smQueueURL, "MessageBody" =: _smMessageBody] -- | The MD5OfMessageBody and MessageId elements. -- -- -- -- /See:/ 'sendMessageResponse' smart constructor. data SendMessageResponse = SendMessageResponse' { _smrsSequenceNumber :: !(Maybe Text) , _smrsMessageId :: !(Maybe Text) , _smrsMD5OfMessageBody :: !(Maybe Text) , _smrsMD5OfMessageAttributes :: !(Maybe Text) , _smrsResponseStatus :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'SendMessageResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'smrsSequenceNumber' - /This element applies only to FIFO (first-in-first-out) queues./ A large, non-consecutive number that Amazon SQS assigns to each message. The length of @SequenceNumber@ is 128 bits. @SequenceNumber@ continues to increase for a particular @MessageGroupId@ . -- -- * 'smrsMessageId' - An element containing the message ID of the message sent to the queue. For more information, see in the /Amazon SQS Developer Guide/ . -- -- * 'smrsMD5OfMessageBody' - An MD5 digest of the non-URL-encoded message body string. This can be used to verify that Amazon SQS received the message correctly. Amazon SQS first URL decodes the message before creating the MD5 digest. For information about MD5, see . -- -- * 'smrsMD5OfMessageAttributes' - An MD5 digest of the non-URL-encoded message attribute string. This can be used to verify that Amazon SQS received the message correctly. Amazon SQS first URL decodes the message before creating the MD5 digest. For information about MD5, see . -- -- * 'smrsResponseStatus' - -- | The response status code. sendMessageResponse :: Int -- ^ 'smrsResponseStatus' -> SendMessageResponse sendMessageResponse pResponseStatus_ = SendMessageResponse' { _smrsSequenceNumber = Nothing , _smrsMessageId = Nothing , _smrsMD5OfMessageBody = Nothing , _smrsMD5OfMessageAttributes = Nothing , _smrsResponseStatus = pResponseStatus_ } -- | /This element applies only to FIFO (first-in-first-out) queues./ A large, non-consecutive number that Amazon SQS assigns to each message. The length of @SequenceNumber@ is 128 bits. @SequenceNumber@ continues to increase for a particular @MessageGroupId@ . smrsSequenceNumber :: Lens' SendMessageResponse (Maybe Text) smrsSequenceNumber = lens _smrsSequenceNumber (\ s a -> s{_smrsSequenceNumber = a}); -- | An element containing the message ID of the message sent to the queue. For more information, see in the /Amazon SQS Developer Guide/ . smrsMessageId :: Lens' SendMessageResponse (Maybe Text) smrsMessageId = lens _smrsMessageId (\ s a -> s{_smrsMessageId = a}); -- | An MD5 digest of the non-URL-encoded message body string. This can be used to verify that Amazon SQS received the message correctly. Amazon SQS first URL decodes the message before creating the MD5 digest. For information about MD5, see . smrsMD5OfMessageBody :: Lens' SendMessageResponse (Maybe Text) smrsMD5OfMessageBody = lens _smrsMD5OfMessageBody (\ s a -> s{_smrsMD5OfMessageBody = a}); -- | An MD5 digest of the non-URL-encoded message attribute string. This can be used to verify that Amazon SQS received the message correctly. Amazon SQS first URL decodes the message before creating the MD5 digest. For information about MD5, see . smrsMD5OfMessageAttributes :: Lens' SendMessageResponse (Maybe Text) smrsMD5OfMessageAttributes = lens _smrsMD5OfMessageAttributes (\ s a -> s{_smrsMD5OfMessageAttributes = a}); -- | -- | The response status code. smrsResponseStatus :: Lens' SendMessageResponse Int smrsResponseStatus = lens _smrsResponseStatus (\ s a -> s{_smrsResponseStatus = a}); instance NFData SendMessageResponse