val create : name:string ‑> version:int ‑> bin_query:'query Bin_prot.Type_class.t ‑> bin_response:'response Bin_prot.Type_class.t ‑> ('query, 'response) tval version : (_, _) t ‑> intval description : (_, _) t ‑> Description.tval bin_query : ('query, _) t ‑> 'query Bin_prot.Type_class.tval bin_response : (_, 'response) t ‑> 'response Bin_prot.Type_class.tval implement : ('query, 'response) t ‑> ('connection_state ‑> 'query ‑> 'response Async_kernel.Deferred.t) ‑> 'connection_state Implementation.tval implement' : ('query, 'response) t ‑> ('connection_state ‑> 'query ‑> 'response) ‑> 'connection_state Implementation.timplement' is different from implement in that:
1. 'response is immediately serialized and scheduled for delivery to the RPC
dispatcher.
2. Less allocation happens, as none of the Async-related machinery is necessary.
implement also tries to do 1 when possible, but it is guaranteed to happen with
implement'.
val dispatch' : ('query, 'response) t ‑> Connection.t ‑> 'query ‑> 'response Async_rpc_kernel.Rpc_result.t Async_kernel.Deferred.tdispatch' exposes Rpc_result.t as output. Passing it through
rpc_result_to_or_error gives you the same result as dispatch
val rpc_result_to_or_error : ('query, 'response) t ‑> Connection.t ‑> 'response Async_rpc_kernel.Rpc_result.t ‑> 'response Core_kernel.Or_error.tval dispatch : ('query, 'response) t ‑> Connection.t ‑> 'query ‑> 'response Core_kernel.Or_error.t Async_kernel.Deferred.tval dispatch_exn : ('query, 'response) t ‑> Connection.t ‑> 'query ‑> 'response Async_kernel.Deferred.tmodule Expert : sig ... end