Given a model of the types involved in a family of Pipe_RPCs, this functor
provides a single Pipe_RPC versioned dispatch function dispatch_multi
in terms
of that model and a mechanism for registering the individual versions that
dispatch_multi
knows about. Registration requires knowing how to get into and
out of the model.
,-->-- Q1 --> R1 -->-. E1 -->-. / \ \ Q --->-- Q2 --> R2 -->-- R E2 -->-- E \ / / `-->-- Q3 --> R3 -->-´ E3 -->-´
Model : sig ... end
module Register_raw : functor (Version_i : sig ... end) -> sig ... end
Register_raw
is like Register
except you get to deal with the whole pipe.
This is useful if, e.g., your model_of_response
function can fail, so that
you'd like to filter items out from the result pipe.
include S with type query := Model.query with type response := Model.response with type error := Model.error
Multi-version dispatch.
The return type varies slightly from Rpc.Pipe_rpc.dispatch
to make it clear
that conversion of each individual element in the returned pipe may fail.
val versions : unit ‑> Core_kernel.Int.Set.t
All versions supported by dispatch_multi
.
(useful for computing which old versions may be pruned)