1use core::range::Range;
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6pub struct D2Root {
7 pub elements: Vec<D2Element>,
8 #[serde(with = "oak_core::serde_range")]
9 pub span: Range<usize>,
10}
11
12#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
13pub enum D2Element {
14 Shape(Shape),
15 Connection(Connection),
16}
17
18#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
19pub struct Shape {
20 pub id: String,
21 pub label: Option<String>,
22}
23
24#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
25pub struct Connection {
26 pub from: String,
27 pub to: String,
28 #[serde(with = "oak_core::serde_range")]
29 pub span: Range<usize>,
30}