blob: e4e819b6cff7665158e09b088fd508136b168a1e [file] [log] [blame]
//! This module contains primitives to create a spread row.
//! Ultimately it is a cell with a span set to a number of columns on the [`Table`].
//!
//! You can use a [`Span`] to set a custom span.
//!
//! # Example
//!
//! ```
//! use tabled::{Table, settings::Panel};
//!
//! let data = [[1, 2, 3], [4, 5, 6]];
//!
//! let table = Table::new(data)
//! .with(Panel::vertical(1, "S\np\nl\ni\nt"))
//! .with(Panel::header("Numbers"))
//! .to_string();
//!
//! println!("{}", table);
//!
//! assert_eq!(
//! table,
//! concat!(
//! "+---+---+---+---+\n",
//! "| Numbers |\n",
//! "+---+---+---+---+\n",
//! "| 0 | S | 1 | 2 |\n",
//! "+---+ p +---+---+\n",
//! "| 1 | l | 2 | 3 |\n",
//! "+---+ i +---+---+\n",
//! "| 4 | t | 5 | 6 |\n",
//! "+---+---+---+---+",
//! )
//! )
//! ```
//!
//! [`Table`]: crate::Table
//! [`Span`]: crate::settings::span::Span
mod footer;
mod header;
mod horizontal_panel;
mod vertical_panel;
pub use footer::Footer;
pub use header::Header;
pub use horizontal_panel::HorizontalPanel;
pub use vertical_panel::VerticalPanel;
/// Panel allows to add a Row which has 1 continues Cell to a [`Table`].
///
/// See `examples/panel.rs`.
///
/// [`Table`]: crate::Table
#[derive(Debug)]
pub struct Panel;
impl Panel {
/// Creates an empty vertical row at given index.
///
/// ```
/// use tabled::{settings::Panel, Table};
///
/// let data = [[1, 2, 3], [4, 5, 6]];
///
/// let table = Table::new(data)
/// .with(Panel::vertical(1, "Tabled Releases"))
/// .to_string();
///
/// println!("{}", table);
///
/// assert_eq!(
/// table,
/// concat!(
/// "+---+-----------------+---+---+\n",
/// "| 0 | Tabled Releases | 1 | 2 |\n",
/// "+---+ +---+---+\n",
/// "| 1 | | 2 | 3 |\n",
/// "+---+ +---+---+\n",
/// "| 4 | | 5 | 6 |\n",
/// "+---+-----------------+---+---+",
/// )
/// )
/// ```
pub fn vertical<S: AsRef<str>>(column: usize, text: S) -> VerticalPanel<S> {
VerticalPanel::new(column, text)
}
/// Creates an empty horizontal row at given index.
///
/// ```
/// use tabled::{Table, settings::Panel};
///
/// let data = [[1, 2, 3], [4, 5, 6]];
///
/// let table = Table::new(data)
/// .with(Panel::vertical(1, ""))
/// .to_string();
///
/// println!("{}", table);
///
/// assert_eq!(
/// table,
/// concat!(
/// "+---+--+---+---+\n",
/// "| 0 | | 1 | 2 |\n",
/// "+---+ +---+---+\n",
/// "| 1 | | 2 | 3 |\n",
/// "+---+ +---+---+\n",
/// "| 4 | | 5 | 6 |\n",
/// "+---+--+---+---+",
/// )
/// )
/// ```
pub fn horizontal<S: AsRef<str>>(row: usize, text: S) -> HorizontalPanel<S> {
HorizontalPanel::new(row, text)
}
/// Creates an horizontal row at first row.
pub fn header<S: AsRef<str>>(text: S) -> Header<S> {
Header::new(text)
}
/// Creates an horizontal row at last row.
pub fn footer<S: AsRef<str>>(text: S) -> Footer<S> {
Footer::new(text)
}
}