@@ -128,9 +128,6 @@ func fetchValue(desc *Descriptor, v reflect.Value, opt *FetchOptions) (interface
128128 case TypeKind_Struct :
129129 return fetchStruct (desc , v , opt )
130130
131- case TypeKind_List :
132- return fetchList (desc , v , opt )
133-
134131 case TypeKind_StrMap :
135132 return fetchStrMap (desc , v , opt )
136133
@@ -271,37 +268,6 @@ func fetchUnknownValue(val interface{}, desc *Descriptor) interface{} {
271268 }
272269 return result
273270
274- case TypeKind_List :
275- // ReadAny returns []interface{} for LIST type
276- listVal , ok := val .([]interface {})
277- if ! ok {
278- return val
279- }
280-
281- // Find wildcard or indexed descriptors
282- var wildcardDesc * Descriptor
283- indexDescMap := make (map [int ]* Descriptor , len (desc .Children ))
284- for i := range desc .Children {
285- child := & desc .Children [i ]
286- if child .Name == "*" {
287- wildcardDesc = child .Desc
288- } else {
289- indexDescMap [child .ID ] = child .Desc
290- }
291- }
292-
293- result := make ([]interface {}, len (listVal ))
294- for i , elem := range listVal {
295- if childDesc , ok := indexDescMap [i ]; ok {
296- result [i ] = fetchUnknownValue (elem , childDesc )
297- } else if wildcardDesc != nil {
298- result [i ] = fetchUnknownValue (elem , wildcardDesc )
299- } else {
300- result [i ] = elem
301- }
302- }
303- return result
304-
305271 case TypeKind_StrMap :
306272 // ReadAny returns map[string]interface{} for string-keyed MAP type
307273 strMap , ok := val .(map [string ]interface {})
@@ -338,91 +304,6 @@ func fetchUnknownValue(val interface{}, desc *Descriptor) interface{} {
338304 }
339305}
340306
341- // fetchList handles TypeKind_List
342- func fetchList (desc * Descriptor , v reflect.Value , opt * FetchOptions ) (interface {}, error ) {
343- kind := v .Kind ()
344- if kind != reflect .Slice && kind != reflect .Array {
345- return nil , nil
346- }
347-
348- childrenLen := len (desc .Children )
349- vLen := v .Len ()
350-
351- // Fast path: only wildcard descriptor
352- if childrenLen == 1 && desc .Children [0 ].Name == "*" {
353- wildcardDesc := desc .Children [0 ].Desc
354- result := make ([]interface {}, 0 , vLen )
355- for i := 0 ; i < vLen ; i ++ {
356- elem := v .Index (i )
357- if elem .Kind () == reflect .Ptr && elem .IsNil () {
358- result = append (result , nil )
359- continue
360- }
361- if wildcardDesc != nil {
362- fetched , err := fetchValue (wildcardDesc , elem , opt )
363- if err != nil {
364- return nil , err
365- }
366- result = append (result , fetched )
367- } else {
368- result = append (result , elem .Interface ())
369- }
370- }
371- return result , nil
372- }
373-
374- // Build a map of index -> descriptor for quick lookup
375- indexDescMap := make (map [int ]* Field , childrenLen )
376- var wildcardDesc * Field
377- for i := range desc .Children {
378- child := & desc .Children [i ]
379- if child .Name == "*" {
380- wildcardDesc = child
381- } else {
382- // Field.ID represents the slice index
383- indexDescMap [child .ID ] = child
384- }
385- }
386-
387- // Check if specific indices are requested but not available
388- if opt .DisallowNotFound {
389- for idx := range indexDescMap {
390- if idx >= vLen {
391- return nil , ErrNotFound {Parent : desc , Field : indexDescMap [idx ], Msg : fmt .Sprintf ("index %d out of range (len=%d)" , idx , vLen )}
392- }
393- }
394- }
395-
396- result := make ([]interface {}, 0 , vLen )
397- for i := 0 ; i < vLen ; i ++ {
398- elem := v .Index (i )
399- if elem .Kind () == reflect .Ptr && elem .IsNil () {
400- result = append (result , nil )
401- continue
402- }
403-
404- // First try to find descriptor by index (Field.ID)
405- var childDesc * Descriptor
406- if field , ok := indexDescMap [i ]; ok && field .Desc != nil {
407- childDesc = field .Desc
408- } else if wildcardDesc != nil && wildcardDesc .Desc != nil {
409- // Fallback to wildcard descriptor
410- childDesc = wildcardDesc .Desc
411- }
412-
413- if childDesc != nil {
414- fetched , err := fetchValue (childDesc , elem , opt )
415- if err != nil {
416- return nil , err
417- }
418- result = append (result , fetched )
419- } else {
420- result = append (result , elem .Interface ())
421- }
422- }
423- return result , nil
424- }
425-
426307// fetchStrMap handles TypeKind_StrMap
427308func fetchStrMap (desc * Descriptor , v reflect.Value , opt * FetchOptions ) (interface {}, error ) {
428309 if v .Kind () != reflect .Map || v .Type ().Key ().Kind () != reflect .String {
0 commit comments