use proc_macro::Span; use quote::ToTokens; use std::path::PathBuf; use syn::{Item, ItemFn}; pub fn get_current_app_path() -> Option { let call_site = Span::call_site(); let binding = call_site.source_file().path(); let call_site_str = binding.to_string_lossy(); let call_site_line = call_site.start().line(); let path_buf = PathBuf::from(call_site_str.to_string()); if let Some(parent) = path_buf.parent() { if let Some(parent) = parent.parent() { let path_buf = parent.to_path_buf().join("main.rs"); return Some(path_buf); } } None } pub fn parse_main_macro_args(item_fn: &ItemFn) -> Option { let mut app_args = AppArgs {}; let mut is_main = false; for attr in &item_fn.attrs { if attr.to_token_stream().to_string().contains("main") { is_main = true; } } if is_main { return Some(app_args); } None } #[derive(Debug)] pub struct AppArgs {}