Carl Lerche | 9a7d588 | 2019-02-15 12:27:04 -0800 | [diff] [blame^] | 1 | use crate::types; |
| 2 | |
| 3 | use std::fs::File; |
| 4 | use std::io::prelude::*; |
| 5 | use std::path::Path; |
| 6 | |
| 7 | pub fn generate(types: &[types::TypeDef]) { |
| 8 | let codegen_root = Path::new(env!("CARGO_MANIFEST_DIR")); |
| 9 | |
| 10 | let mut f = File::open(codegen_root.join("../Cargo.toml")).unwrap(); |
| 11 | let mut s = String::new(); |
| 12 | f.read_to_string(&mut s).unwrap(); |
| 13 | |
| 14 | let manifest: Manifest = toml::from_str(&s).unwrap(); |
| 15 | |
| 16 | let f = ::std::fs::File::create(codegen_root.join("../syn.json")).unwrap(); |
| 17 | |
| 18 | serde_json::to_writer_pretty(f, &Introspect { |
| 19 | version: &manifest.package.version, |
| 20 | types, |
| 21 | }).unwrap(); |
| 22 | } |
| 23 | |
| 24 | #[derive(Debug, Deserialize)] |
| 25 | struct Manifest { |
| 26 | package: Package, |
| 27 | } |
| 28 | |
| 29 | #[derive(Debug, Deserialize)] |
| 30 | struct Package { |
| 31 | version: String, |
| 32 | } |
| 33 | |
| 34 | #[derive(Debug, Serialize)] |
| 35 | struct Introspect<'a> { |
| 36 | /// The `syn` version used to generate the introspection file |
| 37 | version: &'a str, |
| 38 | types: &'a [types::TypeDef], |
| 39 | } |