Skip to content

Commit 0aef518

Browse files
Allow flattening unit struct
1 parent c5119ec commit 0aef518

File tree

2 files changed

+24
-31
lines changed

2 files changed

+24
-31
lines changed

macros/src/types/enum.rs

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ fn format_variant(
139139
};
140140

141141
let formatted = match (untagged_variant, enum_attr.tagged()?) {
142-
(true, _) | (_, Tagged::Untagged) => quote!(#parsed_ty),
142+
(true, _) | (_, Tagged::Untagged) => parsed_ty,
143143
(false, Tagged::Externally) => match &variant.fields {
144144
Fields::Unit => quote!(format!("\"{}\"", #ts_name)),
145145
Fields::Unnamed(unnamed) if unnamed.unnamed.len() == 1 => {
@@ -183,36 +183,29 @@ fn format_variant(
183183
format!("{{ \"{}\": \"{}\", \"{}\": {} }}", #tag, #ts_name, #content, #parsed_ty)
184184
),
185185
},
186-
(false, Tagged::Internally { tag }) => match variant_type.inline_flattened {
187-
Some(_) => {
188-
quote! { #parsed_ty }
189-
}
190-
None => match &variant.fields {
191-
Fields::Unnamed(unnamed) if unnamed.unnamed.len() == 1 => {
192-
let field = &unnamed.unnamed[0];
193-
let field_attr = FieldAttr::from_attrs(&unnamed.unnamed[0].attrs)?;
194-
195-
field_attr.assert_validity(field)?;
196-
197-
if field_attr.skip {
198-
quote!(format!("{{ \"{}\": \"{}\" }}", #tag, #ts_name))
199-
} else {
200-
let ty = match field_attr.type_override {
201-
Some(type_override) => quote! { #type_override },
202-
None => {
203-
let ty = field_attr.type_as(&field.ty);
204-
quote!(<#ty as #crate_rename::TS>::name(cfg))
205-
}
206-
};
207-
208-
quote!(format!("{{ \"{}\": \"{}\" }} & {}", #tag, #ts_name, #ty))
209-
}
210-
}
211-
Fields::Unit => quote!(format!("{{ \"{}\": \"{}\" }}", #tag, #ts_name)),
212-
_ => {
213-
quote!(format!("{{ \"{}\": \"{}\" }} & {}", #tag, #ts_name, #parsed_ty))
186+
(false, Tagged::Internally { tag }) => match &variant.fields {
187+
Fields::Unnamed(unnamed) if unnamed.unnamed.len() == 1 => {
188+
let field = &unnamed.unnamed[0];
189+
let field_attr = FieldAttr::from_attrs(&unnamed.unnamed[0].attrs)?;
190+
191+
field_attr.assert_validity(field)?;
192+
193+
if field_attr.skip {
194+
quote!(format!("{{ \"{}\": \"{}\" }}", #tag, #ts_name))
195+
} else {
196+
let ty = match field_attr.type_override {
197+
Some(type_override) => quote! { #type_override },
198+
None => {
199+
let ty = field_attr.type_as(&field.ty);
200+
quote!(<#ty as #crate_rename::TS>::name(cfg))
201+
}
202+
};
203+
204+
quote!(format!("{{ \"{}\": \"{}\" }} & {}", #tag, #ts_name, #ty))
214205
}
215-
},
206+
}
207+
Fields::Unit => quote!(format!("{{ \"{}\": \"{}\" }}", #tag, #ts_name)),
208+
_ => parsed_ty,
216209
},
217210
};
218211

macros/src/types/unit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ pub(crate) fn null(attr: &StructAttr, ts_name: Expr) -> DerivedTS {
5151
DerivedTS {
5252
crate_rename: crate_rename.clone(),
5353
inline: quote!("null".to_owned()),
54-
inline_flattened: None,
54+
inline_flattened: Some(quote!("{ }".to_owned())),
5555
docs: attr.docs.clone(),
5656
dependencies: Dependencies::new(crate_rename),
5757
export: attr.export,

0 commit comments

Comments
 (0)