bluejay_parser/ast/executable/
executable_definition.rs1use crate::ast::executable::{FragmentDefinition, OperationDefinition};
2use crate::ast::{DepthLimiter, FromTokens, IsMatch, ParseError, Tokens};
3
4#[derive(Debug)]
5pub enum ExecutableDefinition<'a> {
6 Operation(OperationDefinition<'a>),
7 Fragment(FragmentDefinition<'a>),
8}
9
10impl<'a> FromTokens<'a> for ExecutableDefinition<'a> {
11 #[inline]
12 fn from_tokens(
13 tokens: &mut impl Tokens<'a>,
14 depth_limiter: DepthLimiter,
15 ) -> Result<Self, ParseError> {
16 if OperationDefinition::is_match(tokens) {
18 OperationDefinition::from_tokens(tokens, depth_limiter).map(Self::Operation)
19 } else if FragmentDefinition::is_match(tokens) {
20 FragmentDefinition::from_tokens(tokens, depth_limiter).map(Self::Fragment)
21 } else {
22 Err(tokens.unexpected_token())
23 }
24 }
25}
26
27impl<'a> IsMatch<'a> for ExecutableDefinition<'a> {
28 #[inline]
29 fn is_match(tokens: &mut impl Tokens<'a>) -> bool {
30 OperationDefinition::is_match(tokens) || FragmentDefinition::is_match(tokens)
31 }
32}