MCPcopy Create free account
hub / github.com/DeAI-Artist/Linkis / decodeReflectList

Function decodeReflectList

libs/json/decoder.go:101–148  ·  view source on GitHub ↗
(bz []byte, rv reflect.Value)

Source from the content-addressed store, hash-verified

99}
100
101func decodeReflectList(bz []byte, rv reflect.Value) error {
102 if !rv.CanAddr() {
103 return errors.New("list value is not addressable")
104 }
105
106 switch rv.Type().Elem().Kind() {
107 // Decode base64-encoded bytes using stdlib decoder, via byte slice for arrays.
108 case reflect.Uint8:
109 if rv.Type().Kind() == reflect.Array {
110 var buf []byte
111 if err := json.Unmarshal(bz, &buf); err != nil {
112 return err
113 }
114 if len(buf) != rv.Len() {
115 return fmt.Errorf("got %v bytes, expected %v", len(buf), rv.Len())
116 }
117 reflect.Copy(rv, reflect.ValueOf(buf))
118
119 } else if err := decodeStdlib(bz, rv); err != nil {
120 return err
121 }
122
123 // Decode anything else into a raw JSON slice, and decode values recursively.
124 default:
125 var rawSlice []json.RawMessage
126 if err := json.Unmarshal(bz, &rawSlice); err != nil {
127 return err
128 }
129 if rv.Type().Kind() == reflect.Slice {
130 rv.Set(reflect.MakeSlice(reflect.SliceOf(rv.Type().Elem()), len(rawSlice), len(rawSlice)))
131 }
132 if rv.Len() != len(rawSlice) { // arrays of wrong size
133 return fmt.Errorf("got list of %v elements, expected %v", len(rawSlice), rv.Len())
134 }
135 for i, bz := range rawSlice {
136 if err := decodeReflect(bz, rv.Index(i)); err != nil {
137 return err
138 }
139 }
140 }
141
142 // Replace empty slices with nil slices, for Amino compatibility
143 if rv.Type().Kind() == reflect.Slice && rv.Len() == 0 {
144 rv.Set(reflect.Zero(rv.Type()))
145 }
146
147 return nil
148}
149
150func decodeReflectMap(bz []byte, rv reflect.Value) error {
151 if !rv.CanAddr() {

Callers 1

decodeReflectFunction · 0.85

Calls 8

decodeStdlibFunction · 0.85
decodeReflectFunction · 0.85
TypeMethod · 0.65
CopyMethod · 0.65
SetMethod · 0.65
IndexMethod · 0.65
UnmarshalMethod · 0.45
LenMethod · 0.45

Tested by

no test coverage detected