gmt_dos_actors/model/
ready.rs1use super::{Model, Ready, Running};
2use chrono::{DateTime, Local, SecondsFormat};
3use std::{marker::PhantomData, time::Instant};
4
5impl Model<Ready> {
6 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 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}