From cafc5036ef851d22b32d87eb4078cead76711427 Mon Sep 17 00:00:00 2001 From: Egor Aristov Date: Sun, 9 Nov 2025 18:45:24 +0300 Subject: [PATCH] some code --- example/golang/main.go | 14 +++++++++++ kitcom/internal/golang/goparser.go | 37 +++++++++++++++++++++--------- kitcom/main.go | 9 ++++++-- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/example/golang/main.go b/example/golang/main.go index 5ef83b8..5b70d37 100644 --- a/example/golang/main.go +++ b/example/golang/main.go @@ -21,6 +21,20 @@ func (api GoIpcApi) Div(a int, b int) (int, error) { return a / b, nil } +func (api GoIpcApi) XorData(data1 []byte, data2 []byte) ([]byte, error) { + if len(data1) == 0 || len(data2) == 0 { + return nil, fmt.Errorf("empty input data") + } + if len(data1) != len(data2) { + return nil, fmt.Errorf("input data length mismatch") + } + result := make([]byte, len(data1)) + for i := 0; i < len(data1); i++ { + result[i] = data1[i] ^ data2[i] + } + return result, nil +} + func main() { cwd, err := os.Getwd() if err != nil { diff --git a/kitcom/internal/golang/goparser.go b/kitcom/internal/golang/goparser.go index 1008211..d72203a 100644 --- a/kitcom/internal/golang/goparser.go +++ b/kitcom/internal/golang/goparser.go @@ -99,20 +99,35 @@ func (p *GoApiParser) parseFile(sourceFile string) ([]api.Endpoint, error) { apiMethod.Name = funcDecl.Name.Name for _, param := range funcDecl.Type.Params.List { var apiPar api.Val - ident := param.Type.(*ast.Ident) - switch ident.Name { - case "int": - apiPar.Type = api.TInt - case "string": - apiPar.Type = api.TString - case "bool": - apiPar.Type = api.TBool - default: - return nil, fmt.Errorf("parameter type %s is not supported yet", ident.Name) - } + if len(param.Names) != 1 { return nil, fmt.Errorf("all parameters in method %s should be named", apiMethod.Name) } + + switch paramType := param.Type.(type) { + case *ast.Ident: + switch paramType.Name { + case "int": + apiPar.Type = api.TInt + case "string": + apiPar.Type = api.TString + case "bool": + apiPar.Type = api.TBool + default: + return nil, fmt.Errorf("parameter type %s is not supported yet", paramType.Name) + } + case *ast.ArrayType: + switch elementType := paramType.Elt.(type) { + case *ast.Ident: + switch elementType.Name { + case "byte": + apiPar.Type = api.TBlob + default: + return nil, fmt.Errorf("parameter type %s is not supported yet", paramType.Name) + } + } + } + apiPar.Name = param.Names[0].Name apiMethod.Params = append(apiMethod.Params, apiPar) } diff --git a/kitcom/main.go b/kitcom/main.go index de1ce59..6a3ed6c 100644 --- a/kitcom/main.go +++ b/kitcom/main.go @@ -11,6 +11,7 @@ import ( "path/filepath" "efprojects.com/kitten-ipc/kitcom/internal/api" + "efprojects.com/kitten-ipc/kitcom/internal/common" "efprojects.com/kitten-ipc/kitcom/internal/golang" "efprojects.com/kitten-ipc/kitcom/internal/ts" ) @@ -114,9 +115,13 @@ func apiParserByPath(src string) (ApiParser, error) { func apiParserByFilePath(src string) (ApiParser, error) { switch path.Ext(src) { case ".go": - return &golang.GoApiParser{}, nil + return &golang.GoApiParser{ + Parser: &common.Parser{}, + }, nil case ".ts": - return &ts.TypescriptApiParser{}, nil + return &ts.TypescriptApiParser{ + Parser: &common.Parser{}, + }, nil case ".js": return nil, fmt.Errorf("vanilla javascript is not supported and never will be") case "":