1use crate::parser::raw_service_to_service;
2
3use serde::{Deserialize, Serialize};
4
5pub use ssd_data::*;
6
7#[derive(Serialize, Deserialize, Debug, Clone)]
8#[allow(clippy::module_name_repetitions)]
9pub enum AstElement {
10 Comment(String),
11 Import(Import),
12 DataType((String, DataType)),
13 Enum((String, Enum)),
14 Service((String, Vec<ServiceAstElement>, Vec<Attribute>)),
15}
16
17#[derive(Serialize, Deserialize, Debug, Clone)]
18pub enum ServiceAstElement {
19 Comment(String),
20 Dependency(Dependency),
21 Function((String, Function)),
22 Event((String, Event)),
23}
24
25#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
26pub enum ComparableAstElement {
27 Comment(String),
28 Import(Import),
29 DataType((String, DataType)),
30 Enum((String, Enum)),
31 Service((String, Service)),
32}
33
34impl From<&AstElement> for ComparableAstElement {
35 fn from(value: &AstElement) -> Self {
36 match value {
37 AstElement::Comment(c) => ComparableAstElement::Comment(c.clone()),
38 AstElement::Import(i) => ComparableAstElement::Import(i.clone()),
39 AstElement::DataType(dt) => ComparableAstElement::DataType(dt.clone()),
40 AstElement::Enum(en) => ComparableAstElement::Enum(en.clone()),
41 AstElement::Service((name, svc, attributes)) => ComparableAstElement::Service((
42 name.clone(),
43 raw_service_to_service(svc, attributes),
44 )),
45 }
46 }
47}