Skip to main content

feather_tui/components/
header.rs

1use crate::error::{FtuiError, FtuiResult};
2use unicode_segmentation::UnicodeSegmentation;
3
4/// A UI component that serves as the header of a `Container`. It is displayed 
5/// at the top of the `Container`.
6///
7/// # Usage
8/// provide a title or context for the container.
9///
10/// # Derives
11/// `Debug`, `Clone`, `PartialEq`, `Eq`
12#[derive(Debug, Clone, PartialEq, Eq)]
13pub struct Header {
14    label: String,
15    len: usize,
16}
17
18impl Header {
19    /// Creates a new `Header` with the specified label.
20    ///
21    /// # Parameters
22    /// - `label`: A `&str` representing the text displayed in the header.
23    ///
24    /// # Returns
25    /// `Ok(Header)`: A new `Header` instance.
26    /// `Err(FtuiError)`: Returns an error.
27    ///
28    /// # Example
29    /// ```rust
30    /// // Create a Header with the label "Welcome".
31    /// let _ = Header::new("Welcome")?;
32    /// ```
33    pub fn new(label: &str) -> FtuiResult<Self> {
34        if label.is_empty() {
35            return Err(FtuiError::HeaderLabelEmpty);
36        }
37
38        Ok(Header { 
39            label: label.to_string(), 
40            len: label.graphemes(true).count(),
41        })
42    }
43
44    pub(crate) fn len(&self) -> usize {
45        return self.len;
46    }
47
48    pub(crate) fn label(&self) -> &String {
49        return &self.label;
50    }
51}