diff --git a/kitcom/go_gen.tmpl b/kitcom/go_gen.tmpl index dd03539..4d9cb16 100644 --- a/kitcom/go_gen.tmpl +++ b/kitcom/go_gen.tmpl @@ -14,14 +14,16 @@ type {{.Name}} struct { } {{range $mtd := .Methods}} -func ({{$e.Name | receiver}} *{{$e.Name}}) {{$mtd.Name}} ( -{{range $mtd.Params}}{{.Name}} {{.Type | typedef}}, {{end}} +func ({{$e.Name | receiver}} *{{$e.Name}}) {{$mtd.Name}}( + {{- range $mtd.Params}}{{.Name}} {{.Type | typedef}}, {{end -}} ) ( -{{range $mtd.Ret}}{{.Type | typedef}}, {{end}} + {{- range $mtd.Ret}}{{.Type | typedef}}, {{end -}} ) { - return {{$e.Name | receiver}}.Ipc.Call( - "{{$mtd.Name}}", {{range $mtd.Params}}{{.Name}}, {{end}} - ) + results, err := {{$e.Name | receiver}}.Ipc.Call("{{$mtd.Name}}"{{range $mtd.Params}}, {{.Name}}{{end}}) + if err != nil { + return {{range $idx, $ret := $mtd.Ret}}{{zerovalue $ret.Type}}, {{end}}, fmt.Errorf("call to {{$e.Name}}.{{$mtd.Name}} failed: %w", err) + } + return {{range $idx, $ret := $mtd.Ret}}results[{{$idx}}].({{$ret.Type | typedef}}), {{end}} } {{end}} diff --git a/kitcom/gogen.go b/kitcom/gogen.go index dfb74c6..19d0dee 100644 --- a/kitcom/gogen.go +++ b/kitcom/gogen.go @@ -40,6 +40,17 @@ func (g *GoApiGenerator) Generate(api *Api, destFile string) error { } return td, nil }, + "zerovalue": func(t ValType) (string, error) { + v, ok := map[ValType]string{ + TInt: "0", + TString: `""`, + TBool: "false", + }[t] + if !ok { + return "", fmt.Errorf("cannot generate zero value for type %v", t) + } + return v, nil + }, }) tpl = template.Must(tpl.ParseFiles("./go_gen.tmpl"))