1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::executable::{AbstractOperationDefinition, FragmentDefinition};

#[derive(Debug)]
pub enum ExecutableDefinition<O: AbstractOperationDefinition, F: FragmentDefinition> {
    Operation(O),
    Fragment(F),
}

pub trait AbstractExecutableDefinition:
    Into<ExecutableDefinition<Self::OperationDefinition, Self::FragmentDefinition>>
{
    type OperationDefinition: AbstractOperationDefinition;
    type FragmentDefinition: FragmentDefinition;
}

impl<O: AbstractOperationDefinition, F: FragmentDefinition> AbstractExecutableDefinition
    for ExecutableDefinition<O, F>
{
    type OperationDefinition = O;
    type FragmentDefinition = F;
}