1use std::fmt::Display;
2
3#[derive(Debug, Clone)]
4pub struct FunctionCallStats {
5 pub name: String,
6 pub start: std::time::Instant,
7 pub end: std::time::Instant,
8 pub start_var_env: Option<std::time::Instant>,
9 pub end_var_env: Option<std::time::Instant>,
10}
11
12impl Display for FunctionCallStats {
13 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14 if self.start_var_env.is_some() && self.end_var_env.is_some() {
15 write!(
16 f,
17 "FunctionCallStats {{ name: {}, duration: {}ms, var_env_duration: {}ms }}",
18 self.name,
19 (self.end - self.start).as_secs_f64() * 1_000.0,
20 (self.end_var_env.unwrap() - self.start_var_env.unwrap()).as_secs_f64() * 1_000.0
21 )
22 } else {
23 write!(
24 f,
25 "FunctionCallStats {{ name: {}, duration: {}ms, var_env_duration: None (built-in) }}",
26 self.name,
27 (self.end - self.start).as_secs_f64() * 1_000.0
28 )
29 }
30 }
31}