12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970letsomex=Somexletconcatenelocal=String.concat"."(List.map(function`Atomx->x|`Stringx->x)local)letis_string=function`String_->true|`Atom_->falseletto_domain=function|`Literalstr->leterr=Format.asprintf"Impossible to make a path with a literal domain: %s"strininvalid_argerr|`Domainl->Colombe.Domain.Domainl|`Addr(Emile.IPv4v)->Colombe.Domain.IPv4v|`Addr(Emile.IPv6v)->Colombe.Domain.IPv6v|`Addr(Emile.Ext(k,v))->Colombe.Domain.Extension(k,v)letof_domain=function|Colombe.Domain.Domainl->`Domainl|Colombe.Domain.IPv4v->`Addr(Emile.IPv4v)|Colombe.Domain.IPv6v->`Addr(Emile.IPv6v)|Colombe.Domain.Extension(k,v)->`Addr(Emile.Ext(k,v))letof_local=function|`Dot_stringvs->List.map(funx->`Atomx)vs|`Stringv->[`Stringv]letto_locallocal=ifList.existsis_stringlocalthen`String(concatenelocal)else`Dot_string(List.map(function`Atomx->x|`Stringx->x)local)letto_path?routemailbox=letlocal=mailbox.Emile.localinletdomain,domains=mailbox.Emile.domaininletlocal=to_locallocalinletrest=matchroutewithSomeroute->route|None->List.mapto_domaindomainsinletdomain=to_domaindomainin{Colombe.Path.local;domain;rest}letto_reverse_path?routemailbox=some(to_path?routemailbox)letto_forward_path?routemailbox=matchmailbox.Emile.localwith|[`Atomlocal]whenString.lowercase_asciilocal="postmaster"->Colombe.Forward_path.Domain(to_domain(fstmailbox.Emile.domain))|_->Colombe.Forward_path.Forward_path(to_path?routemailbox)letof_pathpath=letlocal=of_localpath.Colombe.Path.localinletdomain=of_domainpath.Colombe.Path.domaininletdomains=List.mapof_domainpath.Colombe.Path.restin{Emile.name=None;local;domain=(domain,domains)}letof_forward_path=function|Colombe.Forward_path.Postmaster->None|Colombe.Forward_path.Domaindomain->letdomain=of_domaindomaininSome{Emile.name=None;local=[`Atom"Postmaster"];domain=(domain,[]);}|Colombe.Forward_path.Forward_pathpath->Some(of_pathpath)letof_reverse_path=functionNone->None|Somepath->Some(of_pathpath)