1 use anyhow::Result; 2 use proc_macro2::TokenStream; 3 use std::fs; 4 use std::io::Write; 5 use std::path::Path; 6 write<P: AsRef<Path>>(path: P, content: TokenStream) -> Result<()>7pub fn write<P: AsRef<Path>>(path: P, content: TokenStream) -> Result<()> { 8 let mut formatted = Vec::new(); 9 writeln!( 10 formatted, 11 "// This file is @generated by syn-internal-codegen." 12 )?; 13 writeln!(formatted, "// It is not intended for manual editing.")?; 14 writeln!(formatted)?; 15 16 let syntax_tree: syn::File = syn::parse2(content).unwrap(); 17 let pretty = prettyplease::unparse(&syntax_tree); 18 write!(formatted, "{}", pretty)?; 19 20 if path.as_ref().is_file() && fs::read(&path)? == formatted { 21 return Ok(()); 22 } 23 24 fs::write(path, formatted)?; 25 Ok(()) 26 } 27