github.com/urso/go-structform@v0.0.2/gotype/fold_map_inline.yml (about)

     1  import:
     2    - types.yml
     3  
     4  main: |
     5    package gotype
     6  
     7    import (
     8      "reflect"
     9  
    10      stunsafe "github.com/urso/go-structform/internal/unsafe"
    11    )
    12  
    13    var _mapInlineMapping = map[reflect.Type]reFoldFn{
    14      {{ range data.primitiveTypes }}
    15        {{- $t := capitalize . -}}
    16      t{{ $t }}: foldMapInline{{ $t }},
    17      {{ end }}
    18    }
    19  
    20    func getMapInlineByPrimitiveElem(t reflect.Type) reFoldFn {
    21      if t == tInterface {
    22        return foldMapInlineInterface
    23      }
    24      return _mapInlineMapping[t]
    25    }
    26  
    27    func foldMapInlineInterface(C *foldContext, v reflect.Value) (err error) {
    28      ptr := unsafe.Pointer(v.Pointer())
    29      if ptr == nil {
    30        return nil
    31      }
    32  
    33      m := *((*map[string]interface{})(unsafe.Pointer(&ptr)))
    34      for k, v := range m {
    35        if err = C.OnKey(k); err != nil {
    36          return err
    37        }
    38        if err = foldInterfaceValue(C, v); err != nil {
    39          return err
    40        }
    41      }
    42      return
    43    }
    44  
    45    {{ range data.primitiveTypes }}
    46      {{ $t := capitalize . }}
    47      func foldMapInline{{ $t }}(C *foldContext, v reflect.Value) (err error) {
    48        ptr := unsafe.Pointer(v.Pointer())
    49        if ptr == nil {
    50          return nil
    51        }
    52  
    53        m := *((*map[string]{{ . }})(unsafe.Pointer(&ptr)))
    54        for k, v := range m {
    55          if err = C.OnKey(k); err != nil {
    56            return err
    57          }
    58          if err = C.On{{ $t }}(v); err != nil {
    59            return err
    60          }
    61        }
    62        return
    63      }
    64    {{ end }}