diff --git a/kitcom/internal/golang/gogen.go b/kitcom/internal/golang/gogen.go index 1706374..beda26f 100644 --- a/kitcom/internal/golang/gogen.go +++ b/kitcom/internal/golang/gogen.go @@ -50,6 +50,17 @@ func (g *GoApiGenerator) Generate(apis *api.Api, destFile string) error { } return td, nil }, + "convtype": func(valDef string, t 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), + }[t] + if !ok { + return "", fmt.Errorf("cannot convert type %v for val %s", t, valDef) + } + return td, nil + }, "zerovalue": func(t api.ValType) (string, error) { v, ok := map[api.ValType]string{ api.TInt: "0", diff --git a/kitcom/internal/golang/gogen.tmpl b/kitcom/internal/golang/gogen.tmpl index b83ba5e..f055c3f 100644 --- a/kitcom/internal/golang/gogen.tmpl +++ b/kitcom/internal/golang/gogen.tmpl @@ -1,34 +1,33 @@ - -{{- /*gotype: efprojects.com/kitten-ipc/kitcom.goGenData*/ -}} +{{- /*gotype: efprojects.com/kitten-ipc/kitcom/internal/golang.goGenData*/ -}} // Code generated by kitcom. DO NOT EDIT. -package {{.PkgName}} +package {{ .PkgName }} import ( "fmt" kittenipc "efprojects.com/kitten-ipc" ) -{{range $e := .Api.Endpoints}} +{{ range $e := .Api.Endpoints }} -type {{.Name}} struct { +type {{ .Name }} struct { Ipc kittenipc.Callable } -{{range $mtd := $e.Methods}} -func ({{$e.Name | receiver}} *{{$e.Name}}) {{$mtd.Name}}( -{{range $mtd.Params}}{{.Name}} {{.Type | typedef}}, {{end}} +{{ range $mtd := $e.Methods }} +func ({{ $e.Name | receiver }} *{{ $e.Name }}) {{ $mtd.Name }}( +{{ 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 { - 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 - 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 }}