typhoon-context-macro 0.1.0-alpha.6

TODO
Documentation
use syn::{parse::Parse, Ident, Token};

#[derive(Clone)]
pub enum ConstraintAssociatedToken {
    Mint(Ident),
    Authority(Ident),
}

impl Parse for ConstraintAssociatedToken {
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        input.parse::<Token![::]>()?;
        let name = input.parse::<Ident>()?.to_string();
        match name.as_str() {
            "mint" => {
                input.parse::<Token![=]>()?;

                Ok(ConstraintAssociatedToken::Mint(input.parse()?))
            }
            "authority" => {
                input.parse::<Token![=]>()?;

                Ok(ConstraintAssociatedToken::Authority(input.parse()?))
            }
            _ => Err(syn::Error::new(
                input.span(),
                "Invalid variant for the token constraint.",
            )),
        }
    }
}