feature_showcase/
feature_showcase.rs1use async_trait::async_trait;
2use std::time::Duration;
3use timer_lib::{Timer, TimerCallback, TimerManager};
4use tokio::time::sleep;
5
6struct OneTimeCallback;
7struct RecurringCallback;
8struct ErrorCallback;
9
10#[async_trait]
11impl TimerCallback for OneTimeCallback {
12 async fn execute(&self) -> Result<(), timer_lib::TimerError> {
13 println!("One-time timer executed!");
14 Ok(())
15 }
16}
17
18#[async_trait]
19impl TimerCallback for RecurringCallback {
20 async fn execute(&self) -> Result<(), timer_lib::TimerError> {
21 println!("Recurring timer executed!");
22 Ok(())
23 }
24}
25
26#[async_trait]
27impl TimerCallback for ErrorCallback {
28 async fn execute(&self) -> Result<(), timer_lib::TimerError> {
29 Err(timer_lib::TimerError::CallbackError(
30 "Simulated error!".into(),
31 ))
32 }
33}
34
35#[tokio::main]
36async fn main() {
37 let manager = TimerManager::new();
38
39 let mut one_time_timer = Timer::new();
41 one_time_timer
42 .start_once(Duration::from_secs(2), OneTimeCallback)
43 .await
44 .unwrap();
45 manager.add_timer(one_time_timer);
46
47 let mut recurring_timer = Timer::new();
49 recurring_timer
50 .start_recurring(Duration::from_secs(3), RecurringCallback, Some(5))
51 .await
52 .unwrap();
53 let recurring_timer_id = manager.add_timer(recurring_timer);
54
55 sleep(Duration::from_secs(6)).await;
57 println!("Pausing recurring timer...");
58 if let Some(timer) = manager
59 .get_timer(recurring_timer_id)
60 .and_then(|t| t.lock().ok().map(|t| t.clone()))
61 {
62 timer.pause().await.unwrap();
63 }
64
65 sleep(Duration::from_secs(3)).await; println!("Resuming recurring timer...");
67 if let Some(timer) = manager
68 .get_timer(recurring_timer_id)
69 .and_then(|t| t.lock().ok().map(|t| t.clone()))
70 {
71 timer.resume().await.unwrap();
72 }
73
74 sleep(Duration::from_secs(6)).await;
76 println!("Adjusting recurring timer interval...");
77 if let Some(mut timer) = manager.get_timer(recurring_timer_id).and_then(|t: std::sync::Arc<std::sync::Mutex<Timer>>| t.lock().ok().map(|t| t.clone())) {
78 timer.adjust_interval(Duration::from_secs(1)).unwrap();
79 }
80
81 sleep(Duration::from_secs(10)).await;
83 println!("Retrieving timer statistics...");
84 if let Some(timer) = manager.get_timer(recurring_timer_id).and_then(|t| t.lock().ok().map(|t| t.clone())) {
85 let stats = timer.get_statistics().await;
86 println!("Timer statistics: {:?}", stats);
87 }
88
89 println!("Starting a timer with an error callback...");
91 let mut error_timer = Timer::new();
92 if let Err(e) = error_timer
93 .start_once(Duration::from_secs(2), ErrorCallback)
94 .await
95 {
96 println!("Error while starting timer: {}", e);
97 }
98
99 println!("All timers completed!");
100}