Newer
Older
package jrpc
import (
"context"
"encoding/json"
"io"
)
type HandlerFunc func(w ResponseWriter, r *Request)
type Handler interface {
ServeRPC(w ResponseWriter, r *Request)
}
type ResponseWriter interface {
Send(v any, err error) error
}
func (fn HandlerFunc) ServeRPC(w ResponseWriter, r *Request) {
(fn)(w, r)
}
Edward Lee
committed
peer PeerInfo
func NewRequest(ctx context.Context, id string, method string, params any) *Request {
r := &Request{ctx: ctx}
Edward Lee
committed
Edward Lee
committed
func (r *Request) ParamSlice() []any {
var params []any
func (r *Request) ParamArray(a ...any) error {
var params []json.RawMessage
if err != nil {
return err
}
} else {
break
}
}
return nil
}
Edward Lee
committed
func (r *Request) Remote() string {
return r.peer.RemoteAddr
}
func (r *Request) Peer() PeerInfo {
return r.peer
}
func (r *Request) WithContext(ctx context.Context) *Request {
if ctx == nil {
panic("nil context")
}
r.ctx = ctx
r2 := new(Request)
*r2 = *r
r2.ctx = ctx
r2.msg = r.msg
return r2
}
Edward Lee
committed
func (r *Request) Msg() jsonrpcMessage {
return r.msg
}
type ResponseWriterIo struct {
r *Request
w io.Writer
}
func NewReaderResponseWriterIo(r *Request, w io.Writer) ResponseWriter {
return &ResponseWriterIo{
w: w,
r: r,
}
}
func (w *ResponseWriterIo) Send(args any, e error) (err error) {
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
if e != nil {
return enc.Encode(errorMessage(e))
}
return enc.Encode(args)
}
type ResponseWriterMsg struct {
r *Request
msg *jsonrpcMessage
}
func NewReaderResponseWriterMsg(r *Request) *ResponseWriterMsg {
return &ResponseWriterMsg{
r: r,
}
}
func (w *ResponseWriterMsg) Send(args any, e error) (err error) {
cm := w.r.Msg()
if e != nil {
w.msg = cm.errorResponse(e)
return nil
}
w.msg = cm.response(args)
return nil
}