gotham_formdata_derive 0.0.7

Implementation detail of gotham_formdata
Documentation
use proc_macro2::{Ident, Span};
use syn::{
	parse::{Parse, ParseStream},
	spanned::Spanned,
	Error, Expr, Result, Token, Type
};

#[allow(dead_code)]
struct FieldMeta {
	ident: Ident,
	eq_token: Token![=],
	expr: Expr
}

impl Parse for FieldMeta {
	fn parse(input: ParseStream<'_>) -> Result<Self> {
		Ok(Self {
			ident: input.parse()?,
			eq_token: input.parse()?,
			expr: input.parse()?
		})
	}
}

pub(super) struct Field {
	pub(super) ident: Ident,
	pub(super) ty: Type
}

impl Field {
	pub(super) fn new(field: syn::Field) -> Result<Self> {
		let span = field.span();

		let mut ident = field.ident.ok_or_else(|| {
			Error::new(span, "Fields without an ident are not supported")
		})?;
		ident.set_span(Span::call_site());

		Ok(Self { ident, ty: field.ty })
	}
}