Skip to content

Commit

Permalink
Merge pull request #8 from liamg/liamg-fix-string-alias-prt-types
Browse files Browse the repository at this point in the history
Add support for various pointer types
  • Loading branch information
oranmoshai authored Nov 4, 2021
2 parents ae45ce3 + f6fb1e1 commit f5d02b2
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 19 deletions.
12 changes: 6 additions & 6 deletions decoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,19 +176,19 @@ func unmarshalField(
case reflect.Bool:
valueField.SetBool(boolRegex.MatchString(strings.ToLower(params[param])))
case reflect.Ptr:
switch typeField.Elem().Kind() {
case reflect.Struct:
if val, ok := params[param]; ok {
if val, ok := params[param]; ok {
switch typeField.Elem().Kind() {
case reflect.Int, reflect.Int32, reflect.Int64, reflect.String, reflect.Float32, reflect.Float64:
valueField.Set(reflect.ValueOf(&val).Convert(typeField))
case reflect.Struct:
if typeField.Elem() == reflect.TypeOf(time.Now()) {
parsedTime, err := time.Parse(time.RFC3339, val)
if err != nil {
return err
}
valueField.Set(reflect.ValueOf(&parsedTime))
}
}
case reflect.Bool:
if val, ok := params[param]; ok {
case reflect.Bool:
b := boolRegex.MatchString(strings.ToLower(val))
valueField.Set(reflect.ValueOf(&b))
}
Expand Down
11 changes: 10 additions & 1 deletion decoder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ import (
"github.com/jgroeneveld/trial/assert"
)

type stringAliasExample string

const aliasExample stringAliasExample = "world"

func Test_UnmarshalRequest(t *testing.T) {
t.Run("valid path&query input", func(t *testing.T) {
var input mockListRequest
Expand All @@ -25,6 +29,8 @@ func Test_UnmarshalRequest(t *testing.T) {
"bool": "true",
"pbool1": "0",
"time": "2021-11-01T11:11:11.000Z",
"alias": "hello",
"alias_ptr": "world",
},
MultiValueQueryStringParameters: map[string][]string{
"terms": []string{"one", "two"},
Expand All @@ -49,8 +55,11 @@ func Test_UnmarshalRequest(t *testing.T) {
assert.True(t, input.Bool, "Bool must be true")
assert.NotNil(t, input.PBoolOne, "PBoolOne must not be nil")
assert.False(t, *input.PBoolOne, "PBoolOne must be *false")
assert.NotNil(t, *input.Time, "Time must not be nil")
assert.NotNil(t, input.Time, "Time must not be nil")
assert.Equal(t, input.Time.Format(time.RFC3339), "2021-11-01T11:11:11Z")
assert.Equal(t, input.Alias, stringAliasExample("hello"))
assert.NotNil(t, input.AliasPtr)
assert.Equal(t, *input.AliasPtr, aliasExample)
assert.Equal(t, (*bool)(nil), input.PBoolTwo, "PBoolTwo must be nil")
assert.DeepEqual(t, []string{"one", "two"}, input.Terms, "Terms must be parsed from multiple query params")
assert.DeepEqual(t, []float64{1.2, 3.5, 666.666}, input.Numbers, "Numbers must be parsed from multiple query params")
Expand Down
26 changes: 14 additions & 12 deletions structs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,20 @@ const (
)

type mockListRequest struct {
ID string `lambda:"path.id"`
Page int64 `lambda:"query.page"`
PageSize int64 `lambda:"query.page_size"`
Terms []string `lambda:"query.terms"`
Numbers []float64 `lambda:"query.numbers"`
Const mockConst `lambda:"query.const"`
Bool bool `lambda:"query.bool"`
PBoolOne *bool `lambda:"query.pbool1"`
PBoolTwo *bool `lambda:"query.pbool2"`
Time *time.Time `lambda:"query.time"`
Language string `lambda:"header.Accept-Language"`
Encoding []string `lambda:"header.Accept-Encoding"`
ID string `lambda:"path.id"`
Page int64 `lambda:"query.page"`
PageSize int64 `lambda:"query.page_size"`
Terms []string `lambda:"query.terms"`
Numbers []float64 `lambda:"query.numbers"`
Const mockConst `lambda:"query.const"`
Bool bool `lambda:"query.bool"`
PBoolOne *bool `lambda:"query.pbool1"`
PBoolTwo *bool `lambda:"query.pbool2"`
Time *time.Time `lambda:"query.time"`
Alias stringAliasExample `lambda:"query.alias"`
AliasPtr *stringAliasExample `lambda:"query.alias_ptr"`
Language string `lambda:"header.Accept-Language"`
Encoding []string `lambda:"header.Accept-Encoding"`
}

type mockGetRequest struct {
Expand Down

0 comments on commit f5d02b2

Please sign in to comment.