cynic_parser/executable/generated/
variable.rs

1use super::prelude::*;
2use super::{
3    directive::Directive,
4    ids::{ConstValueId, DirectiveId, TypeId, VariableDefinitionId},
5    types::Type,
6    value::ConstValue,
7    ExecutableId,
8};
9#[allow(unused_imports)]
10use std::fmt::{self, Write};
11
12pub struct VariableDefinitionRecord {
13    pub name: StringId,
14    pub name_span: Span,
15    pub ty: TypeId,
16    pub default_value: Option<ConstValueId>,
17    pub directives: IdRange<DirectiveId>,
18}
19
20#[derive(Clone, Copy)]
21pub struct VariableDefinition<'a>(pub(in super::super) ReadContext<'a, VariableDefinitionId>);
22
23impl<'a> VariableDefinition<'a> {
24    pub fn name(&self) -> &'a str {
25        let document = &self.0.document;
26        document.lookup(document.lookup(self.0.id).name)
27    }
28    pub fn name_span(&self) -> Span {
29        let document = self.0.document;
30        document.lookup(self.0.id).name_span
31    }
32    pub fn ty(&self) -> Type<'a> {
33        let document = self.0.document;
34        document.read(document.lookup(self.0.id).ty)
35    }
36    pub fn default_value(&self) -> Option<ConstValue<'a>> {
37        let document = self.0.document;
38        document
39            .lookup(self.0.id)
40            .default_value
41            .map(|id| document.read(id))
42    }
43    pub fn directives(&self) -> Iter<'a, Directive<'a>> {
44        let document = self.0.document;
45        super::Iter::new(document.lookup(self.0.id).directives, document)
46    }
47}
48
49impl VariableDefinition<'_> {
50    pub fn id(&self) -> VariableDefinitionId {
51        self.0.id
52    }
53}
54
55impl fmt::Debug for VariableDefinition<'_> {
56    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
57        f.debug_struct("VariableDefinition")
58            .field("name", &self.name())
59            .field("ty", &self.ty())
60            .field("default_value", &self.default_value())
61            .field("directives", &self.directives())
62            .finish()
63    }
64}
65
66impl ExecutableId for VariableDefinitionId {
67    type Reader<'a> = VariableDefinition<'a>;
68    fn read(self, document: &ExecutableDocument) -> Self::Reader<'_> {
69        VariableDefinition(ReadContext { id: self, document })
70    }
71}
72
73impl IdReader for VariableDefinition<'_> {
74    type Id = VariableDefinitionId;
75    type Reader<'a> = VariableDefinition<'a>;
76    fn new(id: Self::Id, document: &'_ ExecutableDocument) -> Self::Reader<'_> {
77        document.read(id)
78    }
79}