//! 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) -> FormatContent 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) -> FormatContentPositioned 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) -> FormatConfig { FormatConfig(f) } }