Module Versioned_rpc

module Versioned_rpc: Versioned_rpc


This module contains infrastructure code for managing RPCs which 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 Caller_converts: sig .. end
module Callee_converts: sig .. end
module Menu: sig .. end
machinery for communicating names and versions of supported rpcs from within the rpc protocol itself.
module Both_convert: sig .. end