69 lines
1.1 KiB
Go
69 lines
1.1 KiB
Go
package cloud_pubsub
|
|
|
|
import (
|
|
"cloud.google.com/go/pubsub"
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
type (
|
|
subscription interface {
|
|
ID() string
|
|
Receive(ctx context.Context, f func(context.Context, message)) error
|
|
}
|
|
|
|
message interface {
|
|
Ack()
|
|
Nack()
|
|
ID() string
|
|
Data() []byte
|
|
Attributes() map[string]string
|
|
PublishTime() time.Time
|
|
}
|
|
|
|
gcpSubscription struct {
|
|
sub *pubsub.Subscription
|
|
}
|
|
|
|
gcpMessage struct {
|
|
msg *pubsub.Message
|
|
}
|
|
)
|
|
|
|
func (s *gcpSubscription) ID() string {
|
|
if s.sub == nil {
|
|
return ""
|
|
}
|
|
return s.sub.ID()
|
|
}
|
|
|
|
func (s *gcpSubscription) Receive(ctx context.Context, f func(context.Context, message)) error {
|
|
return s.sub.Receive(ctx, func(cctx context.Context, m *pubsub.Message) {
|
|
f(cctx, &gcpMessage{m})
|
|
})
|
|
}
|
|
|
|
func (env *gcpMessage) Ack() {
|
|
env.msg.Ack()
|
|
}
|
|
|
|
func (env *gcpMessage) Nack() {
|
|
env.msg.Nack()
|
|
}
|
|
|
|
func (env *gcpMessage) ID() string {
|
|
return env.msg.ID
|
|
}
|
|
|
|
func (env *gcpMessage) Data() []byte {
|
|
return env.msg.Data
|
|
}
|
|
|
|
func (env *gcpMessage) Attributes() map[string]string {
|
|
return env.msg.Attributes
|
|
}
|
|
|
|
func (env *gcpMessage) PublishTime() time.Time {
|
|
return env.msg.PublishTime
|
|
}
|