localize_it 2.1.0

Simple and fast library for localization
Documentation
use proc_macro2::Ident;
use syn::{
    parse::{Parse, ParseStream}, Error, Expr, LitStr,
    Token,
};

pub enum Item {
    Variant { name: Ident, label: LitStr },
    Optional { name: String, value: Expr },
}

impl Parse for Item {
    fn parse(input: ParseStream) -> Result<Self, Error> {
        let name = input.parse::<Ident>()?;

        if input.peek(Token![=]) && !input.peek(Token![=>]) {
            input.parse::<Token![=]>()?;

            let name = name.to_string();
            let value = input.parse()?;

            Ok(Self::Optional { name, value })
        } else {
            let label = if input.peek(Token![=>]) {
                input.parse::<Token![=>]>()?;

                input.parse()?
            } else {
                LitStr::new(&name.to_string(), name.span())
            };

            Ok(Self::Variant { name, label })
        }
    }
}