1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use std::rc::Rc;

pub struct Mailbox<Message: 'static> {
    func: Rc<dyn Fn(Option<Message>)>,
}

impl<Ms> Mailbox<Ms> {
    pub fn new(func: impl Fn(Option<Ms>) + 'static) -> Self {
        Mailbox {
            func: Rc::new(func),
        }
    }

    pub fn send(&self, message: Option<Ms>) {
        (self.func)(message)
    }
}

impl<Ms> Clone for Mailbox<Ms> {
    fn clone(&self) -> Self {
        Mailbox {
            func: self.func.clone(),
        }
    }
}