rustql_common/ast/
schema.rs

1use serde_derive::{Deserialize, Serialize};
2use crate::ast::common::*;
3use crate::position::Span;
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6pub struct SchmaTypeDefination<'a> {
7    pub description: Option<StringValue<'a>>,
8    pub directives: Option<Vec<Directive<'a>>>,
9    pub query: Vec<NameVarType<'a>>,
10    pub mutation: Vec<NameVarType<'a>>,
11    pub subscription: Vec<NameVarType<'a>>,
12    pub span: Span,
13}
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15pub struct SchemaTypeExtension<'a> {
16    pub directives: Option<Vec<Directive<'a>>>,
17    pub query: Vec<NameVarType<'a>>,
18    pub mutation: Vec<NameVarType<'a>>,
19    pub subscription: Vec<NameVarType<'a>>,
20    pub span: Span,
21}
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23pub struct DirectiveDefinition<'a> {
24    pub description: Option<StringValue<'a>>,
25    pub name: Name<'a>,
26    pub argument_definations: Option<Vec<InputValueDefinition<'a>>>,
27    pub directive_locations: Vec<DirectiveLocation>,
28    pub is_repeatable: bool,
29    pub span: Span,
30}
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
32pub enum DirectiveLocation {
33    // executable
34    Query,
35    Mutation,
36    Subscription,
37    Field,
38    FragmentDefinition,
39    FragmentSpread,
40    InlineFragment,
41    VariableDefination,
42    // type_system
43    Schema,
44    Scalar,
45    Object,
46    FieldDefinition,
47    ArgumentDefinition,
48    Interface,
49    Union,
50    Enum,
51    EnumValue,
52    InputObject,
53    InputFieldDefinition,
54}
55#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
56pub struct InputValueDefinition<'a> {
57    pub description: Option<StringValue<'a>>,
58    pub name: Name<'a>,
59    pub var_type: VarType<'a>,
60    pub default_value: Option<Value<'a>>,
61    pub directives: Option<Vec<Directive<'a>>>,
62    pub span: Span,
63}
64#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
65pub struct ScalarTypeDefinition<'a> {
66    pub description: Option<StringValue<'a>>,
67    pub name: Name<'a>,
68    pub directives: Option<Vec<Directive<'a>>>,
69    pub span: Span,
70}
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
72pub struct ScalarTypeExtension<'a> {
73    pub name: Name<'a>,
74    pub directives: Option<Vec<Directive<'a>>>,
75    pub span: Span,
76}
77#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
78pub struct ObjectTypeDefinition<'a> {
79    pub description: Option<StringValue<'a>>,
80    pub name: Name<'a>,
81    pub implement_interfaces: Option<Vec<NameVarType<'a>>>,
82    pub field_definations: Option<Vec<FieldDefination<'a>>>,
83    pub directives: Option<Vec<Directive<'a>>>,
84    pub span: Span,
85}
86#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
87pub struct ObjectTypeExtension<'a> {
88    pub name: Name<'a>,
89    pub implement_interfaces: Option<Vec<NameVarType<'a>>>,
90    pub field_definations: Option<Vec<FieldDefination<'a>>>,
91    pub directives: Option<Vec<Directive<'a>>>,
92    pub span: Span,
93}
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
95pub struct FieldDefination<'a> {
96    pub description: Option<StringValue<'a>>,
97    pub name: Name<'a>,
98    pub argument_definations: Option<Vec<InputValueDefinition<'a>>>,
99    pub directives: Option<Vec<Directive<'a>>>,
100    pub var_type: VarType<'a>,
101    pub span: Span,
102}
103#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
104pub struct InterfaceTypeDefinition<'a> {
105    pub description: Option<StringValue<'a>>,
106    pub implement_interfaces: Option<Vec<NameVarType<'a>>>,
107    pub name: Name<'a>,
108    pub directives: Option<Vec<Directive<'a>>>,
109    pub field_definations: Option<Vec<FieldDefination<'a>>>,
110    pub span: Span,
111}
112#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
113pub struct InterfaceTypeExtension<'a> {
114    pub name: Name<'a>,
115    pub implement_interfaces: Option<Vec<NameVarType<'a>>>,
116    pub directives: Option<Vec<Directive<'a>>>,
117    pub field_definations: Option<Vec<FieldDefination<'a>>>,
118    pub span: Span,
119}
120#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
121pub struct UnionTypeDefinition<'a> {
122    pub description: Option<StringValue<'a>>,
123    pub name: Name<'a>,
124    pub directives: Option<Vec<Directive<'a>>>,
125    pub union_member_types: Option<Vec<NameVarType<'a>>>,
126    pub span: Span,
127}
128#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
129pub struct UnionTypeExtension<'a> {
130    pub name: Name<'a>,
131    pub directives: Option<Vec<Directive<'a>>>,
132    pub union_member_types: Option<Vec<NameVarType<'a>>>,
133    pub span: Span,
134}
135#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
136pub struct EnumTypeDefinition<'a> {
137    pub description: Option<StringValue<'a>>,
138    pub name: Name<'a>,
139    pub directives: Option<Vec<Directive<'a>>>,
140    pub value_definations: Option<Vec<EnumValueDefinition<'a>>>,
141    pub span: Span,
142}
143#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
144pub struct EnumTypeExtension<'a> {
145    pub name: Name<'a>,
146    pub directives: Option<Vec<Directive<'a>>>,
147    pub value_definations: Option<Vec<EnumValueDefinition<'a>>>,
148    pub span: Span,
149}
150#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
151pub struct EnumValueDefinition<'a> {
152    pub description: Option<StringValue<'a>>,
153    pub value: EnumValue<'a>,
154    pub directives: Option<Vec<Directive<'a>>>,
155    pub span: Span,
156}
157#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
158pub struct InputObjectTypeDefinition<'a> {
159    pub description: Option<StringValue<'a>>,
160    pub name: Name<'a>,
161    pub directives: Option<Vec<Directive<'a>>>,
162    pub input_definations: Option<Vec<InputValueDefinition<'a>>>,
163    pub span: Span,
164}
165#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
166pub struct InputObjectTypeExtension<'a> {
167    pub name: Name<'a>,
168    pub directives: Option<Vec<Directive<'a>>>,
169    pub input_definations: Option<Vec<InputValueDefinition<'a>>>,
170    pub span: Span,
171}