bluejay_parser/ast/executable/
executable_definition.rs1use crate::ast::executable::{FragmentDefinition, OperationDefinition};
2use crate::ast::{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(tokens: &mut impl Tokens<'a>) -> Result<Self, ParseError> {
13 if OperationDefinition::is_match(tokens) {
14 OperationDefinition::from_tokens(tokens).map(Self::Operation)
15 } else if FragmentDefinition::is_match(tokens) {
16 FragmentDefinition::from_tokens(tokens).map(Self::Fragment)
17 } else {
18 Err(tokens.unexpected_token())
19 }
20 }
21}
22
23impl<'a> IsMatch<'a> for ExecutableDefinition<'a> {
24 #[inline]
25 fn is_match(tokens: &mut impl Tokens<'a>) -> bool {
26 OperationDefinition::is_match(tokens) || FragmentDefinition::is_match(tokens)
27 }
28}