MCPcopy
hub / github.com/openai/openai-go / newTypeDecoder

Method newTypeDecoder

internal/apijson/decoder.go:173–242  ·  view source on GitHub ↗
(t reflect.Type)

Source from the content-addressed store, hash-verified

171}
172
173func (d *decoderBuilder) newTypeDecoder(t reflect.Type) decoderFunc {
174 if t.ConvertibleTo(reflect.TypeOf(time.Time{})) {
175 return d.newTimeTypeDecoder(t)
176 }
177
178 if t.Implements(reflect.TypeOf((*param.Optional)(nil)).Elem()) {
179 return d.newOptTypeDecoder(t)
180 }
181
182 if !d.root && t.Implements(reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()) {
183 return unmarshalerDecoder
184 }
185 if !d.root && reflect.PointerTo(t).Implements(reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()) {
186 if _, ok := unionVariants[t]; !ok {
187 return indirectUnmarshalerDecoder
188 }
189 }
190 d.root = false
191
192 if _, ok := unionRegistry[t]; ok {
193 if isStructUnion(t) {
194 return d.newStructUnionDecoder(t)
195 }
196 return d.newUnionDecoder(t)
197 }
198
199 switch t.Kind() {
200 case reflect.Pointer:
201 inner := t.Elem()
202 innerDecoder := d.typeDecoder(inner)
203
204 return func(n gjson.Result, v reflect.Value, state *decoderState) error {
205 if !v.IsValid() {
206 return fmt.Errorf("apijson: unexpected invalid reflection value %+#v", v)
207 }
208
209 newValue := reflect.New(inner).Elem()
210 err := innerDecoder(n, newValue, state)
211 if err != nil {
212 return err
213 }
214
215 v.Set(newValue.Addr())
216 return nil
217 }
218 case reflect.Struct:
219 if isStructUnion(t) {
220 return d.newStructUnionDecoder(t)
221 }
222 return d.newStructTypeDecoder(t)
223 case reflect.Array:
224 fallthrough
225 case reflect.Slice:
226 return d.newArrayTypeDecoder(t)
227 case reflect.Map:
228 return d.newMapDecoder(t)
229 case reflect.Interface:
230 return func(node gjson.Result, value reflect.Value, state *decoderState) error {

Callers 1

typeDecoderMethod · 0.95

Calls 11

newTimeTypeDecoderMethod · 0.95
newOptTypeDecoderMethod · 0.95
newStructUnionDecoderMethod · 0.95
newUnionDecoderMethod · 0.95
typeDecoderMethod · 0.95
newStructTypeDecoderMethod · 0.95
newArrayTypeDecoderMethod · 0.95
newMapDecoderMethod · 0.95
isStructUnionFunction · 0.85
NewMethod · 0.45

Tested by

no test coverage detected