Generate JSON file of all syn types
The JSON file can be used by third party libs to build tools that
consume `syn` types.
diff --git a/codegen/src/json.rs b/codegen/src/json.rs
new file mode 100644
index 0000000..e1b641d
--- /dev/null
+++ b/codegen/src/json.rs
@@ -0,0 +1,39 @@
+use crate::types;
+
+use std::fs::File;
+use std::io::prelude::*;
+use std::path::Path;
+
+pub fn generate(types: &[types::TypeDef]) {
+ let codegen_root = Path::new(env!("CARGO_MANIFEST_DIR"));
+
+ let mut f = File::open(codegen_root.join("../Cargo.toml")).unwrap();
+ let mut s = String::new();
+ f.read_to_string(&mut s).unwrap();
+
+ let manifest: Manifest = toml::from_str(&s).unwrap();
+
+ let f = ::std::fs::File::create(codegen_root.join("../syn.json")).unwrap();
+
+ serde_json::to_writer_pretty(f, &Introspect {
+ version: &manifest.package.version,
+ types,
+ }).unwrap();
+}
+
+#[derive(Debug, Deserialize)]
+struct Manifest {
+ package: Package,
+}
+
+#[derive(Debug, Deserialize)]
+struct Package {
+ version: String,
+}
+
+#[derive(Debug, Serialize)]
+struct Introspect<'a> {
+ /// The `syn` version used to generate the introspection file
+ version: &'a str,
+ types: &'a [types::TypeDef],
+}