1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use crate::expr::{Expr, Prop};
use crate::{Ident};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(
all(feature = "serde", not(feature = "esprima")),
derive(Deserialize, Serialize)
)]
#[cfg_attr(all(feature = "serde", feature = "esprima"), derive(Deserialize))]
#[cfg_attr(all(feature = "serde", feature = "esprima"), serde(untagged))]
pub enum Pat<'a> {
Ident(Ident<'a>),
Obj(ObjPat<'a>),
Array(Vec<Option<ArrayPatPart<'a>>>),
RestElement(Box<Pat<'a>>),
Assign(AssignPat<'a>),
}
impl<'a> Pat<'a> {
pub fn ident_from(s: &'a str) -> Self {
Pat::Ident(
Ident::from(s)
)
}
}
#[derive(PartialEq, Debug, Clone)]
#[cfg_attr(all(feature = "serialization"), derive(Deserialize, Serialize))]
#[cfg_attr(all(feature = "serde", feature = "esprima"), serde(untagged))]
pub enum ArrayPatPart<'a> {
Pat(Pat<'a>),
Expr(Expr<'a>),
}
pub type ObjPat<'a> = Vec<ObjPatPart<'a>>;
#[derive(PartialEq, Debug, Clone)]
#[cfg_attr(all(feature = "serialization"), derive(Deserialize, Serialize))]
#[cfg_attr(all(feature = "serde", feature = "esprima"), serde(untagged))]
pub enum ObjPatPart<'a> {
Assign(Prop<'a>),
Rest(Box<Pat<'a>>),
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(
all(feature = "serde", not(feature = "esprima")),
derive(Deserialize, Serialize)
)]
#[cfg_attr(all(feature = "serde", feature = "esprima"), derive(Deserialize))]
pub struct AssignPat<'a> {
pub left: Box<Pat<'a>>,
pub right: Box<Expr<'a>>,
}