module Versioned_rpc: Versioned_rpc
The proto-typical example of this scenario is a commander that needs to call out to many assistants for that same system. In this scenario, the assistants each implement a single version of the rpc and the commander has to take this into account.
The proto-typical example of this scenario is an assistant from one system calling out the commander of another system In this scenario, the assistants each know a single version of the rpc to call and the commander has to implement them all.
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