12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364moduleLevel=structtypet=|Error|Warning|Info|Log|DebugendmoduleCallBack=structtypet={trace:string->?extra:string->string->unit;message:lvl:Level.t->message:string->unit;diagnostics:uri:Lang.LUri.File.t->version:int->Lang.Diagnostic.tlist->unit;fileProgress:uri:Lang.LUri.File.t->version:int->Progress.Info.tlist->unit;perfData:uri:Lang.LUri.File.t->version:int->Perf.t->unit;serverVersion:ServerInfo.Version.t->unit;serverStatus:ServerInfo.Status.t->unit}letdefault={trace=(fun_?extra:__->());message=(fun~lvl:_~message:_->());diagnostics=(fun~uri:_~version:__->());fileProgress=(fun~uri:_~version:__->());perfData=(fun~uri:_~version:__->());serverVersion=(fun_->());serverStatus=(fun_->())}letcb=refdefaultletsett=cb:=tendmoduleLog=structlettrace_d?extram=!CallBack.cb.traced?extramlettraced?extra=Format.kasprintf(funm->trace_d?extram)lettrace_objecthdrobj=(* Fixme, use the extra parameter *)tracehdr"[%s]: @[%a@]"hdrYojson.Safe.(pretty_print~std:false)objletfeedbackfeedback=ifnot(CList.is_emptyfeedback)then(* Put feedbacks content here? *)letextra=Nonein!CallBack.cb.trace"feedback"?extra"feedback received in non-user facing place"endmoduleReport=structletmessage_~io~lvl~message=io.CallBack.message~lvl~messageletmsg~io~lvl=Format.kasprintf(funm->message_~io~lvl~message:m)letdiagnostics~io~uri~versiond=io.CallBack.diagnostics~uri~versiondletfileProgress~io~uri~versiond=io.CallBack.fileProgress~uri~versiondletperfData~io~uri~versionpd=io.CallBack.perfData~uri~versionpdletserverVersion~iovi=io.CallBack.serverVersionviletserverStatus~iost=io.CallBack.serverStatusstend