studs_macros_lib/ext/
fields.rs1use syn::punctuated::Punctuated;
2use syn::token::Comma;
3use syn::{Field, Fields, FieldsNamed, FieldsUnnamed};
4
5pub trait FieldsExt {
6 fn as_punctuated(&self) -> Option<&Punctuated<Field, Comma>>;
7
8 fn into_punctuated(self) -> Option<Punctuated<Field, Comma>>;
9}
10
11macro_rules! punctuated_block {
12 ($self:ident) => {
13 match $self {
14 Fields::Named(FieldsNamed { named, .. }) => Some(named),
15 Fields::Unnamed(FieldsUnnamed { unnamed, .. }) => Some(unnamed),
16 Fields::Unit => None,
17 }
18 };
19}
20
21impl FieldsExt for Fields {
22 fn as_punctuated(&self) -> Option<&Punctuated<Field, Comma>> { punctuated_block!(self) }
23
24 fn into_punctuated(self) -> Option<Punctuated<Field, Comma>> { punctuated_block!(self) }
25}