fire-protobuf-codegen 0.1.6

Rust only protobuf implementation
Documentation
use crate::FIELD;

use proc_macro2::Span;
use syn::{Error, Attribute, Path, LitInt, Token};
use syn::parse::{Parse, ParseStream};


pub struct FieldAttr {
	pub fieldnum: LitInt,
	pub default: Option<Path>
}

impl FieldAttr {
	pub fn from_attrs(attrs: &[Attribute]) -> Result<Self, Error> {
		for attr in attrs {
			if !attr.path().is_ident(FIELD) {
				continue
			}

			return attr.parse_args()
		}

		Err(Error::new(
			Span::call_site(),
			"expected #[field(..)]"
		))
	}
}

impl Parse for FieldAttr {
	fn parse(input: ParseStream) -> Result<Self, Error> {
		let fieldnum: LitInt = input.parse()?;
		let mut default = None;
		if input.lookahead1().peek(Token![,]) {
			input.parse::<Token![,]>()?;

			default = Some(input.parse()?);
		}

		if fieldnum.base10_digits() == "0" {
			return Err(Error::new_spanned(fieldnum, "numbers need to be > 0"))
		}

		Ok(Self { fieldnum, default })
	}
}