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#[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}