123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220openPetanque(* Serialization for agent types *)openJAgent(* RPC-side server mappings, internal; we could split this in a different module
eventually as to make this clearer. *)moduletypeHandler=sig(* Server-side RPC specification *)moduleParams:sigtypet[@@derivingof_yojson]end(* Server-side RPC specification *)moduleResponse:sigtypet[@@derivingto_yojson]endvalhandler:token:Coq.Limits.Token.t->Params.t->Response.tR.tend(* Note that here we follow JSON-RPC / LSP capitalization conventions *)moduleRequest=structmoduletypeS=sigvalmethod_:string(* Protocol params specification *)moduleParams:sigtypet[@@derivingyojson]end(* Protocol response specification *)moduleResponse:sigtypet[@@derivingyojson]endmoduleHandler:Handlerendend(* init RPC *)moduleInit=structletmethod_="petanque/init"moduleParams=structtypet={debug:bool;root:Lsp.JLang.LUri.File.t}[@@derivingyojson]endmoduleResponse=structtypet=int[@@derivingyojson]endmoduleHandler=structmoduleParams=ParamsmoduleResponse=structtypet=Env.t[@@derivingyojson]endlethandler~token{Params.debug;root}=Agent.init~token~debug~rootendend(* start RPC *)moduleStart=structletmethod_="petanque/start"moduleParams=structtypet={env:int;uri:Lsp.JLang.LUri.File.t;thm:string}[@@derivingyojson]endmoduleResponse=structtypet=int[@@derivingyojson]endmoduleHandler=structmoduleParams=structtypet={env:Env.t;uri:Lsp.JLang.LUri.File.t;thm:string}[@@derivingyojson]endmoduleResponse=structtypet=State.t[@@derivingyojson]endlethandler~token{Params.env;uri;thm}=Agent.start~token~env~uri~thmendend(* run_tac RPC *)moduleRunTac=structletmethod_="petanque/run"moduleParams=structtypet={st:int;tac:string}[@@derivingyojson]endmoduleResponse=structtypet=intRun_result.t[@@derivingyojson]endmoduleHandler=structmoduleParams=structtypet={st:State.t;tac:string}[@@derivingyojson]endmoduleResponse=structtypet=State.tRun_result.t[@@derivingyojson]endlethandler~token{Params.st;tac}=Agent.run_tac~token~st~tacendend(* goals RPC *)moduleGoals=structletmethod_="petanque/goals"moduleParams=structtypet={st:int}[@@derivingyojson]endmoduleResponse=structtypet=Goals.t[@@derivingyojson]endmoduleHandler=structmoduleParams=structtypet={st:State.t}[@@derivingyojson]endmoduleResponse=Responselethandler~token{Params.st}=Agent.goals~token~stendend(* premises RPC *)modulePremises=structletmethod_="petanque/premises"moduleParams=structtypet={st:int}[@@derivingyojson]endmoduleResponse=structtypet=Premise.tlist[@@derivingyojson]endmoduleHandler=structmoduleParams=structtypet={st:State.t}[@@derivingyojson]endmoduleResponse=Responselethandler~token{Params.st}=Agent.premises~token~stendend(* Notifications don't get a reply *)moduleNotification=structmoduletypeS=sigvalmethod_:stringmoduleParams:sigtypet[@@derivingyojson]endendend(* These two are identical from LSP *)(* Trace notification *)moduleTrace=structletmethod_="$/logTrace"moduleParams=structtypet={message:string;verbose:stringoption[@defaultNone]}[@@derivingyojson]endend(* Message notification *)moduleMessage=structletmethod_="window/logMessage"moduleParams=structtypet={type_:int[@key"type"];message:string}[@@derivingyojson]endend