libgraphql_parser/ast/
fragment_spread.rs1use crate::ast::ast_node::append_span_source_slice;
2use crate::ast::AstNode;
3use crate::ast::DirectiveAnnotation;
4use crate::ast::Name;
5use crate::ByteSpan;
6use crate::SourceMap;
7use crate::SourceSpan;
8use crate::token::GraphQLToken;
9use inherent::inherent;
10
11#[derive(Clone, Debug, PartialEq)]
17pub struct FragmentSpread<'src> {
18 pub directives: Vec<DirectiveAnnotation<'src>>,
19 pub name: Name<'src>,
20 pub span: ByteSpan,
21 pub syntax: Option<Box<FragmentSpreadSyntax<'src>>>,
22}
23
24#[derive(Clone, Debug, PartialEq)]
26pub struct FragmentSpreadSyntax<'src> {
27 pub ellipsis: GraphQLToken<'src>,
28}
29
30impl<'src> FragmentSpread<'src> {
31 #[inline]
36 pub fn name_value(&self) -> &str {
37 self.name.value.as_ref()
38 }
39}
40
41#[inherent]
42impl AstNode for FragmentSpread<'_> {
43 pub fn append_source(
45 &self,
46 sink: &mut String,
47 source: Option<&str>,
48 ) {
49 if let Some(src) = source {
50 append_span_source_slice(
51 self.span, sink, src,
52 );
53 }
54 }
55
56 #[inline]
63 pub fn byte_span(&self) -> ByteSpan {
64 self.span
65 }
66
67 #[inline]
74 pub fn source_span(
75 &self,
76 source_map: &SourceMap,
77 ) -> Option<SourceSpan> {
78 self.byte_span().resolve(source_map)
79 }
80}