use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ExtendedTextLayout {
pub line_count: u32,
pub ellipsize: bool,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SpanData {
#[serde(default)]
pub node_name: String,
#[serde(default)]
pub span: u32,
#[serde(default)]
pub max_span: bool,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
#[derive(Default)]
pub enum LayoutType {
#[default]
None,
FixedColumns,
FixedRows,
AutoColumns,
AutoRows,
Horizontal,
Vertical,
}
impl LayoutType {
pub(crate) fn is_grid(&self) -> bool {
match self {
LayoutType::FixedColumns
| LayoutType::FixedRows
| LayoutType::AutoColumns
| LayoutType::AutoRows => true,
_ => false,
}
}
pub(crate) fn is_row_or_column(&self) -> bool {
match self {
LayoutType::Horizontal | LayoutType::Vertical => true,
_ => false,
}
}
}
#[derive(Deserialize, Serialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
#[derive(Default)]
pub enum Alignment {
#[default]
Start,
Center,
End,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct CommonLayoutData {
#[serde(default)]
pub margin_left: f32,
#[serde(default)]
pub margin_right: f32,
#[serde(default)]
pub margin_top: f32,
#[serde(default)]
pub margin_bottom: f32,
#[serde(default)]
pub scrolling: bool,
}
impl Default for CommonLayoutData {
fn default() -> CommonLayoutData {
CommonLayoutData {
margin_left: 0.0,
margin_right: 0.0,
margin_top: 0.0,
margin_bottom: 0.0,
scrolling: false,
}
}
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
#[derive(Default)]
pub enum SizePolicy {
Hug,
#[default]
Fixed,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AutoLayoutData {
#[serde(default)]
pub item_spacing: f32,
#[serde(default)]
pub horizontal_alignment: Alignment,
#[serde(default)]
pub vertical_alignment: Alignment,
#[serde(default)]
pub space_between: bool,
#[serde(default)]
pub size_policy: SizePolicy,
}
impl Default for AutoLayoutData {
fn default() -> AutoLayoutData {
AutoLayoutData {
item_spacing: 0.0,
horizontal_alignment: Alignment::Start,
vertical_alignment: Alignment::Start,
space_between: false,
size_policy: SizePolicy::Fixed,
}
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct GridLayoutData {
#[serde(default)]
pub columns_rows: u32,
#[serde(default)]
pub adaptive_min_size: u32,
#[serde(default)]
pub auto_spacing: bool,
#[serde(default)]
pub auto_spacing_item_size: i32,
#[serde(default)]
pub vertical_spacing: i32,
#[serde(default)]
pub horizontal_spacing: i32,
#[serde(default)]
pub span_content: Vec<SpanData>,
}
impl Default for GridLayoutData {
fn default() -> GridLayoutData {
GridLayoutData {
columns_rows: 2,
adaptive_min_size: 100,
auto_spacing: false,
auto_spacing_item_size: 1,
vertical_spacing: 0,
horizontal_spacing: 0,
span_content: vec![],
}
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
#[derive(Default)]
pub struct LimitContentData {
#[serde(default)]
pub max_num_items: u32,
#[serde(default)]
pub overflow_node_name: String,
#[serde(default)]
pub overflow_node_id: String,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ExtendedAutoLayout {
#[serde(default)]
pub wrap: bool,
#[serde(default)]
pub paged_scrolling: bool,
#[serde(default)]
pub layout: LayoutType,
#[serde(default)]
pub common_data: CommonLayoutData,
#[serde(default)]
pub grid_layout_data: GridLayoutData,
#[serde(default)]
pub auto_layout_data: AutoLayoutData,
#[serde(default)]
pub limit_content: bool,
#[serde(default)]
pub limit_content_data: LimitContentData,
}