From 4cf58de9bb7b109dddbc80adefe52cdf61328d0d Mon Sep 17 00:00:00 2001 From: Alexander Kiryukhin Date: Mon, 31 Jan 2022 20:17:31 +0300 Subject: Small refactoring --- rpc/wrapper.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 rpc/wrapper.go (limited to 'rpc/wrapper.go') diff --git a/rpc/wrapper.go b/rpc/wrapper.go new file mode 100644 index 0000000..0bc0a5c --- /dev/null +++ b/rpc/wrapper.go @@ -0,0 +1,25 @@ +package rpc + +import ( + "context" + "encoding/json" +) + +func Wrap[RQ any, RS any](handler func(context.Context, *RQ) (RS, error)) Handler { + return func(ctx context.Context, in json.RawMessage) (json.RawMessage, error) { + req := new(RQ) + if err := json.Unmarshal(in, req); err != nil { + return nil, NewError(ErrCodeParseError) + } + resp, err := handler(ctx, req) + if err != nil { + return nil, Error{ + Code: ErrUser, + Message: err.Error(), + } + } + return json.Marshal(resp) + } +} + +type Handler func(context.Context, json.RawMessage) (json.RawMessage, error) -- cgit v1.2.3