ssd/
ast.rs

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}