1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465openBaseopenLwt.SyntaxmoduleEntry=Message_core.EntrymoduleSig=Message_service_sigletsession_key="message"moduleMake(Log:Log.Service.Sig.SERVICE)(SessionService:Session.Service.Sig.SERVICE):Sig.SERVICE=structletfetch_entryctx=let*entry=SessionService.get~key:session_keyctxinmatchentrywith|None->Lwt.returnNone|Someentry->(matchentry|>Entry.of_stringwith|Okentry->Lwt.return(Someentry)|Errormsg->Log.warn(funm->m"MESSAGE: Invalid flash message in session %s"msg);Lwt.returnNone)letfind_currentctx=let*entry=fetch_entryctxinmatchentrywith|None->Lwt.returnNone|Someentry->Lwt.return(Entry.currententry)letset_nextctxmessage=let*entry=fetch_entryctxinmatchentrywith|None->(* No entry found, creating new one *)letentry=Entry.createmessage|>Entry.to_stringinSessionService.setctx~key:session_key~value:entry|Someentry->(* Overriding next message in existing entry *)letentry=Entry.set_nextmessageentry|>Entry.to_stringinSessionService.setctx~key:session_key~value:entryletrotatectx=let*entry=fetch_entryctxinmatchentrywith|None->Lwt.returnNone|Someentry->letserialized_entry=entry|>Entry.rotate|>Entry.to_stringinlet*()=SessionService.setctx~key:session_key~value:serialized_entryinLwt.return@@Message_core.Entry.nextentryletcurrentctx=let*entry=find_currentctxinmatchentrywith|None->Lwt.returnNone|Somemessage->Lwt.return(Somemessage)letsetctx?(error=[])?(warning=[])?(success=[])?(info=[])()=letmessage=Message_core.Message.(empty|>set_errorerror|>set_warningwarning|>set_successsuccess|>set_infoinfo)inset_nextctxmessageend