use v6.d;
unit role MaildirIndexer::Index;
use MaildirIndexer::Email;
my class AddMail is export {
has MaildirIndexer::Email:D $.email is required;
has Str:D $.mailbox is required;
}
my class DelPath is export {
has IO:D $.path is required;
has Str:D $.mailbox is required;
}
my class MailboxForEmail is export {
has MaildirIndexer::Email:D $.email is required;
has Channel:D $.reply-to is required;
}
my class Mailbox is export {
has Str:D $.name is required;
has Numeric:D $.confidence is required;
}
method receive(Channel:D $channel --> Nil) {
react {
whenever $channel -> $event {
when $event ~~ AddMail {
self.add-mail($event.email, $event.mailbox);
}
when $event ~~ DelPath {
self.del-path($event.path, $event.mailbox);
}
when $event ~~ MailboxForEmail {
$event.reply-to.send(self.mailbox-for-email($event.email));
}
}
}
}
method add-mail(MaildirIndexer::Email:D $email, Str:D $mailbox --> Nil) { ... }
method del-path(IO:D $path, Str:D $mailbox --> Nil) { ... }
method mailbox-for-email(MaildirIndexer::Email:D $email --> Mailbox) { ... }