Module Versioned_rpc.Both_convert

module Both_convert: sig .. end


Both_convert rpcs combine features of both caller-converts and callee-converts versioning schemes in such a way that one can smoothly add a new version of the rpc to a shared library, and it doesn't matter whether the callee or caller upgrades to the latest version of the shared library first, the new version will not be exercised until both sides support it.

                      (conv)   (conv)                          (conv)   (conv)
                      caller   callee                          callee   caller
                      |        |                               |        |
                      |        |                               |        |
         Q.caller ---->-- Q1 -->-.             (impl)        .->-- R1 -->---- R.caller
                 \                \            callee       /                /
                  \--->-- Q2 -->---\           |           /--->-- R2 -->---/
                   \                \          |          /                /
                    `->-- Q3 -->---- Q.callee --> R.callee ---->-- R3 -->-'
      

module Plain: sig .. end