Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,84 @@
|
||||
module jsonrpc
|
||||
|
||||
import io
|
||||
|
||||
pub struct ClientConfig {
|
||||
pub mut:
|
||||
stream io.ReaderWriter
|
||||
interceptors Interceptors
|
||||
}
|
||||
|
||||
pub struct Client {
|
||||
mut:
|
||||
stream io.ReaderWriter
|
||||
interceptors Interceptors
|
||||
}
|
||||
|
||||
// new_client creates new `jsonrpc.Client` with `stream` to read/write and `interceptors`
|
||||
pub fn new_client(cfg ClientConfig) Client {
|
||||
return Client{
|
||||
stream: cfg.stream
|
||||
interceptors: cfg.interceptors
|
||||
}
|
||||
}
|
||||
|
||||
// notify sends JSON-RPC 2.0 Notification and returns without waiting for `jsonrpc.Response`
|
||||
pub fn (mut c Client) notify[T](method string, params T) ! {
|
||||
mut req := new_request(method, params, '')
|
||||
intercept_request(c.interceptors.request, &req) or { return err }
|
||||
|
||||
mut enc_req := req.encode().bytes()
|
||||
intercept_encoded_request(c.interceptors.encoded_request, enc_req) or { return err }
|
||||
|
||||
c.stream.write(enc_req) or { return err }
|
||||
}
|
||||
|
||||
// request new `jsonrpc.Request` and return `jsonrpc.Response`
|
||||
pub fn (mut c Client) request[T](method string, params T, id string) !Response {
|
||||
mut req := new_request(method, params, id)
|
||||
intercept_request(c.interceptors.request, &req) or { return err }
|
||||
|
||||
mut enc_req := req.encode().bytes()
|
||||
intercept_encoded_request(c.interceptors.encoded_request, enc_req) or { return err }
|
||||
|
||||
c.stream.write(enc_req) or { return err }
|
||||
|
||||
mut enc_resp := []u8{len: 4096}
|
||||
c.stream.read(mut enc_resp) or { return err }
|
||||
|
||||
intercept_encoded_response(c.interceptors.encoded_response, enc_resp)
|
||||
|
||||
resp := decode_response(enc_resp.bytestr()) or { return err }
|
||||
|
||||
intercept_response(c.interceptors.response, resp)
|
||||
|
||||
return resp
|
||||
}
|
||||
|
||||
// batch sends batch of `jsonrpc.Request` and returns batch of`jsonrpc.Response`
|
||||
pub fn (mut c Client) batch(reqs []Request) ![]Response {
|
||||
mut reqs_str := '['
|
||||
for req in reqs {
|
||||
intercept_request(c.interceptors.request, &req) or { return err }
|
||||
reqs_str = reqs_str + req.encode() + ', '
|
||||
}
|
||||
|
||||
reqs_str = reqs_str.all_before_last(', ') + ']'
|
||||
enc_reqs := reqs_str.bytes()
|
||||
intercept_encoded_request(c.interceptors.encoded_request, enc_reqs) or { return err }
|
||||
|
||||
c.stream.write(enc_reqs) or { return err }
|
||||
|
||||
mut enc_resp := []u8{len: 4096}
|
||||
c.stream.read(mut enc_resp) or { return err }
|
||||
|
||||
intercept_encoded_response(c.interceptors.encoded_response, enc_resp)
|
||||
|
||||
mut resps := decode_batch_response(enc_resp.bytestr()) or { return err }
|
||||
|
||||
for mut resp in resps {
|
||||
intercept_response(c.interceptors.response, &resp)
|
||||
}
|
||||
|
||||
return resps
|
||||
}
|
||||
Reference in new issue
Block a user