Module Async_rpc_kernel.Versioned_rpc.Callee_converts.Pipe_rpc.Make

Given a model of the types involved in a family of Pipe_RPCs, this functor provides a single multi-version implementation function implement_multi in terms of that model and a mechanism for registering the individual versions that implement_multi knows about. Registration requires knowing how to get into and out of the model.

          Q1 -->-.         ,-->-- R1
                  \       /
          Q2 -->-- Q --> R --->-- R2
                  /       \
          Q3 -->-´         `-->-- R3

Parameters

Model : sig ... end

Signature

module type Version_shared : sig ... end
module Register : functor (Version_i : sig ... end) -> sig ... end

add a new version to the set of versions available via implement_multi or implement_direct.

module Register_raw : functor (Version_i : sig ... end) -> sig ... end

Register_raw is like Register except you get the whole pipe to deal with.

include S with type query := Model.query with type response := Model.response with type error := Model.error
type query
type response
type error
val implement_multi : ?⁠log_not_previously_seen_version:(name:string ‑> int ‑> unit) ‑> ('state ‑> version:int ‑> query ‑> (response Async_kernel.Pipe.Reader.terrorCore_kernel.Result.t Async_kernel.Deferred.t) ‑> 'state Rpc.Implementation.t list

implement multiple versions at once

val implement_direct_multi : ?⁠log_not_previously_seen_version:(name:string ‑> int ‑> unit) ‑> ('state ‑> version:int ‑> query ‑> response Versioned_direct_stream_writer.t ‑> (unit, errorCore_kernel.Result.t Async_kernel.Deferred.t) ‑> 'state Rpc.Implementation.t list

implement multiple versions at once, using a Versioned_direct_stream_writer

val rpcs : unit ‑> Rpc.Any.t list

All rpcs implemented by implement_multi

val versions : unit ‑> Core_kernel.Int.Set.t

All versions supported by implement_multi. (useful for computing which old versions may be pruned)

val name : string