studs_macros_lib/ext/
fields.rs

1use 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}