Module Async_rpc_kernel.Versioned_rpc

Infrastructure code for managing RPCs that evolve over time to use different types at different versions.

Three scenarios are supported:

In each scenario, it is desirable that the party responsible for managing versions be coded largely in terms of a single "master" version of the types involved, with all necessary type conversions relegated to a single module. Versioned_rpc is intended for implementing such a module.

Type coercions into and out of the model go in the directions indicated by the following diagram:

        Caller converts                 Callee converts
        ===============                 ===============

            caller                        callee
            |       callee                |      callee
            |       |       caller        |      |       callee
            |       |       |             |      |       |
         ,-->-- Q1 --> R1 -->-.      Q1 -->-.    |    ,-->-- R1
        /                      \             \   |   /
       Q --->-- Q2 --> R2 -->-- R    Q2 -->-- Q --> R --->-- R2
        \                      /             /       \
         `-->-- Q3 --> R3 -->-´      Q3 -->-´         `-->-- R3
module Menu : sig ... end

Over-the-network discovery of rpc names and versions supported by a callee.

module Connection_with_menu : sig ... end
module Versioned_direct_stream_writer : sig ... end

A Versioned_direct_stream_writer.t is an extension of an Rpc.Direct_stream_writer. Cf. Rpc.Pipe_rpc.Direct_stream_writer for documentation.

module Caller_converts : sig ... end
module Callee_converts : sig ... end
module Both_convert : sig ... end