Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file messageID.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164typeword=[`Atomofstring|`Stringofstring]typelocal=wordlisttypedomain=Rfc822.nonsenseRfc822.domaintypet=Rfc822.nonsenseRfc822.msg_id(* = local * domain *)letpp_wordppf=function|`Atomx->Fmt.stringppfx|`Stringx->Fmt.pfppf"%S"xletpp_domain:Rfc822.nonsenseRfc822.domainFmt.t=funppf->function|`Domainl->Fmt.list~sep:Fmt.(conststring".")Fmt.stringppfl|`Literalx->Fmt.pfppf"[%s]"x|`Addr_->.letpp_local:localFmt.t=Fmt.list~sep:Fmt.(conststring".")pp_wordletppppf(local,domain)=Fmt.pfppf"{ @[<hov>local= @[<hov>%a@];@ \
domain= @[<hov>%a@]@] }"pp_locallocalpp_domaindomainletequal_wordab=matcha,bwith|`Atomx,`Atomy->String.equalxy|`Stringx,`Stringy->String.equalxy|_,_->falseletequal_localab=tryList.for_all2equal_wordabwith_->falseletequal_domainab=matcha,bwith|`Literala,`Literalb->String.equalab|`Domaina,`Domainb->(tryList.for_all2String.equalabwith_->false)|_,_->falseletequalab=equal_local(fsta)(fstb)&&equal_domain(snda)(sndb)moduleEncoder=structincludeEncoderletdot=(funppf()->evalppf[fws;char$'.';fws]),()letdomain:Rfc822.nonsenseRfc822.domainEncoder.t=funppf->function|`Domaindomain->letxppfx=evalppf[box;!!string;close]xinevalppf[tbox1;!!(list~sep:dotx);close]domain|`Literalliteral->evalppf[tbox1;char$'[';!!string;char$']';close]literal|`Addr_->.letmessage_idppf(t:Rfc822.nonsenseRfc822.msg_id)=matchtwith|(local_part,domain_part)->evalppf[tbox1;char$'<';!!Mailbox.Encoder.local;char$'@';!!domain;char$'>';close]local_partdomain_partendletto_unstructured~field_namex=Unstructured.to_unstructured~field_nameEncoder.message_idxletis_utf8_valid_string_withisx=letexceptionInvalid_utf8inletexceptionInvalid_charintryUutf.String.fold_utf_8(fun()_pos->function`Malformed_->raiseInvalid_utf8|`Ucharuchar->ifUchar.is_charuchar&¬(is(Uchar.to_charuchar))thenraiseInvalid_char)()x;truewith|Invalid_utf8->false|Invalid_char->falseletis_utf8_valid_stringx=letexceptionInvalid_utf8intryUutf.String.fold_utf_8(fun()_pos->function`Malformed_->raiseInvalid_utf8|_->())()x;truewithInvalid_utf8->falseletis_atext_valid_string=is_utf8_valid_string_withRfc822.is_atextletis_dtext_valid_string=is_utf8_valid_string_withRfc822.is_dtextletis_qtext_valid_string=is_utf8_valid_string_withRfc822.is_qtextmoduleDomain=structletatomx=ifis_atext_valid_stringxthenSome(`Atomx)elseNoneletatom_exnx=matchatomxwith|Somev->v|None->Fmt.invalid_arg"atom_exn: invalid atom value %S"xleta=atom_exnletliteralx=letneed_to_escape,escape_char=(* TODO *)letbindings=[('\000','\000')]in((funchr->List.mem_assocchrbindings),funchr->List.assocchrbindings)inletescape_stringx=letlen=String.lengthxinletres=Buffer.create(len*2)inletpos=ref0inwhile!pos<lendoifneed_to_escapex.[!pos]then(Buffer.add_charres'\\';Buffer.add_charres(escape_charx.[!pos]))elseBuffer.add_charresx.[!pos];incrposdone;Buffer.contentsresinifis_dtext_valid_stringxthenSome(`Literalx)elseifis_utf8_valid_stringxthenSome(`Literal(escape_stringx))elseNoneletliteral_exnx=matchliteralxwith|Somev->v|None->Fmt.invalid_arg"literal_exn: invalid domain literal value %S"xtypeatom=[`Atomofstring]typeliteral=[`Literalofstring]type'adomain=|(::):atom*'adomain->'aPeano.sdomain|[]:Peano.zdomainletreccoerce:typea.aPeano.sdomain->stringlist=function|[`Atomx]->[x]|`Atomx::y::r->List.consx(coerce(y::r))letmake_domain:typea.adomain->stringlistoption=function|[]->None|x::r->Some(coerce(x::r))type'at=|Domain:'adomaint|Literal:stringtletdomain=Domainletdefault=Literalletmake:typea.at->a->Rfc822.nonsenseRfc822.domainoption=funwitnessv->matchwitnesswith|Domain->Option.(make_domainv>>|funv->`Domainv)|Literal->literalvletv:typea.at->a->Rfc822.nonsenseRfc822.domain=funwitnessv->matchmakewitnessvwith|Somev->v|None->Fmt.invalid_arg"make_exn: invalid domain"letto_stringx=Encoder.to_stringEncoder.domainxend