12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152(************************************************************************)(* * The Coq Proof Assistant / The Coq Development Team *)(* v * Copyright INRIA, CNRS and contributors *)(* <O___,, * (see version control and CREDITS file for authors & dates) *)(* VV/ **************************************************************)(* // * This file is distributed under the terms of the *)(* * GNU Lesser General Public License Version 2.1 *)(* * (see LICENSE file for the text of the license) *)(************************************************************************)(************************************************************************)(* SerAPI: Coq interaction protocol with bidirectional serialization *)(************************************************************************)(* Copyright 2016-2019 MINES ParisTech -- License LGPL 2.1+ *)(* Copyright 2019-2023 Inria -- License LGPL 2.1+ *)(* Written by: Emilio J. Gallego Arias and others *)(************************************************************************)exceptionSer_errorofstringlet_=CErrors.register_handler(function|Ser_errormsg->SomePp.(seq[str"Serlib Error: ";strmsg])|_->None)letopaque_of_sexp~typ_obj=raise(Ser_error("["^typ^": ABSTRACT / cannot deserialize]"))letexn_on_opaque=reftrueletsexp_of_opaque~typ_exp=letmsg="["^typ^": ABSTRACT]"inif!exn_on_opaquethenraise(Ser_errormsg)elseSexplib.Sexp.Atom("["^typ^": ABSTRACT]")letopaque_of_yojson~typ_obj=raise(Ser_error("["^typ^": ABSTRACT / cannot deserialize]"))letopaque_to_yojson~typ_obj=letmsg="["^typ^": ABSTRACT]"inif!exn_on_opaquethenraise(Ser_errormsg)else`String("["^typ^": ABSTRACT]")lethash_opaque~typ:_x=Hashtbl.hashxlethash_fold_opaque~typstx=Ppx_hash_lib.Std.Hash.Builtin.hash_fold_intst(hash_opaque~typx)letcompare_opaque~typ:_xy=Stdlib.comparexy