-
Notifications
You must be signed in to change notification settings - Fork 479
/
requests.go
102 lines (90 loc) · 3.62 KB
/
requests.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
Copyright 2021 The Dapr Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package pubsub
import (
"encoding/json"
"fmt"
"strings"
)
// PublishRequest is the request to publish a message.
type PublishRequest struct {
Data []byte `json:"data"`
PubsubName string `json:"pubsubname"`
Topic string `json:"topic"`
Metadata map[string]string `json:"metadata"`
ContentType *string `json:"contentType,omitempty"`
}
// BulkPublishRequest is the request to publish mutilple messages.
type BulkPublishRequest struct {
Entries []BulkMessageEntry `json:"entries"`
PubsubName string `json:"pubsubname"`
Topic string `json:"topic"`
Metadata map[string]string `json:"metadata"`
}
// SubscribeRequest is the request to subscribe to a topic.
type SubscribeRequest struct {
Topic string `json:"topic"`
Metadata map[string]string `json:"metadata"`
BulkSubscribeConfig BulkSubscribeConfig `json:"bulkSubscribe,omitempty"`
}
// NewMessage is an event arriving from a message bus instance.
type NewMessage struct {
Data []byte `json:"data"`
Topic string `json:"topic"`
Metadata map[string]string `json:"metadata"`
ContentType *string `json:"contentType,omitempty"`
}
// String implements fmt.Stringer and it's useful for debugging.
func (m NewMessage) String() string {
ct := "(nil)"
if m.ContentType != nil {
ct = *m.ContentType
}
md, _ := json.Marshal(m.Metadata)
return fmt.Sprintf("[NewMessage] topic='%s' data='%s' content-type='%s' metadata=%s", m.Topic, string(m.Data), ct, md)
}
// BulkMessage represents bulk message arriving from a message bus instance.
type BulkMessage struct {
Entries []BulkMessageEntry `json:"entries"`
Topic string `json:"topic"`
Metadata map[string]string `json:"metadata"`
}
// String implements fmt.Stringer and it's useful for debugging.
func (m BulkMessage) String() string {
md, _ := json.Marshal(m.Metadata)
b := strings.Builder{}
b.WriteString(fmt.Sprintf("[BulkMessage] topic='%s' metadata=%s entries=%d", m.Topic, md, len(m.Entries)))
for i, e := range m.Entries {
b.WriteString(fmt.Sprintf("\n%d: ", i))
b.WriteString(e.String())
}
return b.String()
}
// BulkMessageEntry represents a single message inside a bulk request.
type BulkMessageEntry struct {
EntryId string `json:"entryId"` //nolint:stylecheck
Event []byte `json:"event"`
ContentType string `json:"contentType,omitempty"`
Metadata map[string]string `json:"metadata"`
}
// String implements fmt.Stringer and it's useful for debugging.
func (m BulkMessageEntry) String() string {
md, _ := json.Marshal(m.Metadata)
return fmt.Sprintf("[BulkMessageEntry] entryId='%s' data='%s' content-type='%s' metadata=%s", m.EntryId, string(m.Event), m.ContentType, md)
}
// BulkSubscribeConfig represents the configuration for bulk subscribe.
// It depends on specific componets to support these.
type BulkSubscribeConfig struct {
MaxMessagesCount int `json:"maxMessagesCount,omitempty"`
MaxAwaitDurationMs int `json:"maxAwaitDurationMs,omitempty"`
}