Skip to content

Commit

Permalink
Merge 5350ab6 into 5e38d0b
Browse files Browse the repository at this point in the history
  • Loading branch information
iFaceless committed Oct 14, 2019
2 parents 5e38d0b + 5350ab6 commit bca8f29
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
18 changes: 17 additions & 1 deletion chell_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,24 @@ func TestDumpOneFilterOnlyFields(t *testing.T) {
err = Dump(&taskSchema3, &task, Only("title", "simple_user"), FieldAliasMapTagName("json"))
assert.Nil(t, err)

data, _ = json.Marshal(taskSchema)
data, _ = json.Marshal(taskSchema3)
assert.Equal(t, `{"title":"Finish your jobs.","simple_user":{"name":"user:1"},"unknown":""}`, string(data))

// nil pointer
var taskSchema4 *TaskSchema
err = Dump(&taskSchema4, &task, Only("title", "simple_user"), FieldAliasMapTagName("json"))
assert.Nil(t, err)

data, _ = json.Marshal(taskSchema4)
assert.Equal(t, `{"title":"Finish your jobs.","simple_user":{"name":"user:1"},"unknown":""}`, string(data))

// non-nil pointer to schema
var taskSchema5 = &TaskSchema{Unknown: "unknown"}
err = Dump(&taskSchema5, &task, Only("title", "simple_user"), FieldAliasMapTagName("json"))
assert.Nil(t, err)

data, _ = json.Marshal(taskSchema5)
assert.Equal(t, `{"title":"Finish your jobs.","simple_user":{"name":"user:1"},"unknown":"unknown"}`, string(data))
}

func TestDumpOneExcludeFields(t *testing.T) {
Expand Down
14 changes: 9 additions & 5 deletions schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,16 @@ func newSchema(v interface{}) *schema {
case reflect.Ptr:
// var schema *SchemaStruct
// ptr := &schema
typ, err := innerStructType(rv.Type())
if err != nil {
panic(fmt.Errorf("cannot get schema struct: %s", err))
if rv.Elem().IsNil() {
typ, err := innerStructType(rv.Type())
if err != nil {
panic(fmt.Errorf("cannot get schema struct: %s", err))
}
schemaValue = reflect.New(typ).Elem()
rv.Elem().Set(schemaValue.Addr())
} else {
schemaValue = rv.Elem().Elem()
}
schemaValue = reflect.New(typ).Elem()
rv.Elem().Set(schemaValue.Addr())
default:
panic("expect a pointer to struct")
}
Expand Down

0 comments on commit bca8f29

Please sign in to comment.