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 }}