Skip to content

Commit 71dd5d0

Browse files
authored
Merge pull request #67 from ekristen/feat-props-time
2 parents 64c441c + fb9a96a commit 71dd5d0

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

pkg/types/properties.go

+15-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"reflect"
66
"strings"
7+
"time"
78
)
89

910
// Properties is a map of key-value pairs.
@@ -51,7 +52,7 @@ func (p Properties) Get(key string) string {
5152
}
5253

5354
// Set sets a key-value pair in the Properties map.
54-
func (p Properties) Set(key string, value interface{}) Properties {
55+
func (p Properties) Set(key string, value interface{}) Properties { //nolint:gocyclo
5556
if value == nil {
5657
return p
5758
}
@@ -62,23 +63,33 @@ func (p Properties) Set(key string, value interface{}) Properties {
6263
return p
6364
}
6465
p[key] = *v
66+
case string:
67+
p[key] = v
6568
case []byte:
6669
p[key] = string(v)
6770
case *bool:
6871
if v == nil {
6972
return p
7073
}
7174
p[key] = fmt.Sprint(*v)
75+
case bool:
76+
p[key] = fmt.Sprint(v)
7277
case *int64:
7378
if v == nil {
7479
return p
7580
}
7681
p[key] = fmt.Sprint(*v)
82+
case int64:
83+
p[key] = fmt.Sprint(v)
7784
case *int:
7885
if v == nil {
7986
return p
8087
}
8188
p[key] = fmt.Sprint(*v)
89+
case int:
90+
p[key] = fmt.Sprint(v)
91+
case time.Time:
92+
p[key] = v.Format(time.RFC3339)
8293
default:
8394
// Fallback to Stringer interface. This produces gibberish on pointers,
8495
// but is the only way to avoid reflection.
@@ -233,7 +244,9 @@ func (p Properties) SetFromStruct(data interface{}) Properties { //nolint:funlen
233244

234245
switch value.Kind() {
235246
case reflect.Struct:
236-
// do nothing
247+
if value.Type().String() == "time.Time" {
248+
p.SetWithPrefix(prefix, name, value.Interface())
249+
}
237250
case reflect.Map:
238251
for _, key := range value.MapKeys() {
239252
val := value.MapIndex(key)

pkg/types/properties_test.go

+37
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package types_test
33
import (
44
"fmt"
55
"testing"
6+
"time"
67

78
"github.com/gotidy/ptr"
89
"github.com/stretchr/testify/assert"
@@ -404,6 +405,18 @@ func TestPropertiesSetFromStruct(t *testing.T) {
404405
Region string
405406
}
406407

408+
type testStruct11 struct {
409+
Name string
410+
CreatedTime time.Time
411+
DeletedTime *time.Time
412+
}
413+
414+
type testStruct12 struct {
415+
Name string
416+
CreatedTime time.Time `property:"prefix=created"`
417+
DeletedTime *time.Time `property:"prefix=deleted"`
418+
}
419+
407420
cases := []struct {
408421
name string
409422
s interface{}
@@ -525,6 +538,30 @@ func TestPropertiesSetFromStruct(t *testing.T) {
525538
},
526539
want: types.NewProperties().Set("Region", "us-west-2"),
527540
},
541+
{
542+
name: "time",
543+
s: testStruct11{
544+
Name: "Alice",
545+
CreatedTime: time.Date(2021, 1, 5, 10, 12, 56, 3309, time.UTC),
546+
DeletedTime: ptr.Time(time.Date(2023, 7, 15, 5, 32, 12, 4506, time.UTC)),
547+
},
548+
want: types.NewProperties().
549+
Set("Name", "Alice").
550+
Set("CreatedTime", "2021-01-05T10:12:56Z").
551+
Set("DeletedTime", "2023-07-15T05:32:12Z"),
552+
},
553+
{
554+
name: "time-with-prefix",
555+
s: testStruct12{
556+
Name: "Alice",
557+
CreatedTime: time.Date(2021, 1, 5, 10, 12, 56, 3309, time.UTC),
558+
DeletedTime: ptr.Time(time.Date(2023, 7, 15, 5, 32, 12, 4506, time.UTC)),
559+
},
560+
want: types.NewProperties().
561+
Set("Name", "Alice").
562+
Set("created:CreatedTime", "2021-01-05T10:12:56Z").
563+
Set("deleted:DeletedTime", "2023-07-15T05:32:12Z"),
564+
},
528565
}
529566

530567
for _, tc := range cases {

0 commit comments

Comments
 (0)