use super::*;
use async_graphql_value::Name;
#[derive(Debug, Clone)]
pub struct ServiceDocument {
pub definitions: Vec<TypeSystemDefinition>,
}
#[derive(Debug, Clone)]
pub enum TypeSystemDefinition {
Schema(Positioned<SchemaDefinition>),
Type(Positioned<TypeDefinition>),
Directive(Positioned<DirectiveDefinition>),
}
#[derive(Debug, Clone)]
pub struct SchemaDefinition {
pub extend: bool,
pub directives: Vec<Positioned<ConstDirective>>,
pub query: Option<Positioned<Name>>,
pub mutation: Option<Positioned<Name>>,
pub subscription: Option<Positioned<Name>>,
}
#[derive(Debug, Clone)]
pub struct TypeDefinition {
pub extend: bool,
pub description: Option<Positioned<String>>,
pub name: Positioned<Name>,
pub directives: Vec<Positioned<ConstDirective>>,
pub kind: TypeKind,
}
#[derive(Debug, Clone)]
pub enum TypeKind {
Scalar,
Object(ObjectType),
Interface(InterfaceType),
Union(UnionType),
Enum(EnumType),
InputObject(InputObjectType),
}
#[derive(Debug, Clone)]
pub struct ObjectType {
pub implements: Vec<Positioned<Name>>,
pub fields: Vec<Positioned<FieldDefinition>>,
}
#[derive(Debug, Clone)]
pub struct FieldDefinition {
pub description: Option<Positioned<String>>,
pub name: Positioned<Name>,
pub arguments: Vec<Positioned<InputValueDefinition>>,
pub ty: Positioned<Type>,
pub directives: Vec<Positioned<ConstDirective>>,
}
#[derive(Debug, Clone)]
pub struct InterfaceType {
pub implements: Vec<Positioned<Name>>,
pub fields: Vec<Positioned<FieldDefinition>>,
}
#[derive(Debug, Clone)]
pub struct UnionType {
pub members: Vec<Positioned<Name>>,
}
#[derive(Debug, Clone)]
pub struct EnumType {
pub values: Vec<Positioned<EnumValueDefinition>>,
}
#[derive(Debug, Clone)]
pub struct EnumValueDefinition {
pub description: Option<Positioned<String>>,
pub value: Positioned<Name>,
pub directives: Vec<Positioned<ConstDirective>>,
}
#[derive(Debug, Clone)]
pub struct InputObjectType {
pub fields: Vec<Positioned<InputValueDefinition>>,
}
#[derive(Debug, Clone)]
pub struct InputValueDefinition {
pub description: Option<Positioned<String>>,
pub name: Positioned<Name>,
pub ty: Positioned<Type>,
pub default_value: Option<Positioned<ConstValue>>,
pub directives: Vec<Positioned<ConstDirective>>,
}
#[derive(Debug, Clone)]
pub struct DirectiveDefinition {
pub description: Option<Positioned<String>>,
pub name: Positioned<Name>,
pub arguments: Vec<Positioned<InputValueDefinition>>,
pub locations: Vec<Positioned<DirectiveLocation>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DirectiveLocation {
Query,
Mutation,
Subscription,
Field,
FragmentDefinition,
FragmentSpread,
InlineFragment,
Schema,
Scalar,
Object,
FieldDefinition,
ArgumentDefinition,
Interface,
Union,
Enum,
EnumValue,
InputObject,
InputFieldDefinition,
}