diff --git a/pkg/server/server.go b/pkg/server/server.go index e006669a59b06f1db5c3be54c18b8ec219a33eee..e9e9e7d96642cf953d2c4f1fa79888afd83293cb 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -237,15 +237,25 @@ func (c *callResponder) send(ctx context.Context, env *callEnv) (err error) { // if there is no error, we try to marshal the result e.Field("result", func(e *jx.Encoder) { if v.dat != nil { - err = json.NewEncoder(e).EncodeWithOption(v.dat, func(eo *json.EncodeOption) { - eo.DisableNewline = true - }) - if err != nil { + switch c := v.dat.(type) { + case json.RawMessage: + e.Raw(c) + default: + err = json.NewEncoder(e).EncodeWithOption(v.dat, func(eo *json.EncodeOption) { + eo.DisableNewline = true + }) } } else { e.Null() } }) + // a json encoding error here is possibly fatal.... try to encode the error, but there are no promises + if err != nil { + e.Field("error", func(e *jx.Encoder) { + codec.EncodeError(e, m.Error) + }) + return + } } }) }