derive_getters/
extract.rs
1use proc_macro2::Span;
4use syn::{FieldsNamed, DataStruct, DeriveInput, Data, Fields, Error, Result};
5
6use crate::faultmsg::{StructIs, Problem};
7
8pub fn named_fields(structure: &DataStruct) -> Result<&FieldsNamed> {
9 match structure.fields {
10 Fields::Named(ref fields) => Ok(fields),
11 Fields::Unnamed(_) | Fields::Unit => Err(
12 Error::new(Span::call_site(), Problem::UnnamedField)
13 ),
14 }
15}
16
17pub fn named_struct(node: &DeriveInput) -> Result<&DataStruct> {
18 match node.data {
19 Data::Struct(ref structure) => Ok(structure),
20 Data::Enum(_) => Err(
21 Error::new_spanned(node, Problem::NotNamedStruct(StructIs::Enum))
22 ),
23 Data::Union(_) => Err(
24 Error::new_spanned(node, Problem::NotNamedStruct(StructIs::Union))
25 ),
26 }
27}