Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file serialise.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160openCapnp_rpc_lwt.PrivatemoduleEmbargoId=Capnp_rpc.Message_types.EmbargoIdmoduleLog=Capnp_rpc.Debug.LogmoduleBuilder=Schema.BuildermoduleRO_array=Capnp_rpc.RO_arraymoduleMake(EP:Capnp_core.ENDPOINT)=structopenEP.Tableletresults_of_returnret=letopenBuilderinmatchReturn.getretwith|Return.Resultsr->r|_->failwith"results_of_return: not results!"letwrite_promised_answerpa(qid,xforms)=letopenBuilderinPromisedAnswer.question_id_setpa(QuestionId.uint32qid);letxforms_builder=PromisedAnswer.transform_initpa(List.lengthxforms)inxforms|>List.iteri(funi(Xform.Fieldf)->letb=Capnp.Array.getxforms_builderiinPromisedAnswer.Op.get_pointer_field_set_exnbf)letwrite_capslot=letopenBuilderinfunction|`ReceiverHostedid->CapDescriptor.receiver_hosted_setslot(ImportId.uint32id)|`ReceiverAnswerx->write_promised_answer(CapDescriptor.receiver_answer_initslot)x|`SenderHostedid->CapDescriptor.sender_hosted_setslot(ExportId.uint32id)|`SenderPromiseid->CapDescriptor.sender_promise_setslot(ExportId.uint32id)|`ThirdPartyHosted_->failwith"TODO: write_caps_array"|`None->CapDescriptor.none_setslotletwrite_caps_arraycapspayload=letopenBuilderinletbuilder=Payload.cap_table_initpayload(RO_array.lengthcaps)incaps|>RO_array.iteri(funi->write_cap(Capnp.Array.getbuilderi))letset_targetbtarget=letopenBuilderinmatchtargetwith|`ReceiverAnswer(id,i)->letbuilder=MessageTarget.promised_answer_initbinwrite_promised_answerbuilder(id,i)|`ReceiverHostedid->MessageTarget.imported_cap_setb(ImportId.uint32id)letwrite_exnbex=letopenBuilder.Exceptioninletty=matchex.Capnp_rpc.Exception.tywith|`Failed->Type.Failed|`Overloaded->Type.Overloaded|`Disconnected->Type.Disconnected|`Unimplemented->Type.Unimplemented|`Undefinedx->Type.Undefinedxintype_setbty;reason_setbex.Capnp_rpc.Exception.reasonletmessage:EP.Out.t->_=letopenBuilderinfunction|`Abortex->letb=Message.init_root()inwrite_exn(Message.abort_initb)ex;Message.to_messageb|`Bootstrap(qid,object_id)->letb=Message.init_root~message_size:100()inletboot=Message.bootstrap_initbinBootstrap.question_id_setboot(QuestionId.uint32qid);Schema.BuilderOps.write_string(Bootstrap.deprecated_object_id_getboot)object_id;Message.to_messageb|`Call(qid,target,request,descs,results_to)->letc=Msg.Request.writablerequestinCall.question_id_setc(QuestionId.uint32qid);set_target(Call.target_initc)target;letp=Call.params_getcinwrite_caps_arraydescsp;letdest=Call.send_results_to_initcinbeginmatchresults_towith|`Caller->Call.SendResultsTo.caller_setdest|`Yourself->Call.SendResultsTo.yourself_setdest|`ThirdParty_->failwith"TODO: send_results_to ThirdParty"end;Call.to_messagec|`Finish(qid,release_result_caps)->letb=Message.init_root~message_size:42()inletfin=Message.finish_initbinFinish.question_id_setfin(QuestionId.uint32qid);Finish.release_result_caps_setfinrelease_result_caps;Message.to_messageb|`Release(id,count)->letm=Message.init_root~message_size:48()inletrel=Message.release_initminRelease.id_setrel(ImportId.uint32id);Release.reference_count_set_int_exnrelcount;Message.to_messagem|`Disembargo_requestdisembargo_request->letm=Message.init_root~message_size:200()inletdis=Message.disembargo_initminletctx=Disembargo.context_initdisinbeginmatchdisembargo_requestwith|`Loopback(old_path,embargo_id)->set_target(Disembargo.target_initdis)old_path;Disembargo.Context.sender_loopback_setctx(EmbargoId.uint32embargo_id)end;Message.to_messagem|`Disembargo_reply(target,embargo_id)->letm=Message.init_root~message_size:200()inletdis=Message.disembargo_initminletctx=Disembargo.context_initdisinset_target(Disembargo.target_initdis)target;Disembargo.Context.receiver_loopback_setctx(EmbargoId.uint32embargo_id);Message.to_messagem|`Return(aid,return,release)->letret=matchreturnwith|`Results(msg,descs)->(* [msg] has payload filled in, but nothing else. *)letret=Msg.Response.writablemsginwrite_caps_arraydescs(results_of_returnret);ret|`Exceptionex->letm=Message.init_root()inletret=Message.return_initminwrite_exn(Return.exception_initret)ex;ret|`Cancelled->letm=Message.init_root~message_size:200()inletret=Message.return_initminReturn.canceled_setret;ret|`ResultsSentElsewhere->letm=Message.init_root~message_size:200()inletret=Message.return_initminReturn.results_sent_elsewhere_setret;ret|`TakeFromOtherQuestionqid->letm=Message.init_root~message_size:200()inletret=Message.return_initminReturn.take_from_other_question_setret(QuestionId.uint32qid);ret|`AcceptFromThirdParty->failwith"TODO: AcceptFromThirdParty"inReturn.answer_id_setret(AnswerId.uint32aid);Return.release_param_caps_setretrelease;Return.to_messageret|`Resolve(id,new_target)->letm=Message.init_root()inletr=Message.resolve_initminbeginmatchnew_targetwith|Okcap->write_cap(Resolve.cap_initr)cap|Errore->write_exn(Resolve.exception_initr)eend;Resolve.promise_id_setr(ExportId.uint32id);Message.to_messagemend