lighty_core/
macros.rs

1#[macro_export]
2macro_rules! join_and_mkdir {
3    ($path:expr, $join:expr) => {{
4        let path = $path.join($join);
5        $crate::mkdir!(&path);
6        path
7    }};
8}
9
10#[macro_export]
11macro_rules! join_and_mkdir_vec {
12    ($path:expr, $joins:expr) => {{
13        let mut path = $path.to_path_buf();
14        for join in $joins {
15            path = path.join(join);
16            $crate::mkdir!(&path);
17        }
18        path
19    }};
20}
21
22#[macro_export]
23macro_rules! mkdir {
24    ($path:expr) => {
25        if !$path.exists() {
26            if let Err(e) = tokio::fs::create_dir_all(&$path).await {
27                error!("Failed to create directory {:?}: {}", $path, e);
28            }
29        }
30    };
31}
32
33// Blocking version for sync contexts (if needed)
34#[macro_export]
35macro_rules! mkdir_blocking {
36    ($path:expr) => {
37        if !$path.exists() {
38            let path = $path.to_path_buf();
39            tokio::task::spawn_blocking(move || {
40                std::fs::create_dir_all(&path)
41            }).await.ok();
42        }
43    };
44}
45
46
47#[macro_export]
48macro_rules! time_it {
49    ($label:expr, $expr:expr) => {{
50        let start = std::time::Instant::now();
51        let result = $expr;
52        let elapsed = start.elapsed();
53        tracing::debug!(label = $label, elapsed = ?elapsed, "Operation completed");
54        result
55    }};
56}