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
 | |
| }
 |