blob: e1b641d7c64ee9df07afabd3865c2b17a907576e [file] [log] [blame]
Carl Lerche9a7d5882019-02-15 12:27:04 -08001use crate::types;
2
3use std::fs::File;
4use std::io::prelude::*;
5use std::path::Path;
6
7pub 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)]
25struct Manifest {
26 package: Package,
27}
28
29#[derive(Debug, Deserialize)]
30struct Package {
31 version: String,
32}
33
34#[derive(Debug, Serialize)]
35struct Introspect<'a> {
36 /// The `syn` version used to generate the introspection file
37 version: &'a str,
38 types: &'a [types::TypeDef],
39}