#![cfg_attr(rustfmt, rustfmt::skip)] use super::*; pub(in crate) fn mb_file_expanded (output: TokenStream2) -> TokenStream2 { let mut debug_macros_dir = match ::std::env::var_os("DEBUG_MACROS_LOCATION") { | Some(it) => ::std::path::PathBuf::from(it), | None => return output, } ; let hopefully_unique = { use ::std::hash::*; let ref mut hasher = ::std::collections::hash_map::RandomState::new() .build_hasher() ; hasher.finish() }; debug_macros_dir.push("safer-ffi-debugged-proc-macros"); ::std::fs::create_dir_all(&debug_macros_dir) .unwrap_or_else(|err| panic!( "`DEBUG_MACROS_LOCATION`-error: failed to create {}: {}", debug_macros_dir.display(), err, )) ; let ref file_name = { debug_macros_dir.push(format!("{:016x}.rs", hopefully_unique)); debug_macros_dir .into_os_string() .into_string() .expect("`DEBUG_MACROS_LOCATION`-error: \ non-UTF-8 paths are not supported\ ") }; let macro_name = Ident::new(&format!("_{hopefully_unique:016x}"), Span::call_site()); ::std::fs::write( file_name, ::std::panic::catch_unwind(|| ::prettyplease::unparse(&parse_quote!(#output))) .unwrap_or_else(|_| quote!(#output).to_string()) , ) .unwrap_or_else(|err| panic!( "`DEBUG_MACROS_LOCATION`-error: failed to write to `{}`: {}", file_name, err )) ; let warning = compile_warning("e!(), &format!( "Output emitted to {file_name}", )) ; quote!( #warning ::core::include! { #file_name } ) }