package async_rpc_kernel

  1. Overview
  2. Docs
Module type
Class type

Given a model of the types involved in a family of State_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 -->-.            ,---->-- (S1, U1s)
                  \          /
          Q2 -->-- Q --> (S, Us) -->-- (S2, U2s)
                  /          \
          Q3 -->-´            `---->-- (S3, U3s)


module Model : sig ... end


module type Version_shared = sig ... end
module Register (Version_i : sig ... end) : sig ... end

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

module Register_raw (Version_i : sig ... end) : sig ... end

Register_raw is like Register except you get the whole update pipe to deal with. This is useful if, e.g., your update_of_model 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 state := Model.state with type update := Model.update with type error := Model.error
val implement_multi : ?log_not_previously_seen_version:(name:string -> int -> unit) -> ('connection_state -> version:int -> Model.query -> (Model.state * Model.update Async_kernel.Pipe.Reader.t, Model.error) Core.Result.t Async_kernel.Deferred.t) -> 'connection_state Rpc.Implementation.t list

implement multiple versions at once

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

All rpcs implemented by implement_multi

val versions : unit -> Core.Int.Set.t

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

val name : string

Innovation. Community. Security.