[rust] deny unused fields on non-node structs
Rejects unknown fields during deserialization of helper structs (which don't have a `type` field). This would be super useful for AST `Node` types, too, but that requires implementing a custom deserializer so i'm punting on that for now.
Joe Savona committed
Jul 25, 2023 at 16:22 UTC
8bc61847284e8ea45e8e4eb1d52bd417025005b9
2 files changed
+6
compiler/forget/crates/forget_estree/src/generated.rs
+5
@@ -5,17 +5,20 @@ use serde::ser::{Serializer, SerializeMap};
5
use serde::{Serialize, Deserialize};
6
use crate::{JsValue, Binding, SourceRange};
7
#[derive(Serialize, Deserialize, Clone, Debug)]
8
+#[serde(deny_unknown_fields)]
9
pub struct SourceLocation {
10
pub source: Option<String>,
11
pub start: Position,
12
pub end: Position,
13
}
14
#[derive(Serialize, Deserialize, Clone, Debug)]
15
+#[serde(deny_unknown_fields)]
16
pub struct Position {
17
pub line: NonZeroU32,
18
pub column: u32,
19
}
20
#[derive(Serialize, Deserialize, Clone, Debug)]
21
+#[serde(deny_unknown_fields)]
22
pub struct Function {
23
pub id: Option<Identifier>,
24
pub params: Vec<Pattern>,
@@ -32,11 +35,13 @@ pub struct Function {
35
pub range: Option<SourceRange>,
36
}
37
#[derive(Serialize, Deserialize, Clone, Debug)]
38
+#[serde(deny_unknown_fields)]
39
pub struct RegExpValue {
40
pub pattern: String,
41
pub flags: String,
42
}
43
#[derive(Serialize, Deserialize, Clone, Debug)]
44
+#[serde(deny_unknown_fields)]
45
pub struct TemplateElementValue {
46
pub cooked: Option<String>,
47
pub raw: String,
compiler/forget/crates/forget_estree_codegen/src/codegen.rs
+1
@@ -90,6 +90,7 @@ impl Object {
90
91
quote! {
92
#[derive(Serialize, Deserialize, Clone, Debug)]
93
+ #[serde(deny_unknown_fields)]
94
pub struct #name {
95
#(#fields),*
96
}