#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct LanguageVersion {
pub major: u32,
pub minor: u32,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Diagram {
pub language_version: LanguageVersion,
pub title: String,
pub theme_id: String,
pub children: Vec<ElementId>,
pub nodes: Vec<Node>,
pub groups: Vec<Group>,
pub edges: Vec<Edge>,
pub layout: Option<Layout>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ElementId {
Node(String),
Group(String),
}
impl ElementId {
pub fn as_str(&self) -> &str {
match self {
Self::Node(identifier) | Self::Group(identifier) => identifier,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Node {
pub id: String,
pub label: String,
pub kind: NodeKind,
pub icon_id: Option<String>,
pub detail: Option<String>,
pub parent_group_id: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NodeKind {
Actor,
Client,
Service,
Function,
Worker,
Database,
Cache,
Queue,
Storage,
External,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Group {
pub id: String,
pub label: String,
pub parent_group_id: Option<String>,
pub children: Vec<ElementId>,
pub layout: Option<Layout>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Edge {
pub from: String,
pub to: String,
pub direction: EdgeDirection,
pub kind: EdgeKind,
pub label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EdgeDirection {
Forward,
Bidirectional,
Association,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EdgeKind {
Flow,
Request,
Event,
Data,
Dependency,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Layout {
pub direction: Option<Direction>,
pub same_ranks: Vec<Vec<String>>,
pub order: Option<Vec<String>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Direction {
Right,
Down,
}