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

     1  import:
     2    - "types.yml"
     3  
     4  # makeUnfoldType(name, [.base])
     5  templates.makeUnfoldType: |
     6    {{ $name := .name }}
     7    {{ $base := default "unfolderErrUnknown" .base }}
     8  
     9    type {{ $name }} struct {
    10      {{ $base }}
    11    }
    12  
    13    var _singleton{{ $name | capitalize }} = &{{ $name }}{}
    14  
    15    func new{{ $name | capitalize }}() *{{ $name }} {
    16      return _singleton{{ $name | capitalize }}
    17    }
    18  
    19  # makeType(.)  -> invokes makeTypeWithName(name, type)
    20  templates.makeType: |
    21    {{ invoke "makeTypeWithName" "name" (capitalize .) "type" . }}
    22  
    23  # makeBoolFns(name, fn)
    24  templates.onBoolFns: |
    25    {{ invoke "onNil" "name" .name "fn" .fn "default" "false" }}
    26    {{ invoke "onBool" "name" .name "fn" .fn }}
    27  
    28  # makeStringFns(name, fn)
    29  templates.onStringFns: |
    30    {{ invoke "onNil" "name" .name "fn" .fn "default" "\"\"" }}
    31    {{ invoke "onString" "name" .name "fn" .fn }}
    32  
    33  # makeNumberFns(name, fn)
    34  templates.onNumberFns: |
    35    {{ invoke "onNil" "name" .name "fn" .fn "default" "0" }}
    36    {{ invoke "onNumber" "name" .name "type" .type "fn" .fn }}
    37  
    38  # onIfcFns(name, fn)
    39  templates.onIfcFns: |
    40    {{ invoke "onNil" "name" .name "fn" .fn "default" "nil" }}
    41    {{ invoke "onBool" "name" .name "fn" .fn }}
    42    {{ invoke "onString" "name" .name "fn" .fn }}
    43    {{ invoke "onNumber" "name" .name "type" "(interface{})" "fn" .fn }}
    44  
    45    func (*{{ .name }} ) OnArrayStart(ctx *unfoldCtx, l int, bt structform.BaseType) error {
    46      return unfoldIfcStartSubArray(ctx, l, bt)
    47    }
    48  
    49    func (u *{{ .name }}) OnChildArrayDone(ctx *unfoldCtx) error {
    50      v, err := unfoldIfcFinishSubArray(ctx)
    51      if err == nil {
    52        err = u.{{ .fn }}(ctx, v)
    53      }
    54      return err
    55    }
    56  
    57    func (*{{ .name }}) OnObjectStart(ctx *unfoldCtx, l int, bt structform.BaseType) error {
    58      return unfoldIfcStartSubMap(ctx, l, bt)
    59    }
    60  
    61    func (u *{{ .name }}) OnChildObjectDone(ctx *unfoldCtx) error {
    62      v, err := unfoldIfcFinishSubMap(ctx)
    63      if err == nil {
    64        err = u.{{ .fn }}(ctx, v)
    65      }
    66      return err
    67    }
    68  
    69  
    70  # onBool(name, fn)
    71  templates.onBool: |
    72    func (u *{{ .name }}) OnBool(ctx *unfoldCtx, v bool) error { return u.{{ .fn }} (ctx, v) }
    73  
    74  # onString(name, fn)
    75  templates.onString: |
    76    func (u *{{ .name }}) OnString(ctx *unfoldCtx, v string) error { return u.{{ .fn }} (ctx, v) }
    77    func (u *{{ .name }}) OnStringRef(ctx *unfoldCtx, v []byte) error {
    78      return u.OnString(ctx, string(v))
    79    }
    80  
    81  
    82  # onNil(name, fn, default)
    83  templates.onNil: |
    84    func (u *{{ .name }}) OnNil(ctx *unfoldCtx) error {
    85      return u.{{ .fn }}(ctx, {{ .default }})
    86    }
    87  
    88  
    89  # onNumber(name, fn, type)
    90  templates.onNumber: |
    91    {{ $name := .name }}
    92    {{ $fn := .fn }}
    93    {{ $type := .type }}
    94  
    95    func (u *{{ $name }}) OnByte(ctx *unfoldCtx, v byte) error {
    96      return u.{{ $fn }}(ctx, {{ $type }}(v))
    97    }
    98    {{ range $t := data.numTypes }}
    99      func (u *{{ $name }}) On{{ $t | capitalize}}(ctx *unfoldCtx, v {{ $t }}) error {
   100        return u.{{ $fn }}(ctx, {{ $type }}(v))
   101      }
   102    {{ end }}