Skip to main content

typhoon_syn/constraints/
mint.rs

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