Merging
This commit is contained in:
commit
6477af1f24
2 changed files with 25 additions and 8 deletions
|
@ -239,8 +239,8 @@ func TestUnmarshal(t *testing.T) {
|
||||||
Q string "q"
|
Q string "q"
|
||||||
A map[string]string "a"
|
A map[string]string "a"
|
||||||
}
|
}
|
||||||
//innerDict := map[string]string{"id": "abcdefghij0123456789"}
|
innerDict := map[string]string{"id": "abcdefghij0123456789"}
|
||||||
//nestedDictionary := structNested{"aa", "q", "ping", innerDict}
|
nestedDictionary := structNested{"aa", "q", "ping", innerDict}
|
||||||
|
|
||||||
tests := []SVPair{
|
tests := []SVPair{
|
||||||
SVPair{"i100e", 100},
|
SVPair{"i100e", 100},
|
||||||
|
@ -253,9 +253,9 @@ func TestUnmarshal(t *testing.T) {
|
||||||
SVPair{"l3:abc3:defe", []string{"abc", "def"}},
|
SVPair{"l3:abc3:defe", []string{"abc", "def"}},
|
||||||
SVPair{"li42e3:abce", []any{42, "abc"}},
|
SVPair{"li42e3:abce", []any{42, "abc"}},
|
||||||
SVPair{"de", map[string]any{}},
|
SVPair{"de", map[string]any{}},
|
||||||
//SVPair{"d3:cati1e3:dogi2ee", map[string]any{"cat": 1, "dog": 2}},
|
SVPair{"d3:cati1e3:dogi2ee", map[string]any{"cat": 1, "dog": 2}},
|
||||||
SVPair{"d1:ai10e1:b3:fooe", structA{10, "foo"}},
|
SVPair{"d1:ai10e1:b3:fooe", structA{10, "foo"}},
|
||||||
//SVPair{"d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe", nestedDictionary},
|
SVPair{"d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe", nestedDictionary},
|
||||||
}
|
}
|
||||||
for _, sv := range tests {
|
for _, sv := range tests {
|
||||||
if err := checkUnmarshal(sv.s, sv.v); err != nil {
|
if err := checkUnmarshal(sv.s, sv.v); err != nil {
|
||||||
|
|
25
struct.go
25
struct.go
|
@ -72,6 +72,10 @@ func (b *structBuilder) Int64(i int64) {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if !b.val.CanSet() {
|
||||||
|
x := 0
|
||||||
|
b.val = reflect.ValueOf(&x).Elem()
|
||||||
|
}
|
||||||
v := b.val
|
v := b.val
|
||||||
if isfloat(v) {
|
if isfloat(v) {
|
||||||
setfloat(v, float64(i))
|
setfloat(v, float64(i))
|
||||||
|
@ -84,6 +88,10 @@ func (b *structBuilder) Uint64(i uint64) {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if !b.val.CanSet() {
|
||||||
|
x := uint64(0)
|
||||||
|
b.val = reflect.ValueOf(&x).Elem()
|
||||||
|
}
|
||||||
v := b.val
|
v := b.val
|
||||||
if isfloat(v) {
|
if isfloat(v) {
|
||||||
setfloat(v, float64(i))
|
setfloat(v, float64(i))
|
||||||
|
@ -96,6 +104,10 @@ func (b *structBuilder) Float64(f float64) {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if !b.val.CanSet() {
|
||||||
|
x := float64(0)
|
||||||
|
b.val = reflect.ValueOf(&x).Elem()
|
||||||
|
}
|
||||||
v := b.val
|
v := b.val
|
||||||
if isfloat(v) {
|
if isfloat(v) {
|
||||||
setfloat(v, f)
|
setfloat(v, f)
|
||||||
|
@ -109,11 +121,16 @@ func (b *structBuilder) String(s string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch v := b.val; v.Kind() {
|
switch b.val.Kind() {
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
v.SetString(s)
|
if !b.val.CanSet() {
|
||||||
|
x := ""
|
||||||
|
b.val = reflect.ValueOf(&x).Elem()
|
||||||
|
|
||||||
|
}
|
||||||
|
b.val.SetString(s)
|
||||||
case reflect.Interface:
|
case reflect.Interface:
|
||||||
v.Set(reflect.ValueOf(s))
|
b.val.Set(reflect.ValueOf(s))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +181,7 @@ func (b *structBuilder) Map() {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if v := b.val; v.Kind() == reflect.Ptr && v.IsNil() {
|
if v := b.val; v.Kind() == reflect.Ptr {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
v.Set(reflect.Zero(v.Type().Elem()).Addr())
|
v.Set(reflect.Zero(v.Type().Elem()).Addr())
|
||||||
b.Flush()
|
b.Flush()
|
||||||
|
|
Loading…
Reference in a new issue