]> Cypherpunks repositories - keks.git/commitdiff
Simplify RPC error transmission
authorSergey Matveev <stargrave@stargrave.org>
Mon, 2 Jun 2025 10:48:45 +0000 (13:48 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 2 Jun 2025 10:48:45 +0000 (13:48 +0300)
go/rpc/all_test.go
go/rpc/client.go
go/rpc/err.go [deleted file]
go/rpc/server.go
spec/RPC
tcl/schemas/rpc.tcl

index b9360026ca4c5ba74539a998d7c2a90385d7872d672cd3339506bd1e1ea6d773..624d160c0d7ba1becf02f2d3a10d07923b4ca22d879e70953b1e8660a96c2677 100644 (file)
@@ -99,7 +99,7 @@ func TestServer(t *testing.T) {
                if list[0] != uint64(i+1) {
                        t.Fatal("bad id")
                }
-               if len(list[1].(map[string]any)) != 0 {
+               if len(list[1].(string)) != 0 {
                        t.Fatal("has err", list[1])
                }
                reply, err = keks.NewDecoderFromReader(cli, nil).Decode()
index c556dc6d2ab64fc02ed71b62a428d5dd983cd2d866fa10dbc23996241afdf368..96faa93e19046cf2cdd49619c62cdd2f7d11d221de04319ae7c8a2d7570883a2 100644 (file)
@@ -69,23 +69,7 @@ func (cc *ClientCodec) ReadResponseHeader(resp *rpc.Response) (err error) {
        if !ok {
                return fmt.Errorf("keks/rpc: ReadResponseHeader: unknown id: %d", resp.Seq)
        }
-       e := list[1].(map[string]any)
-       if len(e) > 0 {
-               msg, ok := e["msg"]
-               if ok {
-                       resp.Error = msg.(string)
-                       if len(resp.Error) == 0 {
-                               resp.Error = "unspecified"
-                       }
-               } else {
-                       code, ok := e["code"]
-                       if ok {
-                               resp.Error = fmt.Sprintf("code: %d", code.(uint64))
-                       } else {
-                               resp.Error = "unspecified"
-                       }
-               }
-       }
+       resp.Error = list[1].(string)
        return nil
 }
 
diff --git a/go/rpc/err.go b/go/rpc/err.go
deleted file mode 100644 (file)
index 51ca34c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package rpc
-
-type Error struct {
-       Msg  *string `keks:"msg,omitempty"`
-       Code *uint64 `keks:"code,omitempty"`
-}
index 9e0aadcd917e0081a493e226704dbee964251766cccef19af443c1c049fd3874..1a9f936e6d8281a8d39cd8c66843a481b228a3897f7fe40ccef3deb7d0ff8c1d 100644 (file)
@@ -78,11 +78,7 @@ func (sc *ServerCodec) WriteResponse(resp *rpc.Response, data any) (err error) {
        }
        delete(sc.pending, resp.Seq)
        sc.pendingM.Unlock()
-       e := Error{}
-       if resp.Error != "" {
-               e.Msg = &resp.Error
-       }
-       if _, err = keks.Encode(sc.conn, []any{id, e}, nil); err != nil {
+       if _, err = keks.Encode(sc.conn, []any{id, resp.Error}, nil); err != nil {
                return fmt.Errorf("keks/rpc: WriteResponse: %w", err)
        }
        if _, err = keks.Encode(sc.conn, data, nil); err != nil {
index acc01862cf25cd50c587f47b7038e996f8532a6dc12d5705db75fca4ac3436dc..e7056244fcba2f57829691eead8d9df1f3caa09d0eb6bb5ff0888dc1a2bffca7 100644 (file)
--- a/spec/RPC
+++ b/spec/RPC
@@ -6,8 +6,8 @@ Request object is a LIST followed by MAP with arbitrary values, maybe
 empty. "id" is a positive 64-bit integer, that must be unique during the
 whole session's connection.
 
-Response object is also a LIST followed by MAP with arbitrary values.
-Response's "id" must be the same as in corresponding request. Empty
-error map means no error occurred.
+Response object is also a LIST followed by MAP with arbitrary values,
+corresponding error additional data. Response's "id" must be the same as
+in corresponding request. Empty error string means no error occurred.
 
 <<    [schemas/rpc.tcl]\r
index 505a6b3a7f552ebc6d5857f434201794cdd7e23064fbc5e21b7e74273a95f744..6780272fc6357128f8f73dbe9760e8848d375560b004d806b7166eb57d558713 100644 (file)
@@ -7,10 +7,5 @@ req {
 resp {
     {field . {list} len=2}
     {field 0 {int} >0} {# id}
-    {field 1 {with err}}
-}
-
-err {
-    {field msg {str} >0 optional}
-    {field code {int} >0 optional}
+    {field 1 {str}} {# error}
 }