#[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
pub struct CellDimension {
pub width: usize,
pub height: usize,
}
#[derive(Debug, Default, Clone, Eq, PartialEq)]
pub struct RowDimension {
pub widths: Vec<usize>,
pub height: usize,
}
#[derive(Debug, Clone, Eq, PartialEq, Default)]
pub struct TableDimension {
pub widths: Vec<usize>,
pub heights: Vec<usize>,
}
impl From<RowDimension> for Vec<CellDimension> {
fn from(row_dimension: RowDimension) -> Self {
let height = row_dimension.height;
row_dimension
.widths
.into_iter()
.map(|width| CellDimension { width, height })
.collect()
}
}
impl From<TableDimension> for Vec<RowDimension> {
fn from(table_dimension: TableDimension) -> Self {
let heights = table_dimension.heights;
let widths = table_dimension.widths;
heights
.into_iter()
.map(|height| RowDimension {
widths: widths.clone(),
height,
})
.collect()
}
}
pub trait RequiredDimension {
type Dimension;
fn required_dimension(&self) -> Option<&Self::Dimension>;
fn set_required_dimension(&mut self);
}
pub trait AvailableDimension: RequiredDimension {
fn available_dimension(&self) -> Option<&<Self as RequiredDimension>::Dimension>;
fn set_available_dimension(
&mut self,
available_dimension: <Self as RequiredDimension>::Dimension,
);
}