Assert that json can be deserialized
diff --git a/codegen/src/json.rs b/codegen/src/json.rs
index 532260e..d870a64 100644
--- a/codegen/src/json.rs
+++ b/codegen/src/json.rs
@@ -1,7 +1,7 @@
use crate::types;
use std::collections::BTreeMap;
-use std::fs::File;
+use std::fs::{self, File};
use std::io::prelude::*;
use std::path::Path;
@@ -14,17 +14,18 @@
let manifest: Manifest = toml::from_str(&s).unwrap();
- let f = ::std::fs::File::create(codegen_root.join("../syn.json")).unwrap();
+ let introspect = Introspect {
+ version: manifest.package.version,
+ types: defs.types.clone(),
+ tokens: defs.tokens.clone(),
+ };
- serde_json::to_writer_pretty(
- f,
- &Introspect {
- version: &manifest.package.version,
- types: &defs.types,
- tokens: &defs.tokens,
- },
- )
- .unwrap();
+ let j = serde_json::to_string_pretty(&introspect).unwrap();
+ let check: Introspect = serde_json::from_str(&j).unwrap();
+ assert_eq!(introspect, check);
+
+ let json_path = codegen_root.join("../syn.json");
+ fs::write(json_path, j).unwrap();
}
#[derive(Debug, Deserialize)]
@@ -37,10 +38,10 @@
version: String,
}
-#[derive(Debug, Serialize)]
-struct Introspect<'a> {
+#[derive(Debug, PartialEq, Serialize, Deserialize)]
+struct Introspect {
/// The `syn` version used to generate the introspection file
- version: &'a str,
- types: &'a [types::Node],
- tokens: &'a BTreeMap<String, String>,
+ version: String,
+ types: Vec<types::Node>,
+ tokens: BTreeMap<String, String>,
}