blob: 532260e56c789ab4f948d351f0a31b7a7e810104 [file] [log] [blame]
Carl Lerche9a7d5882019-02-15 12:27:04 -08001use crate::types;
2
David Tolnayf9bb8ff2019-02-15 13:10:14 -08003use std::collections::BTreeMap;
Carl Lerche9a7d5882019-02-15 12:27:04 -08004use std::fs::File;
5use std::io::prelude::*;
6use std::path::Path;
7
David Tolnayf9bb8ff2019-02-15 13:10:14 -08008pub fn generate(defs: &types::Definitions) {
Carl Lerche9a7d5882019-02-15 12:27:04 -08009 let codegen_root = Path::new(env!("CARGO_MANIFEST_DIR"));
10
11 let mut f = File::open(codegen_root.join("../Cargo.toml")).unwrap();
12 let mut s = String::new();
13 f.read_to_string(&mut s).unwrap();
14
15 let manifest: Manifest = toml::from_str(&s).unwrap();
16
17 let f = ::std::fs::File::create(codegen_root.join("../syn.json")).unwrap();
18
David Tolnay47fe7402019-02-15 14:35:25 -080019 serde_json::to_writer_pretty(
20 f,
21 &Introspect {
22 version: &manifest.package.version,
23 types: &defs.types,
24 tokens: &defs.tokens,
25 },
26 )
27 .unwrap();
Carl Lerche9a7d5882019-02-15 12:27:04 -080028}
29
30#[derive(Debug, Deserialize)]
31struct Manifest {
32 package: Package,
33}
34
35#[derive(Debug, Deserialize)]
36struct Package {
37 version: String,
38}
39
40#[derive(Debug, Serialize)]
41struct Introspect<'a> {
42 /// The `syn` version used to generate the introspection file
43 version: &'a str,
David Tolnayf9bb8ff2019-02-15 13:10:14 -080044 types: &'a [types::Node],
45 tokens: &'a BTreeMap<String, String>,
Carl Lerche9a7d5882019-02-15 12:27:04 -080046}