derive_getters/
extract.rs

1//! Common functions
2
3use 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}