Skip to main content

typhoon_syn/constraints/
token.rs

1use syn::{parse::Parse, Expr, Ident, Token};
2
3#[derive(Clone)]
4pub enum ConstraintToken {
5    Mint(Ident),
6    Owner(Expr),
7}
8
9impl Parse for ConstraintToken {
10    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
11        input.parse::<Token![::]>()?;
12        let name = input.parse::<Ident>()?.to_string();
13        match name.as_str() {
14            "mint" => {
15                input.parse::<Token![=]>()?;
16
17                Ok(ConstraintToken::Mint(input.parse()?))
18            }
19            "owner" => {
20                input.parse::<Token![=]>()?;
21
22                Ok(ConstraintToken::Owner(input.parse()?))
23            }
24            _ => Err(syn::Error::new(
25                input.span(),
26                "Invalid variant for the token constraint.",
27            )),
28        }
29    }
30}