1pub trait ModelicaClass {
8 fn extract_class_instances(raw_data: &str) -> Vec<impl ModelicaClass>;
9}
10
11#[derive(Debug)]
13pub struct ModelicaPackage {
14 pub name: String,
15}
16
17pub struct ModelicaType {
19 pub name: String,
20}
21
22pub struct ModelicaModel {
27 pub name: String,
28 pub content: String,
29 pub connectors: Vec<ModelicaConnector>,
30}
31
32impl ModelicaModel {
33 pub fn new(name: String, content: String) -> Self {
34 ModelicaModel {
35 name,
36 content,
37 connectors: Vec::new(),
38 }
39 }
40}
41
42#[derive(Debug)]
47pub struct ModelicaBlock {
48 pub name: String,
49 pub content: String,
50 pub connectors: Vec<ModelicaConnector>,
51}
52
53impl ModelicaBlock {
54 pub fn new(name: String, content: String) -> Self {
55 ModelicaBlock {
56 name,
57 content,
58 connectors: Vec::new(),
59 }
60 }
61}
62
63#[derive(Debug)]
69pub struct ModelicaConnector {
70 pub name: String,
71 pub r#type: String,
72}
73
74pub struct ModelicaComment {
79 pub value: String,
80}
81
82pub enum ModelicaAccessControl {
83 Public,
84 Protected,
85}
86
87#[allow(dead_code)]
89pub enum ModelicaKeyword {
90 Algorithm,
91 And,
92 Annotation,
93 Block,
94 Break,
95 Class,
96 Connect,
97 Connector,
98 Constant,
99 ConstrainedBy,
100 Der,
101 Discrete,
102 Each,
103 Else,
104 ElseIf,
105 ElseWhen,
106 Encapsulated,
107 End,
108 Enumeration,
109 Equation,
110 Expandable,
111 Extends,
112 External,
113 False,
114 Final,
115 Flow,
116 For,
117 Function,
118 If,
119 Import,
120 Impure,
121 In,
122 Initial,
123 Inner,
124 Input,
125 Loop,
126 Model,
127 Not,
128 Operator,
129 Or,
130 Outer,
131 Output,
132 Package,
133 Parameter,
134 Partial,
135 Protected,
136 Public,
137 Pure,
138 Record,
139 Redeclare,
140 Replaceable,
141 Return,
142 Stream,
143 Time,
144 Then,
145 True,
146 Type,
147 When,
148 While,
149 Within,
150}
151
152#[allow(dead_code)]
154pub enum ModelicaPrefix {
155 Flow,
156 Stream,
157 Discrete,
158 Parameter,
159 Constant,
160 Input,
161 Output,
162}
163
164#[allow(dead_code)]
165fn get_keyword_str(keyword: ModelicaKeyword) -> &'static str {
166 match keyword {
167 ModelicaKeyword::Algorithm => "algorithm",
168 ModelicaKeyword::And => "and",
169 ModelicaKeyword::Annotation => "annotation",
170 ModelicaKeyword::Block => "block",
171 ModelicaKeyword::Break => "break",
172 ModelicaKeyword::Class => "class",
173 ModelicaKeyword::Connect => "connect",
174 ModelicaKeyword::Connector => "connector",
175 ModelicaKeyword::Constant => "constant",
176 ModelicaKeyword::ConstrainedBy => "constrainedby",
177 ModelicaKeyword::Der => "der",
178 ModelicaKeyword::Discrete => "discrete",
179 ModelicaKeyword::Each => "each",
180 ModelicaKeyword::Else => "else",
181 ModelicaKeyword::ElseIf => "elseif",
182 ModelicaKeyword::ElseWhen => "elsewhen",
183 ModelicaKeyword::Encapsulated => "encapsulated",
184 ModelicaKeyword::End => "end",
185 ModelicaKeyword::Enumeration => "enumeration",
186 ModelicaKeyword::Equation => "equation",
187 ModelicaKeyword::Expandable => "expandable",
188 ModelicaKeyword::Extends => "extends",
189 ModelicaKeyword::External => "external",
190 ModelicaKeyword::False => "false",
191 ModelicaKeyword::Final => "final",
192 ModelicaKeyword::Flow => "flow",
193 ModelicaKeyword::For => "for",
194 ModelicaKeyword::Function => "function",
195 ModelicaKeyword::If => "if",
196 ModelicaKeyword::Import => "import",
197 ModelicaKeyword::Impure => "impure",
198 ModelicaKeyword::In => "in",
199 ModelicaKeyword::Initial => "initial",
200 ModelicaKeyword::Inner => "inner",
201 ModelicaKeyword::Input => "input",
202 ModelicaKeyword::Loop => "loop",
203 ModelicaKeyword::Model => "model",
204 ModelicaKeyword::Not => "not",
205 ModelicaKeyword::Operator => "operator",
206 ModelicaKeyword::Or => "or",
207 ModelicaKeyword::Outer => "outer",
208 ModelicaKeyword::Output => "output",
209 ModelicaKeyword::Package => "package",
210 ModelicaKeyword::Parameter => "parameter",
211 ModelicaKeyword::Partial => "partial",
212 ModelicaKeyword::Protected => "protected",
213 ModelicaKeyword::Public => "public",
214 ModelicaKeyword::Pure => "pure",
215 ModelicaKeyword::Record => "record",
216 ModelicaKeyword::Redeclare => "redeclare",
217 ModelicaKeyword::Replaceable => "replaceable",
218 ModelicaKeyword::Return => "return",
219 ModelicaKeyword::Stream => "stream",
220 ModelicaKeyword::Time => "time",
221 ModelicaKeyword::Then => "then",
222 ModelicaKeyword::True => "true",
223 ModelicaKeyword::Type => "type",
224 ModelicaKeyword::When => "when",
225 ModelicaKeyword::While => "while",
226 ModelicaKeyword::Within => "within",
227 }
228}
229
230#[allow(dead_code)]
231fn get_keyword(keyword: &str) -> Option<ModelicaKeyword> {
232 match keyword {
233 "algorithm" => Some(ModelicaKeyword::Algorithm),
234 "and" => Some(ModelicaKeyword::And),
235 "annotation" => Some(ModelicaKeyword::Annotation),
236 "block" => Some(ModelicaKeyword::Block),
237 "break" => Some(ModelicaKeyword::Break),
238 "class" => Some(ModelicaKeyword::Class),
239 "connect" => Some(ModelicaKeyword::Connect),
240 "connector" => Some(ModelicaKeyword::Connector),
241 "constant" => Some(ModelicaKeyword::Constant),
242 "constrainedby" => Some(ModelicaKeyword::ConstrainedBy),
243 "der" => Some(ModelicaKeyword::Der),
244 "discrete" => Some(ModelicaKeyword::Discrete),
245 "each" => Some(ModelicaKeyword::Each),
246 "else" => Some(ModelicaKeyword::Else),
247 "elseif" => Some(ModelicaKeyword::ElseIf),
248 "elsewhen" => Some(ModelicaKeyword::ElseWhen),
249 "encapsulated" => Some(ModelicaKeyword::Encapsulated),
250 "end" => Some(ModelicaKeyword::End),
251 "enumeration" => Some(ModelicaKeyword::Enumeration),
252 "equation" => Some(ModelicaKeyword::Equation),
253 "expandable" => Some(ModelicaKeyword::Expandable),
254 "extends" => Some(ModelicaKeyword::Extends),
255 "external" => Some(ModelicaKeyword::External),
256 "false" => Some(ModelicaKeyword::False),
257 "final" => Some(ModelicaKeyword::Final),
258 "flow" => Some(ModelicaKeyword::Flow),
259 "for" => Some(ModelicaKeyword::For),
260 "function" => Some(ModelicaKeyword::Function),
261 "if" => Some(ModelicaKeyword::If),
262 "import" => Some(ModelicaKeyword::Import),
263 "impure" => Some(ModelicaKeyword::Impure),
264 "in" => Some(ModelicaKeyword::In),
265 "initial" => Some(ModelicaKeyword::Initial),
266 "inner" => Some(ModelicaKeyword::Inner),
267 "input" => Some(ModelicaKeyword::Input),
268 "loop" => Some(ModelicaKeyword::Loop),
269 "model" => Some(ModelicaKeyword::Model),
270 "not" => Some(ModelicaKeyword::Not),
271 "operator" => Some(ModelicaKeyword::Operator),
272 "or" => Some(ModelicaKeyword::Or),
273 "outer" => Some(ModelicaKeyword::Outer),
274 "output" => Some(ModelicaKeyword::Output),
275 "package" => Some(ModelicaKeyword::Package),
276 "parameter" => Some(ModelicaKeyword::Parameter),
277 "partial" => Some(ModelicaKeyword::Partial),
278 "protected" => Some(ModelicaKeyword::Protected),
279 "public" => Some(ModelicaKeyword::Public),
280 "pure" => Some(ModelicaKeyword::Pure),
281 "record" => Some(ModelicaKeyword::Record),
282 "redeclare" => Some(ModelicaKeyword::Redeclare),
283 "replaceable" => Some(ModelicaKeyword::Replaceable),
284 "return" => Some(ModelicaKeyword::Return),
285 "stream" => Some(ModelicaKeyword::Stream),
286 "time" => Some(ModelicaKeyword::Time),
287 "then" => Some(ModelicaKeyword::Then),
288 "true" => Some(ModelicaKeyword::True),
289 "type" => Some(ModelicaKeyword::Type),
290 "when" => Some(ModelicaKeyword::When),
291 "while" => Some(ModelicaKeyword::While),
292 "within" => Some(ModelicaKeyword::Within),
293 _ => None,
294 }
295}
296
297#[rustfmt::skip]
299pub enum ModelicaOperator {
300 PostfixArrayIndex, PostfixAccess, PostfixFunctionCall, ArrayConstruction, HorizontalConcatenation, VerticalConcatenation, Exponentiation, Multiplicative, Divisive, ElementwiseMultiplicative, ElementwiseDivisive, Additive, Subtractive, AdditiveUnary, SubtractiveUnary, ArrayElementwiseAdditive, ArrayElementwiseSubtractive, RelationatLessThan, RelationatLessThanOrEqual, RelationatGreaterThan, RelationatGreaterThanOrEqual, RelationatEqual, RelationatNotEqual, UnaryNegation, LogicalAnd, LogicalOr, ArrayRange, Conditional, NamedArgument, AbsoluteValue, Sign, SquareRoot, IntegerConvert, EnumTypeName, StringConvert, EventDivision, EventModulus, EventRemainder, EventCeiling, EventFloor, EventInteger, Sine, Cosine, Tangent, InverseSine, InverseCosine, InverseTangent, PrincipalValueInverseTangent, HyperbolicSine, HyperbolicCosine, HyperbolicTangent, ExponentialBaseE, NaturalBaseE, LogBase10, Derivative, TimeDelay, Occurrences, HomotopyInitialization, SignDependentSlope, InStream, ActualStream, VariableSpeedTransport, InstanceName, InitialPredicate, TerminalPredicate, NoEvent, Smooth, Pre, Edge, Change, ReInit, }