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}