1use std::sync::Arc;
2
3use actors::{Actor, Arguments};
4
5pub trait ActorFactory: Send + Sync {
7 fn create(&self) -> Arc<Actor>;
9}
10
11pub struct Props<Args: Arguments, A: Actor> {
16 creator: Arc<Fn(Args) -> A + Sync + Send>,
17 args: Args,
18}
19
20impl<Args: Arguments, A: Actor> Props<Args, A> {
21 pub fn new(creator: Arc<Fn(Args) -> A + Sync + Send>, args: Args) -> Arc<ActorFactory> {
23 Arc::new(Props::<Args, A> {
24 creator: creator,
25 args: args,
26 })
27 }
28}
29
30impl<Args: Arguments, A: Actor> ActorFactory for Props<Args, A> {
31 fn create(&self) -> Arc<Actor> {
35 let args = self.args.clone();
37 Arc::new((self.creator)(args))
38 }
39}
40
41impl<Args: Arguments, A: Actor> Clone for Props<Args, A> {
42 fn clone(&self) -> Props<Args, A> {
43 Props::<Args, A> {
44 creator: self.creator.clone(),
45 args: self.args.clone(),
46 }
47 }
48}