pub struct Resizer {
pub table_width: i32,
pub table_height: i32,
pub headers: Vec<String>,
pub all_rows: Vec<Vec<String>>,
pub row_heights: Vec<usize>,
pub columns: Vec<ResizerColumn>,
pub wrap: bool,
pub border_column: bool,
pub y_paddings: Vec<Vec<usize>>,
}
Expand description
A comprehensive table resizing engine that calculates optimal layouts.
The Resizer
analyzes table content, applies constraints, and computes
the best possible layout for tables within specified dimensions. It handles
content analysis, width distribution, padding calculations, and height
management to create well-formatted tables.
Fields§
§table_width: i32
Target width for the entire table in characters.
table_height: i32
Target height for the table (used for height constraints).
headers: Vec<String>
Column headers as strings (empty if no headers).
all_rows: Vec<Vec<String>>
All table rows including headers, organized as vectors of cell content.
row_heights: Vec<usize>
Calculated height for each row in the table.
columns: Vec<ResizerColumn>
Column analysis data with width statistics and content.
wrap: bool
Whether text wrapping is enabled for content that exceeds column width.
border_column: bool
Whether column separators/borders are enabled between columns.
y_paddings: Vec<Vec<usize>>
Vertical padding requirements for each cell, organized by row.
Implementations§
Source§impl Resizer
impl Resizer
Sourcepub fn new(
table_width: i32,
table_height: i32,
headers: Vec<String>,
rows: Vec<Vec<String>>,
) -> Self
pub fn new( table_width: i32, table_height: i32, headers: Vec<String>, rows: Vec<Vec<String>>, ) -> Self
Creates a new table resizer with the specified dimensions and content.
This constructor initializes a complete resizing system that analyzes the provided table content to determine optimal column widths and row heights. It processes both headers and data rows, calculating statistical information (min, max, median) for each column to enable intelligent resizing decisions.
The resizer automatically:
- Combines headers and data rows into a unified structure
- Creates
ResizerColumn
instances for each column in the content - Calculates width statistics (min, max, median) for each column
- Prepares the foundation for width optimization algorithms
§Arguments
table_width
- Target width for the entire table in characterstable_height
- Target height for the table (used for future height constraints)headers
- Column headers as strings (can be empty if no headers)rows
- Data rows, where each row is a vector of cell content strings
§Returns
Returns a new Resizer
instance ready for width optimization, with:
- All content processed and stored in
all_rows
- Column analysis completed with width statistics
- Default settings for wrapping and borders enabled
§Examples
use lipgloss_table::resizing::Resizer;
let headers = vec!["Name".to_string(), "Age".to_string()];
let rows = vec![
vec!["Alice".to_string(), "30".to_string()],
vec!["Bob".to_string(), "25".to_string()],
];
let resizer = Resizer::new(80, 24, headers, rows);
assert_eq!(resizer.table_width, 80);
assert_eq!(resizer.columns.len(), 2);
assert_eq!(resizer.all_rows.len(), 3); // headers + 2 data rows
§Notes
- If
headers
is empty, only data rows will be processed - The number of columns is determined by the row with the most cells
- Column width calculations use Unicode-aware width detection
- The resizer defaults to enabling text wrapping and column borders
Sourcepub fn default_row_heights(&self) -> Vec<usize>
pub fn default_row_heights(&self) -> Vec<usize>
Returns the default row heights (all 1).
Sourcepub fn detect_table_width(&self) -> i32
pub fn detect_table_width(&self) -> i32
Detects the table width automatically based on content.
Sourcepub fn max_column_widths(&self) -> Vec<usize>
pub fn max_column_widths(&self) -> Vec<usize>
Returns the maximum column widths.
Sourcepub fn total_horizontal_border(&self) -> usize
pub fn total_horizontal_border(&self) -> usize
Calculates total horizontal border width.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Resizer
impl RefUnwindSafe for Resizer
impl Send for Resizer
impl Sync for Resizer
impl Unpin for Resizer
impl UnwindSafe for Resizer
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more