libgraphql_parser/ast/
field_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::InputValueDefinition;
6use crate::ast::Name;
7use crate::ast::StringValue;
8use crate::ast::TypeAnnotation;
9use crate::ByteSpan;
10use crate::SourceMap;
11use crate::SourceSpan;
12use crate::token::GraphQLToken;
13use inherent::inherent;
14
15#[derive(Clone, Debug, PartialEq)]
22pub struct FieldDefinition<'src> {
23 pub parameters: Vec<InputValueDefinition<'src>>,
24 pub description: Option<StringValue<'src>>,
25 pub directives: Vec<DirectiveAnnotation<'src>>,
26 pub field_type: TypeAnnotation<'src>,
27 pub name: Name<'src>,
28 pub span: ByteSpan,
29 pub syntax: Option<Box<FieldDefinitionSyntax<'src>>>,
30}
31
32#[derive(Clone, Debug, PartialEq)]
34pub struct FieldDefinitionSyntax<'src> {
35 pub argument_parens: Option<DelimiterPair<'src>>,
36 pub colon: GraphQLToken<'src>,
37}
38
39impl<'src> FieldDefinition<'src> {
40 #[inline]
45 pub fn name_value(&self) -> &str {
46 self.name.value.as_ref()
47 }
48}
49
50#[inherent]
51impl AstNode for FieldDefinition<'_> {
52 pub fn append_source(
54 &self,
55 sink: &mut String,
56 source: Option<&str>,
57 ) {
58 if let Some(src) = source {
59 append_span_source_slice(
60 self.span, sink, src,
61 );
62 }
63 }
64
65 #[inline]
72 pub fn byte_span(&self) -> ByteSpan {
73 self.span
74 }
75
76 #[inline]
83 pub fn source_span(
84 &self,
85 source_map: &SourceMap,
86 ) -> Option<SourceSpan> {
87 self.byte_span().resolve(source_map)
88 }
89}