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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use std::sync::Arc;
use actors::{Actor, Arguments};
pub trait ActorFactory: Send + Sync {
fn create(&self) -> Arc<Actor>;
}
pub struct Props<Args: Arguments, A: Actor> {
creator: Arc<Fn(Args) -> A + Sync + Send>,
args: Args,
}
impl<Args: Arguments, A: Actor> Props<Args, A> {
pub fn new(creator: Arc<Fn(Args) -> A + Sync + Send>, args: Args) -> Arc<ActorFactory> {
Arc::new(Props::<Args, A> {
creator: creator,
args: args,
})
}
}
impl<Args: Arguments, A: Actor> ActorFactory for Props<Args, A> {
fn create(&self) -> Arc<Actor> {
let args = self.args.clone();
Arc::new((self.creator)(args))
}
}
impl<Args: Arguments, A: Actor> Clone for Props<Args, A> {
fn clone(&self) -> Props<Args, A> {
Props::<Args, A> {
creator: self.creator.clone(),
args: self.args.clone(),
}
}
}