From 9870739544c3683d7854abb4f3368e970c094b45 Mon Sep 17 00:00:00 2001
From: a <a@tuxpa.in>
Date: Fri, 22 Sep 2023 16:40:10 -0500
Subject: [PATCH] yay

---
 exports.go          |  2 +-
 pkg/codec/errors.go | 49 +++++++++++++++++++++++----------------------
 2 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/exports.go b/exports.go
index 864fb11..5a5a540 100644
--- a/exports.go
+++ b/exports.go
@@ -13,7 +13,7 @@ import (
 type (
 	// Conn is used to make requests to jsonrpc2 servers
 	Conn = codec.Conn
-	// Handler is the equivilant of http.Handler, but for jsonrpc.
+	// Handler is the equivalent of http.Handler, but for jsonrpc.
 	Handler = codec.Handler
 	// HandlerFunc is a Handler that exists as a function
 	HandlerFunc = codec.HandlerFunc
diff --git a/pkg/codec/errors.go b/pkg/codec/errors.go
index 6f13598..a8c2f0f 100644
--- a/pkg/codec/errors.go
+++ b/pkg/codec/errors.go
@@ -46,15 +46,17 @@ func EncodeError(enc *jx.Encoder, err error) error {
 	enc.Obj(func(e *jx.Encoder) {
 		switch er := err.(type) {
 		case DataError:
-			data, err := json.Marshal(er.ErrorData())
-			if err != nil {
-				data = []byte(`"failed to marshal error data"`)
-			}
 			e.Field("code", func(e *jx.Encoder) { e.Int(er.ErrorCode()) })
 			e.Field("message", func(e *jx.Encoder) { e.Str(er.Error()) })
-			e.Field("data", func(e *jx.Encoder) {
-				e.Raw(data)
-			})
+			if dat := er.ErrorData(); dat != nil {
+				data, err := json.Marshal(er.ErrorData())
+				if err != nil {
+					data = []byte(`"failed to marshal error data"`)
+				}
+				e.Field("data", func(e *jx.Encoder) {
+					e.Raw(data)
+				})
+			}
 		case Error:
 			e.FieldStart("code")
 			e.Int(er.ErrorCode())
@@ -68,31 +70,30 @@ func EncodeError(enc *jx.Encoder, err error) error {
 	return nil
 }
 
-type JrpcErr struct {
-	Data any
-}
-
-func (j *JrpcErr) ErrorData() any {
-	return j.Data
+func WrapErr(data any, code int, err error) error {
+	return &jrpcErr{
+		data: data,
+		err:  err,
+		code: code,
+	}
 }
 
-func (j *JrpcErr) Error() string {
-	return "Jrpc Error"
+type jrpcErr struct {
+	data any
+	err  error
+	code int
 }
 
-func (j *JrpcErr) ErrorCode() int {
-	return ErrorCodeJrpc
+func (j *jrpcErr) ErrorData() any {
+	return j.data
 }
 
-func WrapJrpcErr(err error) error {
-	if err == nil {
-		return nil
-	}
-	return fmt.Errorf("%w: %w", &JrpcErr{}, err)
+func (j *jrpcErr) Error() string {
+	return j.err.Error()
 }
 
-func MakeJrpcErr(s string) error {
-	return fmt.Errorf("%w: %s", &JrpcErr{}, s)
+func (j *jrpcErr) ErrorCode() int {
+	return j.code
 }
 
 type ErrorMethodNotFound struct{ method string }
-- 
GitLab