use super::*;
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Direction {
Row,
Column,
}
#[derive(Debug, Clone)]
pub(crate) struct BeginContainerArgs {
pub direction: Direction,
pub gap: u32,
pub align: Align,
pub align_self: Option<Align>,
pub justify: Justify,
pub border: Option<Border>,
pub border_sides: BorderSides,
pub border_style: Style,
pub bg_color: Option<Color>,
pub padding: Padding,
pub margin: Margin,
pub constraints: Constraints,
pub title: Option<(String, Style)>,
pub grow: u16,
pub group_name: Option<std::sync::Arc<str>>,
}
#[derive(Debug, Clone)]
pub(crate) struct BeginScrollableArgs {
pub grow: u16,
pub border: Option<Border>,
pub border_sides: BorderSides,
pub border_style: Style,
pub bg_color: Option<Color>,
pub align: Align,
pub align_self: Option<Align>,
pub justify: Justify,
pub gap: u32,
pub padding: Padding,
pub margin: Margin,
pub constraints: Constraints,
pub title: Option<(String, Style)>,
pub scroll_offset: u32,
pub group_name: Option<std::sync::Arc<str>>,
}
#[derive(Debug, Clone)]
pub(crate) enum Command {
Text {
content: String,
cursor_offset: Option<usize>,
style: Style,
grow: u16,
align: Align,
wrap: bool,
truncate: bool,
margin: Margin,
constraints: Constraints,
},
BeginContainer(Box<BeginContainerArgs>),
BeginScrollable(Box<BeginScrollableArgs>),
Link {
text: String,
url: String,
style: Style,
margin: Margin,
constraints: Constraints,
},
RichText {
segments: Vec<(String, Style)>,
wrap: bool,
align: Align,
margin: Margin,
constraints: Constraints,
},
EndContainer,
BeginOverlay {
modal: bool,
},
EndOverlay,
Spacer {
grow: u16,
},
FocusMarker(usize),
InteractionMarker(usize),
RawDraw {
draw_id: usize,
constraints: Constraints,
grow: u16,
margin: Margin,
},
}
#[cfg(test)]
mod size_tests {
use super::Command;
#[test]
fn command_enum_size_is_bounded() {
const MAX_BYTES: usize = 128;
let actual = std::mem::size_of::<Command>();
assert!(
actual <= MAX_BYTES,
"Command enum grew to {actual} bytes (limit {MAX_BYTES}); \
consider boxing the new fat variant"
);
}
}