Move formatted file writing to module

We will want to use this from other Rust-generating modules.
diff --git a/codegen/src/file.rs b/codegen/src/file.rs
new file mode 100644
index 0000000..fd1dd8a
--- /dev/null
+++ b/codegen/src/file.rs
@@ -0,0 +1,22 @@
+use proc_macro2::TokenStream;
+use rustfmt_nightly as rustfmt;
+use std::fs::File;
+use std::io::Write;
+
+pub fn write(path: &str, content: TokenStream) {
+    let mut file = File::create(path).unwrap();
+    write!(
+        file,
+        "// THIS FILE IS AUTOMATICALLY GENERATED; DO NOT EDIT\n\n"
+    )
+    .unwrap();
+    let mut config = rustfmt::Config::default();
+    config.set().emit_mode(rustfmt::EmitMode::Stdout);
+    config.set().verbose(rustfmt::Verbosity::Quiet);
+    config.set().format_macro_matchers(true);
+    config.set().normalize_doc_attributes(true);
+    let mut session = rustfmt::Session::new(config, Some(&mut file));
+    session
+        .format(rustfmt::Input::Text(content.to_string()))
+        .unwrap();
+}