swc_ecma_quote_macros/
builder.rs1use proc_macro2::Span;
2use syn::{punctuated::Punctuated, Expr, ExprStruct, FieldValue, Ident, Member, Token};
3
4pub(crate) struct Builder {
5 type_name: syn::Ident,
6 fields: Punctuated<FieldValue, Token![,]>,
7}
8
9impl Builder {
10 pub fn new(ident: &str) -> Self {
11 Self {
12 type_name: Ident::new(ident, Span::call_site()),
13 fields: Default::default(),
14 }
15 }
16
17 pub fn add(&mut self, name: &str, value: Expr) {
18 self.fields.push(FieldValue {
19 attrs: Default::default(),
20 member: Member::Named(Ident::new(name, Span::call_site())),
21 colon_token: Some(Default::default()),
22 expr: value,
23 });
24 }
25
26 pub fn build(self) -> ExprStruct {
27 let type_name = self.type_name;
28
29 ExprStruct {
30 attrs: Default::default(),
31 brace_token: Default::default(),
32 path: syn::parse_quote!(swc_core::ecma::ast::#type_name),
33 fields: self.fields,
34 dot2_token: Default::default(),
35 rest: Default::default(),
36 qself: None,
37 }
38 }
39}