ic-event-hub-macros 0.1.5

Macroses
Documentation
use syn::parse::{Parse, ParseStream};
use syn::{Ident, LitStr, Token};

#[derive(Debug)]
pub struct GuardAssign {
    pub guard_name: Option<String>,
}

impl Parse for GuardAssign {
    fn parse(input: ParseStream) -> syn::Result<Self> {
        let lookahead = input.lookahead1();

        if input.is_empty() {
            return Ok(Self { guard_name: None });
        } else if lookahead.peek(Ident) {
            let ident = input.parse::<Ident>()?;
            if ident != "guard" {
                panic!("Only \"guard\" argument allowed (e.g. 'guard = \"function_name\"')");
            }

            let lookahead = input.lookahead1();

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

                let lookahead = input.lookahead1();

                if lookahead.peek(LitStr) {
                    let guard_name = input.parse::<LitStr>()?.value();

                    return Ok(Self {
                        guard_name: Some(guard_name),
                    });
                }
            }
        }

        Err(lookahead.error())
    }
}