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) { ... }