bluejay-parser 0.4.0

A GraphQL parser
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use crate::ast::{DepthLimiter, FromTokens, ParseError, Tokens, TryFromTokens};

pub trait IsMatch<'a> {
    fn is_match(tokens: &mut impl Tokens<'a>) -> bool;
}

impl<'a, T: FromTokens<'a> + IsMatch<'a>> TryFromTokens<'a> for T {
    fn try_from_tokens(
        tokens: &mut impl Tokens<'a>,
        depth_limiter: DepthLimiter,
    ) -> Result<Option<Self>, ParseError> {
        if Self::is_match(tokens) {
            Ok(Some(Self::from_tokens(tokens, depth_limiter)?))
        } else {
            Ok(None)
        }
    }
}