- ChangeMessageVisibilityBatch: batch visibility timeout (up to 10 msgs) - TagQueue: add/update queue tags - UntagQueue: remove queue tags by keys - ListQueueTags: list all queue tags - Added Tags field to Queue struct - Request/Response models for all 4 commands - Registered in router (17 total API commands now) - Yandex Message Queue API reference doc
412 lines
13 KiB
Go
412 lines
13 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/xml"
|
|
)
|
|
|
|
type ResponseMetadata struct {
|
|
RequestId string `xml:"RequestId"`
|
|
}
|
|
|
|
// NOTE: Every response in here MUST implement the `AbstractResponseBody` interface in order to be used
|
|
// in `encodeResponse`
|
|
|
|
/*** Error Responses ***/
|
|
type ErrorResult struct {
|
|
Type string `json:"Type,omitempty" xml:"Type,omitempty"`
|
|
Code string `json:"Code,omitempty" xml:"Code,omitempty"`
|
|
Message string `json:"Message,omitempty" xml:"Message,omitempty"`
|
|
}
|
|
|
|
type ErrorResponse struct {
|
|
Result ErrorResult `json:"Error" xml:"Error"`
|
|
RequestId string `json:"RequestId" xml:"RequestId"`
|
|
}
|
|
|
|
func (r ErrorResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r ErrorResponse) GetRequestId() string {
|
|
return r.RequestId
|
|
}
|
|
|
|
/*** Receive Message Response */
|
|
type ReceiveMessageResult struct {
|
|
Messages []*ResultMessage `json:"Messages" xml:"Message,omitempty"`
|
|
}
|
|
|
|
type ReceiveMessageResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result ReceiveMessageResult `json:"ReceiveMessageResult" xml:"ReceiveMessageResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r ReceiveMessageResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r ReceiveMessageResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
type ResultMessage struct {
|
|
MessageId string `json:"MessageId,omitempty" xml:"MessageId,omitempty"`
|
|
ReceiptHandle string `json:"ReceiptHandle,omitempty" xml:"ReceiptHandle,omitempty"`
|
|
MD5OfBody string `json:"MD5OfBody,omitempty" xml:"MD5OfBody,omitempty"`
|
|
Body string `json:"Body,omitempty" xml:"Body,omitempty"`
|
|
MD5OfMessageAttributes string `json:"MD5OfMessageAttributes,omitempty" xml:"MD5OfMessageAttributes,omitempty"`
|
|
MessageAttributes map[string]MessageAttribute `json:"MessageAttributes,omitempty" xml:"MessageAttribute,omitempty,attr"`
|
|
Attributes map[string]string `json:"Attributes,omitempty" xml:"Attribute,omitempty,attr"`
|
|
}
|
|
|
|
// MarshalXML is a custom marshaler for the ResultMessage struct. We need it because we need to convert the
|
|
// maps into something that can be shown as XML. If we ever get rid of the XML response parsing this can go,
|
|
// and that would be glorious.
|
|
func (r *ResultMessage) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
|
type Attributes struct {
|
|
Name string `xml:"Name,omitempty"`
|
|
Value string `xml:"Value,omitempty"`
|
|
}
|
|
var attrs []Attributes
|
|
for key, value := range r.Attributes {
|
|
attribute := Attributes{
|
|
Name: key,
|
|
Value: value,
|
|
}
|
|
attrs = append(attrs, attribute)
|
|
}
|
|
|
|
type MessageAttributes struct {
|
|
Name string `xml:"Name,omitempty"`
|
|
Value MessageAttribute `xml:"Value,omitempty"`
|
|
}
|
|
var messageAttrs []MessageAttributes
|
|
for key, value := range r.MessageAttributes {
|
|
attribute := MessageAttributes{
|
|
Name: key,
|
|
Value: value,
|
|
}
|
|
messageAttrs = append(messageAttrs, attribute)
|
|
}
|
|
e.EncodeToken(start)
|
|
|
|
// Encode the fields
|
|
e.EncodeElement(r.MessageId, xml.StartElement{Name: xml.Name{Local: "MessageId"}})
|
|
e.EncodeElement(r.ReceiptHandle, xml.StartElement{Name: xml.Name{Local: "ReceiptHandle"}})
|
|
e.EncodeElement(r.MD5OfBody, xml.StartElement{Name: xml.Name{Local: "MD5OfBody"}})
|
|
e.EncodeElement(r.Body, xml.StartElement{Name: xml.Name{Local: "Body"}})
|
|
e.EncodeElement(attrs, xml.StartElement{Name: xml.Name{Local: "Attribute"}})
|
|
e.EncodeElement(messageAttrs, xml.StartElement{Name: xml.Name{Local: "MessageAttribute"}})
|
|
e.EncodeToken(xml.EndElement{Name: start.Name})
|
|
return nil
|
|
}
|
|
|
|
type ChangeMessageVisibilityResult struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r ChangeMessageVisibilityResult) GetResult() interface{} {
|
|
return nil
|
|
}
|
|
|
|
func (r ChangeMessageVisibilityResult) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** Create Queue Response */
|
|
type CreateQueueResult struct {
|
|
QueueUrl string `json:"QueueUrl" xml:"QueueUrl"`
|
|
}
|
|
|
|
type CreateQueueResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result CreateQueueResult `json:"CreateQueueResult" xml:"CreateQueueResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r CreateQueueResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r CreateQueueResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** List Queues Response */
|
|
type ListQueuesResult struct {
|
|
// NOTE: the old XML sdks depend on QueueUrl, and the new JSON ones need QueueUrls
|
|
QueueUrls []string `json:"QueueUrls" xml:"QueueUrl"`
|
|
}
|
|
|
|
type ListQueuesResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result ListQueuesResult `json:"ListQueuesResult" xml:"ListQueuesResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r ListQueuesResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r ListQueuesResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** Get Queue QueueAttributes ***/
|
|
type Attribute struct {
|
|
Name string `json:"Name,omitempty" xml:"Name,omitempty"`
|
|
Value string `json:"Value,omitempty" xml:"Value,omitempty"`
|
|
}
|
|
|
|
type GetQueueAttributesResult struct {
|
|
/* VisibilityTimeout, DelaySeconds, ReceiveMessageWaitTimeSeconds, ApproximateNumberOfMessages
|
|
ApproximateNumberOfMessagesNotVisible, CreatedTimestamp, LastModifiedTimestamp, QueueArn */
|
|
Attrs []Attribute `json:"Attributes,omitempty" xml:"Attribute,omitempty"`
|
|
}
|
|
|
|
type GetQueueAttributesResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result GetQueueAttributesResult `json:"GetQueueAttributesResult" xml:"GetQueueAttributesResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r GetQueueAttributesResponse) GetResult() interface{} {
|
|
result := map[string]string{}
|
|
for _, attr := range r.Result.Attrs {
|
|
result[attr.Name] = attr.Value
|
|
}
|
|
return map[string]map[string]string{"Attributes": result}
|
|
}
|
|
|
|
func (r GetQueueAttributesResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** Send Message Response */
|
|
type SendMessageResult struct {
|
|
MD5OfMessageAttributes string `json:"MD5OfMessageAttributes,omitempty" xml:"MD5OfMessageAttributes,omitempty"`
|
|
MD5OfMessageBody string `json:"MD5OfMessageBody" xml:"MD5OfMessageBody"`
|
|
MessageId string `json:"MessageId" xml:"MessageId"`
|
|
SequenceNumber string `json:"SequenceNumber,omitempty" xml:"SequenceNumber,omitempty"`
|
|
}
|
|
|
|
type SendMessageResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result SendMessageResult `json:"SendMessageResult" xml:"SendMessageResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r SendMessageResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r SendMessageResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** Delete Message Response */
|
|
type DeleteMessageResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r DeleteMessageResponse) GetResult() interface{} {
|
|
return nil
|
|
}
|
|
|
|
func (r DeleteMessageResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** Get Queue Url Response */
|
|
type GetQueueUrlResult struct {
|
|
QueueUrl string `json:"QueueUrl,omitempty" xml:"QueueUrl,omitempty"`
|
|
}
|
|
|
|
type GetQueueUrlResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result GetQueueUrlResult `json:"GetQueueUrlResult" xml:"GetQueueUrlResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r GetQueueUrlResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r GetQueueUrlResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
type SendMessageBatchResultEntry struct {
|
|
Id string `json:"Id" xml:"Id"`
|
|
MessageId string `json:"MessageId" xml:"MessageId"`
|
|
MD5OfMessageBody string `json:"MD5OfMessageBody,omitempty" xml:"MD5OfMessageBody,omitempty"`
|
|
MD5OfMessageAttributes string `json:"MD5OfMessageAttributes,omitempty" xml:"MD5OfMessageAttributes,omitempty"`
|
|
SequenceNumber string `json:"SequenceNumber" xml:"SequenceNumber"`
|
|
}
|
|
|
|
/*** Send Message Batch Response */
|
|
type SendMessageBatchResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result SendMessageBatchResult `json:"SendMessageBatchResult" xml:"SendMessageBatchResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
type SendMessageBatchResult struct {
|
|
Entry []SendMessageBatchResultEntry `json:"Successful" xml:"SendMessageBatchResultEntry"`
|
|
Error []BatchResultErrorEntry `json:"Failed,omitempty" xml:"BatchResultErrorEntry,omitempty"`
|
|
}
|
|
|
|
func (r SendMessageBatchResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r SendMessageBatchResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
type BatchResultErrorEntry struct {
|
|
Code string `json:"Code" xml:"Code"`
|
|
Id string `json:"Id" xml:"Id"`
|
|
Message string `json:"Message,omitempty" xml:"Message,omitempty"`
|
|
SenderFault bool `json:"SenderFault" xml:"SenderFault"`
|
|
}
|
|
|
|
type SetQueueAttributesResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r SetQueueAttributesResponse) GetResult() interface{} {
|
|
return nil
|
|
}
|
|
|
|
func (r SetQueueAttributesResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** Purge Queue Response */
|
|
type PurgeQueueResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r PurgeQueueResponse) GetResult() interface{} {
|
|
return nil
|
|
}
|
|
|
|
func (r PurgeQueueResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** Delete Queue Response */
|
|
type DeleteQueueResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r DeleteQueueResponse) GetResult() interface{} {
|
|
return nil
|
|
}
|
|
|
|
func (r DeleteQueueResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** Delete Message Batch Response ***/
|
|
type DeleteMessageBatchResultEntry struct {
|
|
Id string `json:"Id" xml:"Id"`
|
|
}
|
|
|
|
type DeleteMessageBatchResult struct {
|
|
Successful []DeleteMessageBatchResultEntry `json:"Successful" xml:"DeleteMessageBatchResultEntry"`
|
|
Failed []BatchResultErrorEntry `json:"Failed,omitempty" xml:"BatchResultErrorEntry,omitempty"`
|
|
}
|
|
|
|
type DeleteMessageBatchResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result DeleteMessageBatchResult `json:"DeleteMessageBatchResult" xml:"DeleteMessageBatchResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r DeleteMessageBatchResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r DeleteMessageBatchResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** ChangeMessageVisibilityBatch Response ***/
|
|
type ChangeMessageVisibilityBatchResultEntry struct {
|
|
Id string `json:"Id" xml:"Id"`
|
|
}
|
|
|
|
type ChangeMessageVisibilityBatchResult struct {
|
|
Successful []ChangeMessageVisibilityBatchResultEntry `json:"Successful" xml:"ChangeMessageVisibilityBatchResultEntry"`
|
|
Failed []BatchResultErrorEntry `json:"Failed,omitempty" xml:"BatchResultErrorEntry,omitempty"`
|
|
}
|
|
|
|
type ChangeMessageVisibilityBatchResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result ChangeMessageVisibilityBatchResult `json:"ChangeMessageVisibilityBatchResult" xml:"ChangeMessageVisibilityBatchResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r ChangeMessageVisibilityBatchResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r ChangeMessageVisibilityBatchResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** TagQueue Response ***/
|
|
type TagQueueResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r TagQueueResponse) GetResult() interface{} {
|
|
return nil
|
|
}
|
|
|
|
func (r TagQueueResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** UntagQueue Response ***/
|
|
type UntagQueueResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r UntagQueueResponse) GetResult() interface{} {
|
|
return nil
|
|
}
|
|
|
|
func (r UntagQueueResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|
|
|
|
/*** ListQueueTags Response ***/
|
|
type ListQueueTagsResult struct {
|
|
Tags map[string]string `json:"Tags" xml:"Tag"`
|
|
}
|
|
|
|
type ListQueueTagsResponse struct {
|
|
Xmlns string `json:"Xmlns" xml:"xmlns,attr"`
|
|
Result ListQueueTagsResult `json:"ListQueueTagsResult" xml:"ListQueueTagsResult"`
|
|
Metadata ResponseMetadata `json:"ResponseMetadata" xml:"ResponseMetadata"`
|
|
}
|
|
|
|
func (r ListQueueTagsResponse) GetResult() interface{} {
|
|
return r.Result
|
|
}
|
|
|
|
func (r ListQueueTagsResponse) GetRequestId() string {
|
|
return r.Metadata.RequestId
|
|
}
|