Skip to main content

sprite_core/
builder.rs

1use crate::engine::{Engine, Handle};
2use crate::actor::Context;
3use std::time::Duration;
4
5/// Fluent builder for spawning actors with configuration.
6pub 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}