• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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<()>7 pub 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