1
1
mirror of https://github.com/wader/fq.git synced 2024-11-26 10:33:53 +03:00
fq/pkg/scalar/scalar_gen.go.tmpl
Mattias Wadman 1383b411ae decode,interp: Add arbitrary large integer support (BigInt)
Was already handled in fq in various places as gojq uses them

Update msgpack to support negative integers that can't represented as int64
Rename read try* number functions to make them more explicit
2022-01-15 19:00:42 +01:00

65 lines
1.4 KiB
Cheetah

// Code below generated from scalar_gen.go.tmpl
package scalar
import (
"fmt"
"math/big"
"github.com/wader/fq/pkg/bitio"
)
{{- range $name, $t := $.types }}
// Type {{$name}}
// Actual{{$name}} asserts actual value is a {{$name}} and returns it
func (s S) Actual{{$name}}() {{$t.go_type}} {
v, ok := s.Actual.({{$t.go_type}})
if !ok {
panic(fmt.Sprintf("failed to type assert s.Actual %v as {{$t.go_type}}", s.Actual))
}
return v
}
// Sym{{$name}} asserts symbolic value is a {{$name}} and returns it
func (s S) Sym{{$name}}() {{$t.go_type}} {
v, ok := s.Sym.({{$t.go_type}})
if !ok {
panic(fmt.Sprintf("failed to type assert s.Sym %v as {{$t.go_type}}", s.Sym))
}
return v
}
{{end}}
{{- range $from_name, $from := $.types }}
{{- if ne $from.map_from false}}
// Map {{$from_name}} -> Scalar
type {{$from_name}}ToScalar map[{{$from.go_type}}]S
func (m {{$from_name}}ToScalar) MapScalar(s S) (S, error) {
a := s.Actual{{$from_name}}()
if ns, ok := m[a]; ok {
ns.Actual = a
s = ns
}
return s, nil
}
{{- range $to_name, $to := $.types }}
{{- if ne $to.map_to false}}
// Map {{$from_name}} -> sym {{$to_name}}
type {{$from_name}}ToSym{{$to_name}} map[{{$from.go_type}}]{{$to.go_type}}
func (m {{$from_name}}ToSym{{$to_name}}) MapScalar(s S) (S, error) {
if t, ok := m[s.Actual{{$from_name}}()]; ok {
s.Sym = t
}
return s, nil
}
{{- end}}
{{- end}}
{{- end}}
{{- end}}