1234567891011121314151617181920212223242526272829303132333435363738394041letsomex=Somexletconcatenelocal=String.concat"."(List.map(function`Atomx->x|`Stringx->x)local)letis_string=function|`String_->true|`Atom_->falseletcast_domain=function|`Literal_->Rresult.R.error_msgf"Impossible to make a path with a literal domain"|`Domainl->Ok(Colombe.Domain.Domainl)|`Addr(Mrmime.Mailbox.IPv4v)->Ok(Colombe.Domain.IPv4v)|`Addr(Mrmime.Mailbox.IPv6v)->Ok(Colombe.Domain.IPv6v)|`Addr(Mrmime.Mailbox.Ext(k,v))->Ok(Colombe.Domain.Extension(k,v))letto_path?(route=[])mailbox=letlocal=mailbox.Mrmime.Mailbox.localinletdomain,_=mailbox.Mrmime.Mailbox.domaininletlocal=ifList.existsis_stringlocalthen`String(concatenelocal)else`Dot_string(List.map(function`Atomx->x|`Stringx->x)local)inmatchcast_domaindomainwith|Okdomain->Ok{Colombe.Path.local;domain;rest=route}|Error_aserr->errletto_reverse_path?routemailbox=letopenRresult.Rinto_path?routemailbox>>|someletto_forward_path?routemailbox=letopenRresult.Rinmatchmailbox.Mrmime.Mailbox.localwith|[`Atom"Postmaster"]->cast_domain(fstmailbox.Mrmime.Mailbox.domain)>>|fundomain->Colombe.Forward_path.Domaindomain|_->to_path?routemailbox>>|funpath->Colombe.Forward_path.Forward_pathpath