1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889moduleCore=Sihl_coremoduleSession=Sihl_sessionopenLwt.SyntaxmoduleEntry=Model.Entryletlog_src=Logs.Src.create~doc:"message""sihl.service.message"moduleLogs=(valLogs.src_loglog_src:Logs.LOG)letsession_key="message"moduleMake(SessionService:Session.Sig.SERVICE):Sig.SERVICE=structletfetch_entryctxsession=let*entry=SessionService.getctxsession~key:session_keyinmatchentrywith|None->Lwt.returnNone|Someentry->(matchentry|>Entry.of_stringwith|Okentry->Lwt.return(Someentry)|Errormsg->Logs.warn(funm->m"MESSAGE: Invalid flash message in session %s"msg);Lwt.returnNone);;letfind_currentctxsession=let*entry=fetch_entryctxsessioninmatchentrywith|None->Lwt.returnNone|Someentry->Lwt.return(Entry.currententry);;letset_nextctxsessionmessage=let*entry=fetch_entryctxsessioninmatchentrywith|None->(* No entry found, creating new one *)letentry=Entry.createmessage|>Entry.to_stringinSessionService.setctxsession~key:session_key~value:entry|Someentry->(* Overriding next message in existing entry *)letentry=Entry.set_nextmessageentry|>Entry.to_stringinSessionService.setctxsession~key:session_key~value:entry;;letrotatectxsession=let*entry=fetch_entryctxsessioninmatchentrywith|None->Lwt.returnNone|Someentry->letserialized_entry=entry|>Entry.rotate|>Entry.to_stringinlet*()=SessionService.setctxsession~key:session_key~value:serialized_entryinLwt.return@@Model.Entry.nextentry;;letcurrentctxsession=let*entry=find_currentctxsessioninmatchentrywith|None->Lwt.returnNone|Somemessage->Lwt.return(Somemessage);;letsetctxsession?(error=[])?(warning=[])?(success=[])?(info=[])()=letmessage=Model.Message.(empty|>set_errorerror|>set_warningwarning|>set_successsuccess|>set_infoinfo)inset_nextctxsessionmessage;;letstartctx=Lwt.returnctxletstop_=Lwt.return()letlifecycle=Core.Container.Lifecycle.create"message"~dependencies:[SessionService.lifecycle]~start~stop;;letconfigureconfiguration=letconfiguration=Core.Configuration.makeconfigurationinCore.Container.Service.create~configurationlifecycle;;end