libgraphql_parser/ast/
operation_definition.rs1use crate::ast::ast_node::append_span_source_slice;
2use crate::ast::AstNode;
3use crate::ast::DelimiterPair;
4use crate::ast::DirectiveAnnotation;
5use crate::ast::Name;
6use crate::ast::OperationKind;
7use crate::ast::SelectionSet;
8use crate::ast::StringValue;
9use crate::ast::VariableDefinition;
10use crate::ByteSpan;
11use crate::SourceMap;
12use crate::SourceSpan;
13use crate::token::GraphQLToken;
14use inherent::inherent;
15
16#[derive(Clone, Debug, PartialEq)]
23pub struct OperationDefinition<'src> {
24 pub description: Option<StringValue<'src>>,
25 pub directives: Vec<DirectiveAnnotation<'src>>,
26 pub name: Option<Name<'src>>,
27 pub operation_kind: OperationKind,
28 pub selection_set: SelectionSet<'src>,
29 pub shorthand: bool,
32 pub span: ByteSpan,
33 pub syntax:
34 Option<Box<OperationDefinitionSyntax<'src>>>,
35 pub variable_definitions:
36 Vec<VariableDefinition<'src>>,
37}
38
39#[derive(Clone, Debug, PartialEq)]
41pub struct OperationDefinitionSyntax<'src> {
42 pub operation_keyword: Option<GraphQLToken<'src>>,
45 pub variable_definition_parens:
46 Option<DelimiterPair<'src>>,
47}
48
49impl<'src> OperationDefinition<'src> {
50 #[inline]
55 pub fn name_value(&self) -> Option<&str> {
56 self.name.as_ref().map(|n| n.value.as_ref())
57 }
58}
59
60#[inherent]
61impl AstNode for OperationDefinition<'_> {
62 pub fn append_source(
64 &self,
65 sink: &mut String,
66 source: Option<&str>,
67 ) {
68 if let Some(src) = source {
69 append_span_source_slice(
70 self.span, sink, src,
71 );
72 }
73 }
74
75 #[inline]
82 pub fn byte_span(&self) -> ByteSpan {
83 self.span
84 }
85
86 #[inline]
93 pub fn source_span(
94 &self,
95 source_map: &SourceMap,
96 ) -> Option<SourceSpan> {
97 self.byte_span().resolve(source_map)
98 }
99}