typhoon-context-macro 0.1.0-alpha.6

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

#[derive(Clone)]
pub struct ConstraintHasOne {
    pub join_target: Ident,
    pub error: Option<Expr>,
}

impl Parse for ConstraintHasOne {
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        input.parse::<Token![=]>()?;
        let join_target = input.parse()?;
        let error = if input.peek(Token![@]) {
            input.parse::<Token![@]>()?;
            Some(input.parse()?)
        } else {
            None
        };

        Ok(ConstraintHasOne { join_target, error })
    }
}