shrub/pkg/arvo/lib/json/rpc.hoon
2021-05-14 07:24:16 +02:00

54 lines
1.0 KiB
Plaintext

:: json-rpc: protocol utilities
::
/- *json-rpc
|%
++ request-to-hiss
|= [url=purl:eyre req=request]
^- hiss:eyre
:- url
:+ %post
%- ~(gas in *math:eyre)
~['Content-Type'^['application/json']~]
%- some
%- as-octt:mimes:html
(en-json:html (request-to-json req))
::
++ request-to-json
|= request
^- json
%- pairs:enjs:format
:~ jsonrpc+s+'0.2'
id+s+id
method+s+method
::
:- %params
^- json
?- -.params
%list [%a +.params]
%object [%o (~(gas by *(map @t json)) +.params)]
==
==
::
++ response-to-json
|= =response
^- json
:: TODO: consider all cases
::
?+ -.response ~|([%unsupported-rpc-response response] !!)
%result
:- %o
%- molt
^- (list [@t json])
~[['id' s+id.response] ['res' res.response]]
::
%error
:- %o
%- molt
^- (list [@t json])
:~ ['id' s+id.response]
['code' s+code.response]
['message' s+message.response]
==
==
--