gmt_dos_actors/model/
ready.rs

1use super::{Model, Ready, Running};
2use chrono::{DateTime, Local, SecondsFormat};
3use std::{marker::PhantomData, time::Instant};
4
5impl Model<Ready> {
6    /// Spawns each actor task
7    pub fn run(self) -> Model<Running> {
8        let now: DateTime<Local> = Local::now();
9        self.verbose.then(|| {
10            eprintln!(
11                "[{}<{}>] LAUNCHED",
12                self.name
13                    .as_ref()
14                    .unwrap_or(&String::from("Model"))
15                    .to_uppercase(),
16                now.to_rfc3339_opts(SecondsFormat::Secs, true),
17            )
18        });
19        // let mut task_handles = vec![];
20        /*         let mut actors = self.actors.take().unwrap();
21        while let Some(mut actor) = actors.pop() {
22            task_handles.push(tokio::spawn(async move {
23                actor.task().await;
24            }));
25        } */
26        let task_handles: Vec<_> = self
27            .actors
28            .into_iter()
29            .flatten()
30            .map(|actor| tokio::spawn(async move { actor.task().await }))
31            .collect();
32        Model::<Running> {
33            name: self.name,
34            actors: None,
35            task_handles: Some(task_handles),
36            state: PhantomData,
37            start: Instant::now(),
38            verbose: self.verbose,
39            elapsed_time: Default::default(),
40        }
41    }
42}