From e10de73f46feef435f62d6bb62b515291be7b6bc Mon Sep 17 00:00:00 2001 From: directduck Date: Mon, 1 Dec 2025 11:32:09 +0300 Subject: [PATCH] Add support for any --- parser/parser.go | 2 +- testdata/printer.go | 4 ++++ testdata/testdata/arithsrv-smd.json | 12 ++++++++++ testdata/testdata_zenrpc.go | 35 +++++++++++++++++++++++++++-- 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/parser/parser.go b/parser/parser.go index 88a87ba..83d6e62 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -757,7 +757,7 @@ func parseStruct(expr ast.Expr) *Struct { switch v.Name { case "bool", "string", "int", "int8", "int16", "int32", "int64", "uint", "uint8", "uint16", "uint32", "uint64", "uintptr", "byte", "rune", - "float32", "float64", "complex64", "complex128": + "float32", "float64", "complex64", "complex128", "any": return nil } diff --git a/testdata/printer.go b/testdata/printer.go index 92ceabf..6a54f8b 100644 --- a/testdata/printer.go +++ b/testdata/printer.go @@ -26,3 +26,7 @@ func (PrintService) PrintOptional(s *string) string { return *s } + +func (PrintService) PrintAnything(s any) any { + return s +} diff --git a/testdata/testdata/arithsrv-smd.json b/testdata/testdata/arithsrv-smd.json index d5a506b..a75f112 100755 --- a/testdata/testdata/arithsrv-smd.json +++ b/testdata/testdata/arithsrv-smd.json @@ -852,6 +852,18 @@ } } }, + "printer.PrintAnything": { + "description": "", + "parameters": [ + { + "name": "s", + "type": "object" + } + ], + "returns": { + "type": "object" + } + }, "printer.PrintOptional": { "description": "", "parameters": [ diff --git a/testdata/testdata_zenrpc.go b/testdata/testdata_zenrpc.go index 5352ac6..3017349 100644 --- a/testdata/testdata_zenrpc.go +++ b/testdata/testdata_zenrpc.go @@ -16,7 +16,7 @@ var RPC = struct { ArithService struct{ Sum, Positive, DoSomething, GetPoints, DoSomethingWithPoint, Multiply, CheckError, CheckZenRPCError, Divide, Pow, Pi, SumArray string } CatalogueService struct{ First, Second, Third string } PhoneBook struct{ Get, ValidateSearch, ById, Delete, Remove, Save string } - PrintService struct{ PrintRequiredDefault, PrintOptionalWithDefault, PrintRequired, PrintOptional string } + PrintService struct{ PrintRequiredDefault, PrintOptionalWithDefault, PrintRequired, PrintOptional, PrintAnything string } }{ ArithService: struct{ Sum, Positive, DoSomething, GetPoints, DoSomethingWithPoint, Multiply, CheckError, CheckZenRPCError, Divide, Pow, Pi, SumArray string }{ Sum: "sum", @@ -45,11 +45,12 @@ var RPC = struct { Remove: "remove", Save: "save", }, - PrintService: struct{ PrintRequiredDefault, PrintOptionalWithDefault, PrintRequired, PrintOptional string }{ + PrintService: struct{ PrintRequiredDefault, PrintOptionalWithDefault, PrintRequired, PrintOptional, PrintAnything string }{ PrintRequiredDefault: "printrequireddefault", PrintOptionalWithDefault: "printoptionalwithdefault", PrintRequired: "printrequired", PrintOptional: "printoptional", + PrintAnything: "printanything", }, } @@ -1443,6 +1444,17 @@ func (PrintService) SMD() smd.ServiceInfo { Type: smd.String, }, }, + "PrintAnything": { + Parameters: []smd.JSONSchema{ + { + Name: "s", + Type: smd.Object, + }, + }, + Returns: smd.JSONSchema{ + Type: smd.Object, + }, + }, }, } } @@ -1541,6 +1553,25 @@ func (s PrintService) Invoke(ctx context.Context, method string, params json.Raw resp.Set(s.PrintOptional(args.S)) + case RPC.PrintService.PrintAnything: + var args = struct { + S any `json:"s"` + }{} + + if zenrpc.IsArray(params) { + if params, err = zenrpc.ConvertToObject([]string{"s"}, params); err != nil { + return zenrpc.NewResponseError(nil, zenrpc.InvalidParams, "", err.Error()) + } + } + + if len(params) > 0 { + if err := json.Unmarshal(params, &args); err != nil { + return zenrpc.NewResponseError(nil, zenrpc.InvalidParams, "", err.Error()) + } + } + + resp.Set(s.PrintAnything(args.S)) + default: resp = zenrpc.NewResponseError(nil, zenrpc.MethodNotFound, "", nil) }