1use serde::Serialize;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
5pub struct Span {
6 pub start: usize,
7 pub end: usize,
8}
9
10#[derive(Debug, Clone, PartialEq, Serialize)]
12pub struct Item {
13 #[serde(flatten)]
14 pub node: Node,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub size: Option<Size>,
17 pub span: Span,
18}
19
20#[derive(Debug, Clone, PartialEq, Serialize)]
22#[serde(tag = "type", rename_all = "snake_case")]
23pub enum Node {
24 Panel { name: String },
25 HSplit { children: Vec<Item> },
26 VSplit { children: Vec<Item> },
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize)]
31pub struct Size {
32 pub value: f64,
33 pub unit: Unit,
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
38pub enum Unit {
39 #[serde(rename = "fr")]
40 Fr,
41 #[serde(rename = "col")]
42 Col,
43 #[serde(rename = "row")]
44 Row,
45 #[serde(rename = "px")]
46 Px,
47 #[serde(rename = "%")]
48 Percent,
49}