Skip to main content

typhoon_syn/constraints/
assert.rs

1use {
2    crate::utils::ContextExpr,
3    syn::{parse::Parse, Expr, Token},
4};
5
6#[derive(Clone)]
7pub struct ConstraintAssert {
8    pub assert: ContextExpr,
9    pub error: Option<Expr>,
10}
11
12impl Parse for ConstraintAssert {
13    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
14        input.parse::<Token![=]>()?;
15        let assert: ContextExpr = input.parse()?;
16        let error = if input.peek(Token![@]) {
17            input.parse::<Token![@]>()?;
18            Some(input.parse()?)
19        } else {
20            None
21        };
22
23        Ok(ConstraintAssert { assert, error })
24    }
25}