Skip to main content

photon_ui/components/
spacer.rs

1use crate::{
2    Component,
3    RenderError,
4    Rendered,
5};
6
7/// A component that renders empty lines for layout spacing.
8pub struct Spacer {
9    lines: usize,
10}
11
12impl Spacer {
13    /// Create a spacer that renders `lines` empty rows.
14    pub fn new(lines: usize) -> Self {
15        Self { lines }
16    }
17}
18
19impl Component for Spacer {
20    fn render(&self, _width: u16) -> Result<Rendered, RenderError> {
21        Ok(Rendered {
22            lines: vec!["".to_string(); self.lines],
23            cursor: None,
24            images: Vec::new(),
25        })
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    use super::*;
32
33    #[test]
34    fn spacer_renders_requested_lines() {
35        let spacer = Spacer::new(3);
36        let rendered = spacer.render(80).unwrap();
37        assert_eq!(rendered.lines.len(), 3);
38        assert!(rendered.lines.iter().all(|line| line.is_empty()));
39    }
40
41    #[test]
42    fn spacer_zero_lines() {
43        let spacer = Spacer::new(0);
44        let rendered = spacer.render(80).unwrap();
45        assert!(rendered.lines.is_empty());
46    }
47}