#![allow(dead_code)]
#[cfg(feature = "liquid")]
use liquid::{ObjectView, ValueView};
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
pub type OrderedMap<T> = BTreeMap<String, T>;
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SsdFile {
pub namespace: Namespace,
pub imports: Vec<Import>,
pub data_types: OrderedMap<DataType>,
pub enums: OrderedMap<Enum>,
pub services: OrderedMap<Service>,
}
const INDENT: &str = " ";
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Import {
pub path: Namespace,
pub attributes: Vec<Attribute>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Dependency {
pub name: Namespace,
pub attributes: Vec<Attribute>,
pub comments: Vec<String>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Parameter {
pub name: String,
pub value: Option<String>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Attribute {
pub name: Namespace,
pub parameters: Vec<Parameter>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct DataType {
pub properties: OrderedMap<TypeName>,
pub attributes: Vec<Attribute>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Enum {
pub values: OrderedMap<EnumValue>,
pub attributes: Vec<Attribute>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Service {
pub dependencies: Vec<Dependency>,
pub functions: OrderedMap<Function>,
pub events: OrderedMap<Event>,
pub attributes: Vec<Attribute>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Function {
pub arguments: OrderedMap<TypeName>,
pub return_type: Option<Namespace>,
pub attributes: Vec<Attribute>,
pub comments: Vec<String>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Event {
pub arguments: OrderedMap<TypeName>,
pub attributes: Vec<Attribute>,
pub comments: Vec<String>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct TypeName {
pub typ: Namespace,
pub attributes: Vec<Attribute>,
pub comments: Vec<String>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct EnumValue {
pub value: Option<i64>,
pub attributes: Vec<Attribute>,
pub comments: Vec<String>,
}
#[cfg_attr(feature = "liquid", derive(ObjectView, ValueView))]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Namespace {
pub components: Vec<String>,
}
impl IntoIterator for Namespace {
type Item = String;
type IntoIter = std::vec::IntoIter<Self::Item>;
fn into_iter(self) -> Self::IntoIter {
self.components.into_iter()
}
}