@samitouri / QOS-React-2 / commits / 8bc6184728

[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 }