teo_parser/ast/
data_set.rs1use 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}