use swc_experimental_ecma_ast::*;
#[derive(Debug)]
pub enum ExprRef<'ast> {
This(&'ast ThisExpr),
Array(&'ast ArrayLit<'ast>),
Object(&'ast ObjectLit<'ast>),
Fn(&'ast FnExpr<'ast>),
Unary(&'ast UnaryExpr<'ast>),
Update(&'ast UpdateExpr<'ast>),
Bin(&'ast BinExpr<'ast>),
Assign(&'ast AssignExpr<'ast>),
Member(&'ast MemberExpr<'ast>),
SuperProp(&'ast SuperPropExpr<'ast>),
Cond(&'ast CondExpr<'ast>),
Call(&'ast CallExpr<'ast>),
New(&'ast NewExpr<'ast>),
Seq(&'ast SeqExpr<'ast>),
Ident(&'ast Ident<'ast>),
Lit(&'ast Lit<'ast>),
Tpl(&'ast Tpl<'ast>),
TaggedTpl(&'ast TaggedTpl<'ast>),
Arrow(&'ast ArrowExpr<'ast>),
Class(&'ast ClassExpr<'ast>),
Yield(&'ast YieldExpr<'ast>),
MetaProp(&'ast MetaPropExpr),
Await(&'ast AwaitExpr<'ast>),
Paren(&'ast ParenExpr<'ast>),
JSXMember(&'ast JSXMemberExpr<'ast>),
JSXNamespacedName(&'ast JSXNamespacedName<'ast>),
JSXEmpty(&'ast JSXEmptyExpr),
JSXElement(&'ast JSXElement<'ast>),
JSXFragment(&'ast JSXFragment<'ast>),
PrivateName(&'ast PrivateName<'ast>),
OptChain(&'ast OptChainExpr<'ast>),
Invalid(&'ast Invalid),
}
impl<'ast> From<&'ast Expr<'ast>> for ExprRef<'ast> {
fn from(expr: &'ast Expr<'ast>) -> Self {
match expr {
Expr::This(this_expr) => ExprRef::This(this_expr),
Expr::Array(array_lit) => ExprRef::Array(array_lit),
Expr::Object(object_lit) => ExprRef::Object(object_lit),
Expr::Fn(fn_expr) => ExprRef::Fn(fn_expr),
Expr::Unary(unary_expr) => ExprRef::Unary(unary_expr),
Expr::Update(update_expr) => ExprRef::Update(update_expr),
Expr::Bin(bin_expr) => ExprRef::Bin(bin_expr),
Expr::Assign(assign_expr) => ExprRef::Assign(assign_expr),
Expr::Member(member_expr) => ExprRef::Member(member_expr),
Expr::SuperProp(super_prop_expr) => ExprRef::SuperProp(super_prop_expr),
Expr::Cond(cond_expr) => ExprRef::Cond(cond_expr),
Expr::Call(call_expr) => ExprRef::Call(call_expr),
Expr::New(new_expr) => ExprRef::New(new_expr),
Expr::Seq(seq_expr) => ExprRef::Seq(seq_expr),
Expr::Ident(ident) => ExprRef::Ident(ident),
Expr::Lit(lit) => ExprRef::Lit(lit),
Expr::Tpl(tpl) => ExprRef::Tpl(tpl),
Expr::TaggedTpl(tagged_tpl) => ExprRef::TaggedTpl(tagged_tpl),
Expr::Arrow(arrow_expr) => ExprRef::Arrow(arrow_expr),
Expr::Class(class_expr) => ExprRef::Class(class_expr),
Expr::Yield(yield_expr) => ExprRef::Yield(yield_expr),
Expr::MetaProp(meta_prop_expr) => ExprRef::MetaProp(meta_prop_expr),
Expr::Await(await_expr) => ExprRef::Await(await_expr),
Expr::Paren(paren_expr) => ExprRef::Paren(paren_expr),
Expr::JSXMember(jsxmember_expr) => ExprRef::JSXMember(jsxmember_expr),
Expr::JSXNamespacedName(jsxnamespaced_name) => ExprRef::JSXNamespacedName(jsxnamespaced_name),
Expr::JSXEmpty(jsxempty_expr) => ExprRef::JSXEmpty(jsxempty_expr),
Expr::JSXElement(jsxelement) => ExprRef::JSXElement(jsxelement),
Expr::JSXFragment(jsxfragment) => ExprRef::JSXFragment(jsxfragment),
Expr::PrivateName(private_name) => ExprRef::PrivateName(private_name),
Expr::OptChain(opt_chain_expr) => ExprRef::OptChain(opt_chain_expr),
Expr::Invalid(invalid) => ExprRef::Invalid(invalid),
}
}
}