This commit is contained in:
Egor Aristov 2026-03-29 14:09:19 +03:00
parent 40bdc24422
commit ba80965416
4 changed files with 31 additions and 18 deletions

View File

@ -9,7 +9,7 @@ import (
"slices" "slices"
"time" "time"
kittenipc "github.com/egor3f/kitten-ipc" kittenipc "github.com/egor3f/kitten-ipc/lib/golang"
) )
// kittenipc:api // kittenipc:api

View File

@ -5,7 +5,8 @@ package main
import ( import (
"encoding/base64" "encoding/base64"
"fmt" "fmt"
kittenipc "github.com/egor3f/kitten-ipc"
kittenipc "github.com/egor3f/kitten-ipc/lib/golang"
) )
var _ = base64.StdEncoding var _ = base64.StdEncoding

View File

@ -113,6 +113,7 @@ func (p *GoApiParser) parseFile(sourceFile string) ([]api.Endpoint, error) {
apiMethod.Params = append(apiMethod.Params, *apiPar) apiMethod.Params = append(apiMethod.Params, *apiPar)
} }
if funcDecl.Type.Results != nil {
for i, ret := range funcDecl.Type.Results.List { for i, ret := range funcDecl.Type.Results.List {
apiRet, err := fieldToVal(ret, true) apiRet, err := fieldToVal(ret, true)
if err != nil { if err != nil {
@ -128,6 +129,7 @@ func (p *GoApiParser) parseFile(sourceFile string) ([]api.Endpoint, error) {
apiMethod.Ret = append(apiMethod.Ret, *apiRet) apiMethod.Ret = append(apiMethod.Ret, *apiRet)
} }
}
endpoints[i].Methods = append(endpoints[i].Methods, apiMethod) endpoints[i].Methods = append(endpoints[i].Methods, apiMethod)
} }
} }

View File

@ -129,9 +129,19 @@ func (ipc *ipcCommon) handleIncomingCall(msg Message) {
args = append(args, reflect.ValueOf(arg)) args = append(args, reflect.ValueOf(arg))
} }
var errorType = reflect.TypeOf((*error)(nil)).Elem()
allResultVals := method.Call(args) allResultVals := method.Call(args)
retResultVals := allResultVals[0 : len(allResultVals)-1] var retResultVals []reflect.Value
errResultVals := allResultVals[len(allResultVals)-1] var errResultVal reflect.Value
if len(allResultVals) > 0 {
if allResultVals[len(allResultVals)-1].Type().Implements(errorType) {
retResultVals = allResultVals[0 : len(allResultVals)-1]
errResultVal = allResultVals[len(allResultVals)-1]
} else {
retResultVals = allResultVals
}
}
var results []any var results []any
for _, resVal := range retResultVals { for _, resVal := range retResultVals {
@ -139,8 +149,8 @@ func (ipc *ipcCommon) handleIncomingCall(msg Message) {
} }
var resultError error var resultError error
if !errResultVals.IsNil() { if errResultVal.IsValid() && !errResultVal.IsNil() {
resultError = errResultVals.Interface().(error) resultError = errResultVal.Interface().(error)
} }
ipc.sendResponse(msg.Id, results, resultError) ipc.sendResponse(msg.Id, results, resultError)