From 04c5c27e7678f40e63ac3f1f1665cc49fc75b11d Mon Sep 17 00:00:00 2001 From: mzack Date: Fri, 21 Jul 2023 15:54:54 +0200 Subject: [PATCH 1/2] adding value or default context helper --- context/context.go | 15 ++++++++++++++- context/context_test.go | 8 ++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/context/context.go b/context/context.go index a395597..267c36b 100644 --- a/context/context.go +++ b/context/context.go @@ -7,8 +7,12 @@ import ( var ErrIncorrectNumberOfItems = errors.New("number of items is not even") +var DefaultContext = context.TODO() + +type ContextArg string + // WithValues combines multiple key-value into an existing context -func WithValues(ctx context.Context, keyValue ...string) (context.Context, error) { +func WithValues(ctx context.Context, keyValue ...ContextArg) (context.Context, error) { if len(keyValue)%2 != 0 { return ctx, ErrIncorrectNumberOfItems } @@ -18,3 +22,12 @@ func WithValues(ctx context.Context, keyValue ...string) (context.Context, error } return ctx, nil } + +// ValueOrDefault returns default context if given is nil (using interface to avoid static check reporting) +func ValueOrDefault(value interface{}) context.Context { + if ctx, ok := value.(context.Context); ok && ctx != nil { + return ctx + } + + return DefaultContext +} diff --git a/context/context_test.go b/context/context_test.go index b725556..f973611 100644 --- a/context/context_test.go +++ b/context/context_test.go @@ -10,7 +10,7 @@ import ( func TestWithValues(t *testing.T) { type testCase struct { name string - keyValue []string + keyValue []ContextArg expectedError error expectedValue map[string]string } @@ -18,19 +18,19 @@ func TestWithValues(t *testing.T) { var testCases = []testCase{ { name: "even number of key-value pairs", - keyValue: []string{"key1", "value1", "key2", "value2"}, + keyValue: []ContextArg{"key1", "value1", "key2", "value2"}, expectedError: nil, expectedValue: map[string]string{"key1": "value1", "key2": "value2"}, }, { name: "odd number of key-value pairs", - keyValue: []string{"key1", "value1", "key2"}, + keyValue: []ContextArg{"key1", "value1", "key2"}, expectedError: ErrIncorrectNumberOfItems, expectedValue: map[string]string{}, }, { name: "overwriting values", - keyValue: []string{"key1", "value1", "key1", "newValue"}, + keyValue: []ContextArg{"key1", "value1", "key1", "newValue"}, expectedError: nil, expectedValue: map[string]string{"key1": "newValue"}, }, From 6a901830422c157087b57e627c154e5c5a48fe03 Mon Sep 17 00:00:00 2001 From: mzack Date: Tue, 8 Aug 2023 08:25:45 +0200 Subject: [PATCH 2/2] fixing type --- context/context_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/context/context_test.go b/context/context_test.go index f973611..633e40a 100644 --- a/context/context_test.go +++ b/context/context_test.go @@ -12,7 +12,7 @@ func TestWithValues(t *testing.T) { name string keyValue []ContextArg expectedError error - expectedValue map[string]string + expectedValue map[ContextArg]ContextArg } var testCases = []testCase{ @@ -20,19 +20,19 @@ func TestWithValues(t *testing.T) { name: "even number of key-value pairs", keyValue: []ContextArg{"key1", "value1", "key2", "value2"}, expectedError: nil, - expectedValue: map[string]string{"key1": "value1", "key2": "value2"}, + expectedValue: map[ContextArg]ContextArg{"key1": "value1", "key2": "value2"}, }, { name: "odd number of key-value pairs", keyValue: []ContextArg{"key1", "value1", "key2"}, expectedError: ErrIncorrectNumberOfItems, - expectedValue: map[string]string{}, + expectedValue: map[ContextArg]ContextArg{}, }, { name: "overwriting values", keyValue: []ContextArg{"key1", "value1", "key1", "newValue"}, expectedError: nil, - expectedValue: map[string]string{"key1": "newValue"}, + expectedValue: map[ContextArg]ContextArg{"key1": "newValue"}, }, } ctx := context.Background()