feat: add 4 missing SQS API commands for Yandex/AWS compatibility
- 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
This commit is contained in:
@@ -63,6 +63,7 @@ type Queue struct {
|
||||
FIFOSequenceNumbers map[string]int
|
||||
EnableDuplicates bool
|
||||
Duplicates map[string]time.Time
|
||||
Tags map[string]string
|
||||
}
|
||||
|
||||
func (q *Queue) NextSequenceNumber(groupId string) string {
|
||||
|
||||
@@ -530,3 +530,93 @@ func (r *DeleteMessageBatchRequest) SetAttributesFromForm(values url.Values) {
|
||||
r.Entries = entries
|
||||
}
|
||||
}
|
||||
|
||||
/*** ChangeMessageVisibilityBatch Request ***/
|
||||
type ChangeMessageVisibilityBatchRequestEntry struct {
|
||||
Id string `json:"Id" schema:"Id"`
|
||||
ReceiptHandle string `json:"ReceiptHandle" schema:"ReceiptHandle"`
|
||||
VisibilityTimeout int `json:"VisibilityTimeout" schema:"VisibilityTimeout"`
|
||||
}
|
||||
|
||||
type ChangeMessageVisibilityBatchRequest struct {
|
||||
Entries []ChangeMessageVisibilityBatchRequestEntry `json:"Entries"`
|
||||
QueueUrl string `json:"QueueUrl" schema:"QueueUrl"`
|
||||
}
|
||||
|
||||
func NewChangeMessageVisibilityBatchRequest() *ChangeMessageVisibilityBatchRequest {
|
||||
return &ChangeMessageVisibilityBatchRequest{}
|
||||
}
|
||||
|
||||
// SetAttributesFromForm — парсит AWS Query Protocol: ChangeMessageVisibilityBatchRequestEntry.N.*
|
||||
func (r *ChangeMessageVisibilityBatchRequest) SetAttributesFromForm(values url.Values) {
|
||||
for i := 1; ; i++ {
|
||||
id := values.Get(fmt.Sprintf("ChangeMessageVisibilityBatchRequestEntry.%d.Id", i))
|
||||
receiptHandle := values.Get(fmt.Sprintf("ChangeMessageVisibilityBatchRequestEntry.%d.ReceiptHandle", i))
|
||||
if id == "" || receiptHandle == "" {
|
||||
break
|
||||
}
|
||||
entry := ChangeMessageVisibilityBatchRequestEntry{
|
||||
Id: id,
|
||||
ReceiptHandle: receiptHandle,
|
||||
}
|
||||
vt := values.Get(fmt.Sprintf("ChangeMessageVisibilityBatchRequestEntry.%d.VisibilityTimeout", i))
|
||||
if vt != "" {
|
||||
entry.VisibilityTimeout, _ = strconv.Atoi(vt)
|
||||
}
|
||||
r.Entries = append(r.Entries, entry)
|
||||
}
|
||||
}
|
||||
|
||||
/*** TagQueue Request ***/
|
||||
type TagQueueRequest struct {
|
||||
QueueUrl string `json:"QueueUrl" schema:"QueueUrl"`
|
||||
Tags map[string]string `json:"Tags"`
|
||||
}
|
||||
|
||||
func NewTagQueueRequest() *TagQueueRequest {
|
||||
return &TagQueueRequest{Tags: make(map[string]string)}
|
||||
}
|
||||
|
||||
// SetAttributesFromForm — парсит AWS Query Protocol: Tag.N.Key / Tag.N.Value
|
||||
func (r *TagQueueRequest) SetAttributesFromForm(values url.Values) {
|
||||
for i := 1; ; i++ {
|
||||
key := values.Get(fmt.Sprintf("Tag.%d.Key", i))
|
||||
value := values.Get(fmt.Sprintf("Tag.%d.Value", i))
|
||||
if key == "" {
|
||||
break
|
||||
}
|
||||
r.Tags[key] = value
|
||||
}
|
||||
}
|
||||
|
||||
/*** UntagQueue Request ***/
|
||||
type UntagQueueRequest struct {
|
||||
QueueUrl string `json:"QueueUrl" schema:"QueueUrl"`
|
||||
TagKeys []string `json:"TagKeys"`
|
||||
}
|
||||
|
||||
func NewUntagQueueRequest() *UntagQueueRequest {
|
||||
return &UntagQueueRequest{}
|
||||
}
|
||||
|
||||
// SetAttributesFromForm — парсит AWS Query Protocol: TagKey.N
|
||||
func (r *UntagQueueRequest) SetAttributesFromForm(values url.Values) {
|
||||
for i := 1; ; i++ {
|
||||
key := values.Get(fmt.Sprintf("TagKey.%d", i))
|
||||
if key == "" {
|
||||
break
|
||||
}
|
||||
r.TagKeys = append(r.TagKeys, key)
|
||||
}
|
||||
}
|
||||
|
||||
/*** ListQueueTags Request ***/
|
||||
type ListQueueTagsRequest struct {
|
||||
QueueUrl string `json:"QueueUrl" schema:"QueueUrl"`
|
||||
}
|
||||
|
||||
func NewListQueueTagsRequest() *ListQueueTagsRequest {
|
||||
return &ListQueueTagsRequest{}
|
||||
}
|
||||
|
||||
func (r *ListQueueTagsRequest) SetAttributesFromForm(values url.Values) {}
|
||||
|
||||
@@ -338,3 +338,74 @@ func (r DeleteMessageBatchResponse) GetResult() interface{} {
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user