1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556(*
* Copyright (c) 2018-2021 Tarides <contact@tarides.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*)(* For every new version, update the [version] type and [versions]
headers. *)typet=[`V1|`V2]exceptionInvalidof{expected:t;found:t}moduletypeS=sigvalversion:tendmoduleV1=structletversion=`V1endmoduleV2=structletversion=`V2endletenum=[(`V1,"00000001");(`V2,"00000002")]letpp=Fmt.of_to_string(function`V1->"v1"|`V2->"v2")letto_binv=List.assocvenumletinvalid_argv=letpp_full_versionppfv=Fmt.pfppf"%a (%S)"ppv(to_binv)inFmt.invalid_arg"invalid version: got %S, expecting %a"vFmt.(Dump.listpp_full_version)(List.mapfstenum)letof_binb=trySome(List.assocb(List.map(fun(x,y)->(y,x))enum))withNot_found->Nonelet()=Printexc.register_printer(function|Invalidv->Some(Fmt.str"Irmin_pack.Version.Invalid { expected:%a; found:%a }"ppv.expectedppv.found)|_->None)