fix: wrong the detection method of nilable

fix #339
This commit is contained in:
Nao Yonashiro 2022-05-04 23:40:12 +09:00
parent 3fdc55a60a
commit 2ea7ab6e24
2 changed files with 21 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import (
"fmt"
"log"
"math"
"math/big"
"reflect"
"regexp"
"strconv"
@ -2388,3 +2389,20 @@ func TestIssue324(t *testing.T) {
t.Fatalf("failed to encode. expected %q but got %q", expected, got)
}
}
func TestIssue339(t *testing.T) {
type T1 struct {
*big.Int
}
type T2 struct {
T1 T1 `json:"T1"`
}
v := T2{T1{Int: big.NewInt(10000)}}
b, err := json.Marshal(&v)
assertErr(t, err)
got := string(b)
expected := `{"T1":10000}`
if got != expected {
t.Errorf("unexpected result: %v != %v", got, expected)
}
}

View File

@ -853,6 +853,9 @@ func (c *Compiler) implementsMarshalText(typ *runtime.Type) bool {
}
func (c *Compiler) isNilableType(typ *runtime.Type) bool {
if !runtime.IfaceIndir(typ) {
return true
}
switch typ.Kind() {
case reflect.Ptr:
return true