convert return types in go template

This commit is contained in:
Egor Aristov 2025-11-16 07:31:42 +03:00
parent 2c6429065b
commit a83446019d
Signed by: egor3f
GPG Key ID: 40482A264AAEC85F
2 changed files with 24 additions and 14 deletions

View File

@ -50,6 +50,17 @@ func (g *GoApiGenerator) Generate(apis *api.Api, destFile string) error {
} }
return td, nil return td, nil
}, },
"convtype": func(valDef string, valType api.ValType) (string, error) {
td, ok := map[api.ValType]string{
api.TInt: fmt.Sprintf("int(%s.(float64))", valDef),
api.TString: fmt.Sprintf("%s.(string)", valDef),
api.TBool: fmt.Sprintf("%s.(bool)", valDef),
}[valType]
if !ok {
return "", fmt.Errorf("cannot convert type %v for val %s", valType, valDef)
}
return td, nil
},
"zerovalue": func(t api.ValType) (string, error) { "zerovalue": func(t api.ValType) (string, error) {
v, ok := map[api.ValType]string{ v, ok := map[api.ValType]string{
api.TInt: "0", api.TInt: "0",

View File

@ -1,34 +1,33 @@
{{- /*gotype: efprojects.com/kitten-ipc/kitcom/internal/golang.goGenData*/ -}}
{{- /*gotype: efprojects.com/kitten-ipc/kitcom.goGenData*/ -}}
// Code generated by kitcom. DO NOT EDIT. // Code generated by kitcom. DO NOT EDIT.
package {{.PkgName}} package {{ .PkgName }}
import ( import (
"fmt" "fmt"
kittenipc "efprojects.com/kitten-ipc" kittenipc "efprojects.com/kitten-ipc"
) )
{{range $e := .Api.Endpoints}} {{ range $e := .Api.Endpoints }}
type {{.Name}} struct { type {{ .Name }} struct {
Ipc kittenipc.Callable Ipc kittenipc.Callable
} }
{{range $mtd := $e.Methods}} {{ range $mtd := $e.Methods }}
func ({{$e.Name | receiver}} *{{$e.Name}}) {{$mtd.Name}}( func ({{ $e.Name | receiver }} *{{ $e.Name }}) {{ $mtd.Name }}(
{{range $mtd.Params}}{{.Name}} {{.Type | typedef}}, {{end}} {{ range $mtd.Params }}{{ .Name }} {{ .Type | typedef }}, {{ end }}
) ( ) (
{{range $mtd.Ret}}{{.Type | typedef}}, {{end}}error, {{ range $mtd.Ret }}{{ .Type | typedef }}, {{ end }}error,
) { ) {
results, err := {{$e.Name | receiver}}.Ipc.Call("{{$e.Name}}.{{$mtd.Name}}"{{range $mtd.Params}}, {{.Name}}{{end}}) results, err := {{ $e.Name | receiver }}.Ipc.Call("{{ $e.Name }}.{{ $mtd.Name }}"{{ range $mtd.Params }}, {{ .Name }}{{ end }})
if err != nil { if err != nil {
return {{range $mtd.Ret}}{{.Type | zerovalue}}, {{end}} fmt.Errorf("call to {{$e.Name}}.{{$mtd.Name}} failed: %w", err) return {{ range $mtd.Ret }}{{ .Type | zerovalue }}, {{ end }} fmt.Errorf("call to {{ $e.Name }}.{{ $mtd.Name }} failed: %w", err)
} }
_ = results _ = results
return {{range $idx, $ret := $mtd.Ret}}results[{{$idx}}].({{$ret.Type | typedef}}), {{end}}nil return {{ range $idx, $ret := $mtd.Ret }}{{ convtype ( printf "results[%d]" $idx ) $ret.Type }}, {{ end }}nil
} }
{{end}} {{ end }}
{{end}} {{ end }}