teo_parser/ast/
data_set.rs

1use std::cell::RefCell;
2use crate::value::value::Value;
3
4use crate::ast::identifier::Identifier;
5use crate::ast::identifier_path::IdentifierPath;
6use crate::ast::literals::DictionaryLiteral;
7use crate::{declare_container_node, impl_container_node_defaults, node_child_fn, node_children_iter, node_children_iter_fn, node_optional_child_fn};
8use crate::ast::doc_comment::DocComment;
9use crate::format::Writer;
10use crate::r#type::reference::Reference;
11use crate::traits::has_availability::HasAvailability;
12use crate::traits::info_provider::InfoProvider;
13use crate::traits::resolved::Resolve;
14use crate::traits::write::Write;
15
16declare_container_node!(DataSet, named, availability,
17    pub(crate) identifier: usize,
18    pub auto_seed: bool,
19    pub notrack: bool,
20    pub(crate) groups: Vec<usize>,
21    pub(crate) comment: Option<usize>,
22);
23
24impl_container_node_defaults!(DataSet, named, availability);
25
26node_children_iter!(DataSet, DataSetGroup, GroupsIter, groups);
27
28impl DataSet {
29
30    node_optional_child_fn!(comment, DocComment);
31
32    node_child_fn!(identifier, Identifier);
33
34    node_children_iter_fn!(groups, GroupsIter);
35}
36
37impl InfoProvider for DataSet {
38    fn namespace_skip(&self) -> usize {
39        1
40    }
41}
42
43declare_container_node!(DataSetGroup, named, availability,
44    pub(crate) identifier_path: usize,
45    pub(crate) records: Vec<usize>,
46    pub(crate) resolved: RefCell<Option<Reference>>,
47    pub(crate) comment: Option<usize>,
48);
49
50impl_container_node_defaults!(DataSetGroup, named, availability);
51
52node_children_iter!(DataSetGroup, DataSetRecord, RecordsIter, records);
53
54impl DataSetGroup {
55
56    node_optional_child_fn!(comment, DocComment);
57
58    node_child_fn!(identifier_path, IdentifierPath);
59
60    node_children_iter_fn!(records, RecordsIter);
61}
62
63impl InfoProvider for DataSetGroup {
64    fn namespace_skip(&self) -> usize {
65        2
66    }
67}
68
69impl Resolve<Reference> for DataSetGroup {
70    fn resolved_ref_cell(&self) -> &RefCell<Option<Reference>> {
71        &self.resolved
72    }
73}
74
75declare_container_node!(DataSetRecord, named, availability,
76    pub(crate) identifier: usize,
77    pub(crate) dictionary: usize,
78    pub(crate) resolved: RefCell<Option<Value>>,
79    pub(crate) comment: Option<usize>,
80);
81
82impl_container_node_defaults!(DataSetRecord, named, availability);
83
84impl DataSetRecord {
85
86    node_optional_child_fn!(comment, DocComment);
87
88    node_child_fn!(identifier, Identifier);
89
90    node_child_fn!(dictionary, DictionaryLiteral);
91}
92
93impl InfoProvider for DataSetRecord {
94    fn namespace_skip(&self) -> usize {
95        3
96    }
97}
98
99impl Resolve<Value> for DataSetRecord {
100    fn resolved_ref_cell(&self) -> &RefCell<Option<Value>> {
101        &self.resolved
102    }
103}
104
105impl Write for DataSet {
106    fn write<'a>(&'a self, writer: &mut Writer<'a>) {
107        writer.write_children(self, self.children.values());
108    }
109
110    fn is_block_level_element(&self) -> bool {
111        true
112    }
113}
114
115impl Write for DataSetGroup {
116    fn write<'a>(&'a self, writer: &mut Writer<'a>) {
117        writer.write_children(self, self.children.values());
118    }
119
120    fn is_block_level_element(&self) -> bool {
121        true
122    }
123}
124
125impl Write for DataSetRecord {
126    fn write<'a>(&'a self, writer: &mut Writer<'a>) {
127        writer.write_children(self, self.children.values());
128    }
129
130    fn is_block_level_element(&self) -> bool {
131        true
132    }
133}