Skip to content

Commit

Permalink
Nullable type for tasks that return null
Browse files Browse the repository at this point in the history
  • Loading branch information
OtavioHenrique committed Apr 15, 2024
1 parent be0037c commit 2d61198
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 11 deletions.
3 changes: 3 additions & 0 deletions pkg/task/nullable.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package task

type Nullable struct{}
7 changes: 4 additions & 3 deletions pkg/task/s3/s3_uploader.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3iface"
"github.com/otaviohenrique/vecna/pkg/task"
)

// S3Uploader is a task which will upload a given data on the given path (key) of one bucket
type S3Uploader[I *S3UploaderInput, O []byte] struct {
type S3Uploader[I *S3UploaderInput, O task.Nullable] struct {
// S3 AWS client to be used
client s3iface.S3API
// Bucket name where all objects will be stored
Expand All @@ -28,7 +29,7 @@ type S3UploaderInput struct {
Content []byte
}

func NewS3Uploader[I *S3UploaderInput, O []byte](client s3iface.S3API, bucketName string, logger *slog.Logger) *S3Uploader[I, O] {
func NewS3Uploader[I *S3UploaderInput, O task.Nullable](client s3iface.S3API, bucketName string, logger *slog.Logger) *S3Uploader[I, O] {
u := new(S3Uploader[I, O])

u.client = client
Expand All @@ -43,7 +44,7 @@ func NewS3Uploader[I *S3UploaderInput, O []byte](client s3iface.S3API, bucketNam
func (s *S3Uploader[I, O]) Run(_ context.Context, input I, meta map[string]interface{}, _ string) (O, error) {
err := s.uploadObject(input)

return nil, err
return O(task.Nullable{}), err
}

func (s *S3Uploader[T, K]) uploadObject(input *S3UploaderInput) error {
Expand Down
9 changes: 5 additions & 4 deletions pkg/task/sqs/sqs_deleter.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/sqs"
"github.com/aws/aws-sdk-go/service/sqs/sqsiface"
"github.com/otaviohenrique/vecna/pkg/task"
)

type SQSDeleterOpts struct {
Expand All @@ -16,15 +17,15 @@ type SQSDeleterOpts struct {
}

// SQSDeleter will delete a message on SQS based on a given receiptHandle
type SQSDeleter[I string, O []byte] struct {
type SQSDeleter[I string, O task.Nullable] struct {
// SQS AWS Client to be used
client sqsiface.SQSAPI
logger *slog.Logger
opts *SQSDeleterOpts
queueURL *string
}

func NewSQSDeleter[I string, O []byte](client sqsiface.SQSAPI, logger *slog.Logger, opts *SQSDeleterOpts) *SQSDeleter[I, O] {
func NewSQSDeleter[I string, O task.Nullable](client sqsiface.SQSAPI, logger *slog.Logger, opts *SQSDeleterOpts) *SQSDeleter[I, O] {
c := new(SQSDeleter[I, O])

c.client = client
Expand Down Expand Up @@ -54,12 +55,12 @@ func (s *SQSDeleter[I, O]) Run(_ context.Context, input I, meta map[string]inter
_, err := s.deleteMessage(string(input))

if err != nil {
return nil, err
return O(task.Nullable{}), err
}

s.logger.Debug("sqs message deleted", "receiptHandle", string(input))

return nil, nil
return O(task.Nullable{}), nil
}

func (s *SQSDeleter[I, O]) deleteMessage(receipt string) (*sqs.DeleteMessageOutput, error) {
Expand Down
3 changes: 2 additions & 1 deletion pkg/task/sqs/sqs_deleter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/aws/aws-sdk-go/aws"
awsSqs "github.com/aws/aws-sdk-go/service/sqs"
"github.com/aws/aws-sdk-go/service/sqs/sqsiface"
"github.com/otaviohenrique/vecna/pkg/task"
"github.com/otaviohenrique/vecna/pkg/task/sqs"
)

Expand Down Expand Up @@ -97,7 +98,7 @@ func TestSQSDeleter_Run(t *testing.T) {
t.Errorf("SQSDeleter.Run() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !tt.wantErr && got != nil {
if !tt.wantErr && (got != task.Nullable{}) {
t.Errorf("SQSDeleter.Run() = %v, want %v", got, nil)
}
})
Expand Down
7 changes: 4 additions & 3 deletions pkg/task/sqs/sqs_producer.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/sqs"
"github.com/aws/aws-sdk-go/service/sqs/sqsiface"
"github.com/otaviohenrique/vecna/pkg/task"
)

// SQS Producer options
Expand All @@ -24,15 +25,15 @@ type SQSProducerInput struct {
}

// Simple generic task to produce messages to SQS
type SQSProducer[I SQSProducerInput, O []byte] struct { //TODO nullable type
type SQSProducer[I SQSProducerInput, O task.Nullable] struct { //TODO nullable type
// SQS AWS client to be used
client sqsiface.SQSAPI
logger *slog.Logger
opts *SQSProducerOpts
queueURL *string
}

func NewSQSProducer[I SQSProducerInput, O []byte](client sqsiface.SQSAPI, logger *slog.Logger, opts *SQSProducerOpts) *SQSProducer[I, O] {
func NewSQSProducer[I SQSProducerInput, O task.Nullable](client sqsiface.SQSAPI, logger *slog.Logger, opts *SQSProducerOpts) *SQSProducer[I, O] {
p := new(SQSProducer[I, O])

p.client = client
Expand Down Expand Up @@ -68,5 +69,5 @@ func (c *SQSProducer[I, O]) Run(_ context.Context, i I, meta map[string]interfac
QueueUrl: c.queueURL,
})

return nil, err
return O(task.Nullable{}), err
}

0 comments on commit 2d61198

Please sign in to comment.