use std::path::PathBuf;
const ENV_VAR: &str = "OPENAPI_TRAIT_DEBUG";
pub fn write_debug_output(mod_ident: &syn::Ident, expanded: &proc_macro2::TokenStream) {
let Some(dir) = resolve_dir() else {
return;
};
let path = dir.join(format!("{mod_ident}.rs"));
let formatted = syn::parse2::<syn::File>(expanded.clone()).map_or_else(
|_| expanded.to_string(),
|file| prettyplease::unparse(&file),
);
match std::fs::create_dir_all(&dir).and_then(|()| std::fs::write(&path, formatted)) {
Ok(()) => eprintln!("openapi-trait: wrote debug output to {}", path.display()),
Err(error) => eprintln!(
"openapi-trait: failed to write debug output to {}: {error}",
path.display()
),
}
}
fn resolve_dir() -> Option<PathBuf> {
let value = std::env::var(ENV_VAR).ok()?;
match value.trim() {
"" | "0" | "false" => None,
"1" | "true" => Some(default_dir()),
path => Some(PathBuf::from(path)),
}
}
fn default_dir() -> PathBuf {
std::env::var_os("OUT_DIR")
.map_or_else(std::env::temp_dir, PathBuf::from)
.join("openapi-trait-debug")
}