blob: e8221ae32878fbabf00059157fbe323de6b0bd58 [file] [log] [blame]
//! This module contains a list of primitives to help to modify a [`Table`].
//!
//! [`Table`]: crate::Table
mod format_config;
mod format_content;
mod format_positioned;
pub use format_config::FormatConfig;
pub use format_content::FormatContent;
pub use format_positioned::FormatContentPositioned;
/// A formatting function of particular cells on a [`Table`].
///
/// [`Table`]: crate::Table
#[derive(Debug)]
pub struct Format;
impl Format {
/// This function creates a new [`Format`] instance, so
/// it can be used as a grid setting.
///
/// # Example
///
/// ```
/// use tabled::{Table, settings::{Format, object::Rows, Modify}};
///
/// let data = vec![
/// (0, "Grodno", true),
/// (1, "Minsk", true),
/// (2, "Hamburg", false),
/// (3, "Brest", true),
/// ];
///
/// let table = Table::new(&data)
/// .with(Modify::new(Rows::new(1..)).with(Format::content(|s| format!(": {} :", s))))
/// .to_string();
///
/// assert_eq!(
/// table,
/// "+-------+-------------+-----------+\n\
/// | i32 | &str | bool |\n\
/// +-------+-------------+-----------+\n\
/// | : 0 : | : Grodno : | : true : |\n\
/// +-------+-------------+-----------+\n\
/// | : 1 : | : Minsk : | : true : |\n\
/// +-------+-------------+-----------+\n\
/// | : 2 : | : Hamburg : | : false : |\n\
/// +-------+-------------+-----------+\n\
/// | : 3 : | : Brest : | : true : |\n\
/// +-------+-------------+-----------+"
/// );
/// ```
pub fn content<F>(f: F) -> FormatContent<F>
where
F: FnMut(&str) -> String,
{
FormatContent::new(f)
}
/// This function creates a new [`FormatContentPositioned`], so
/// it can be used as a grid setting.
///
/// It's different from [`Format::content`] as it also provides a row and column index.
///
/// # Example
///
/// ```
/// use tabled::{Table, settings::{Format, object::Rows, Modify}};
///
/// let data = vec![
/// (0, "Grodno", true),
/// (1, "Minsk", true),
/// (2, "Hamburg", false),
/// (3, "Brest", true),
/// ];
///
/// let table = Table::new(&data)
/// .with(Modify::new(Rows::single(0)).with(Format::positioned(|_, (_, col)| col.to_string())))
/// .to_string();
///
/// assert_eq!(
/// table,
/// "+---+---------+-------+\n\
/// | 0 | 1 | 2 |\n\
/// +---+---------+-------+\n\
/// | 0 | Grodno | true |\n\
/// +---+---------+-------+\n\
/// | 1 | Minsk | true |\n\
/// +---+---------+-------+\n\
/// | 2 | Hamburg | false |\n\
/// +---+---------+-------+\n\
/// | 3 | Brest | true |\n\
/// +---+---------+-------+"
/// );
/// ```
pub fn positioned<F>(f: F) -> FormatContentPositioned<F>
where
F: FnMut(&str, (usize, usize)) -> String,
{
FormatContentPositioned::new(f)
}
/// This function creates [`FormatConfig`] function to modify a table config.
///
/// # Example
///
/// ```
/// use tabled::{
/// Table,
/// settings::{Format, object::Rows, Modify},
/// grid::config::ColoredConfig,
/// };
///
/// let data = vec![
/// (0, "Grodno", true),
/// (1, "Minsk", true),
/// (2, "Hamburg", false),
/// (3, "Brest", true),
/// ];
///
/// let table = Table::new(&data)
/// .with(Format::config(|cfg: &mut ColoredConfig| cfg.set_justification((0,1).into(), '.')))
/// .to_string();
///
/// assert_eq!(
/// table,
/// "+-----+---------+-------+\n\
/// | i32 | &str... | bool |\n\
/// +-----+---------+-------+\n\
/// | 0 | Grodno | true |\n\
/// +-----+---------+-------+\n\
/// | 1 | Minsk | true |\n\
/// +-----+---------+-------+\n\
/// | 2 | Hamburg | false |\n\
/// +-----+---------+-------+\n\
/// | 3 | Brest | true |\n\
/// +-----+---------+-------+"
/// );
/// ```
pub fn config<F>(f: F) -> FormatConfig<F> {
FormatConfig(f)
}
}