1use crate::engine::{Engine, Handle};
2use crate::actor::Context;
3use std::time::Duration;
4
5pub struct ActorBuilder<F>
7where
8 F: Fn(&mut Context) + Send + Sync + 'static,
9{
10 name: String,
11 setup: F,
12 arena_size: usize,
13 max_recoveries: u32,
14 recovery_window: Duration,
15}
16
17impl<F> ActorBuilder<F>
18where
19 F: Fn(&mut Context) + Send + Sync + 'static,
20{
21 pub fn new(name: &str, setup: F) -> Self {
22 Self {
23 name: name.to_string(),
24 setup,
25 arena_size: 1024 * 64,
26 max_recoveries: 10,
27 recovery_window: Duration::from_secs(5),
28 }
29 }
30
31 pub fn arena_size(mut self, bytes: usize) -> Self {
32 self.arena_size = bytes;
33 self
34 }
35
36 pub fn max_recoveries(mut self, n: u32) -> Self {
37 self.max_recoveries = n;
38 self
39 }
40
41 pub fn recovery_window(mut self, d: Duration) -> Self {
42 self.recovery_window = d;
43 self
44 }
45
46 pub fn spawn(self, engine: &Engine) -> Handle {
47 engine.spawn_with_config(&self.name, self.setup, self.arena_size, self.max_recoveries, self.recovery_window)
48 }
49}