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>,
}
diff --git a/codegen/src/types.rs b/codegen/src/types.rs
index 58ba448..e593a66 100644
--- a/codegen/src/types.rs
+++ b/codegen/src/types.rs
@@ -4,13 +4,13 @@
use std::collections::BTreeMap;
use std::ops;
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, PartialEq)]
pub struct Definitions {
pub types: Vec<Node>,
pub tokens: BTreeMap<String, String>,
}
-#[derive(Debug, Clone, Serialize)]
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Node {
pub ident: String,
pub features: Features,
@@ -22,7 +22,7 @@
pub data: Data,
}
-#[derive(Debug, Clone, Serialize)]
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Data {
Private,
#[serde(rename = "fields")]
@@ -31,13 +31,13 @@
Enum(Vec<Variant>),
}
-#[derive(Debug, Clone, Serialize)]
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Variant {
pub ident: String,
pub fields: Vec<Type>,
}
-#[derive(Debug, Clone, Serialize)]
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Type {
/// Type defined by `syn`
@@ -65,13 +65,13 @@
Tuple(Vec<Type>),
}
-#[derive(Debug, Clone, Serialize)]
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Punctuated {
pub element: Box<Type>,
pub punct: String,
}
-#[derive(Debug, Default, Clone, Serialize)]
+#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct Features {
any: Vec<String>,
}