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