generated from PlexSheep/baserepo
idk why this isn't in master yet #94
|
@ -1,11 +1,105 @@
|
|||
//! # tools that make printing stuff better
|
||||
use comfy_table::presets;
|
||||
use comfy_table::{CellAlignment, ContentArrangement, Table};
|
||||
use console::{style, Color};
|
||||
|
||||
/// Quickly get a one line visual divider
|
||||
pub fn divider() -> String {
|
||||
format!("{:=^80}", "=")
|
||||
/// Prints content with a simple border around it.
|
||||
///
|
||||
/// This function is a convenience wrapper around [blockfmt] and [println]. It automatically
|
||||
/// formats the content with a border using the specified color and then prints it to the console.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// use libpt_cli::console::Color;
|
||||
/// use libpt_cli::printing::blockprint;
|
||||
/// # fn main() {
|
||||
/// blockprint("Hello world!".to_string(), Color::Blue);
|
||||
/// # }
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn blockprint(content: impl ToString, color: Color) {
|
||||
println!("{}", blockfmt(content, color))
|
||||
}
|
||||
|
||||
/// Quickly print a one line visual divider
|
||||
pub fn print_divider() {
|
||||
println!("{:=^80}", "=")
|
||||
/// Formats content with a simple border around it.
|
||||
///
|
||||
/// This function is a convenience wrapper around [blockfmt_advanced] with preset values for
|
||||
/// border style, content arrangement, and cell alignment. It automatically formats the content
|
||||
/// with a border as large as possible and centers the content. The resulting cell is colored in
|
||||
/// the specified color.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// use libpt_cli::console::Color;
|
||||
/// use libpt_cli::printing::blockfmt;
|
||||
/// # fn main() {
|
||||
/// let formatted_content = blockfmt("Hello world!".to_string(), Color::Blue);
|
||||
/// println!("{}", formatted_content);
|
||||
/// # }
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn blockfmt(content: impl ToString, color: Color) -> String {
|
||||
blockfmt_advanced(
|
||||
content,
|
||||
color,
|
||||
presets::UTF8_BORDERS_ONLY,
|
||||
ContentArrangement::DynamicFullWidth,
|
||||
CellAlignment::Center
|
||||
)
|
||||
}
|
||||
|
||||
/// Formats content with a border around it.
|
||||
///
|
||||
/// Unless you are looking for something specific, use [blockfmt] or [blockprint].
|
||||
///
|
||||
/// The border can be created using box-drawing characters, and the content is formatted
|
||||
/// within the border. The function allows customization of the border's color, preset,
|
||||
/// content arrangement, and cell alignment.
|
||||
///
|
||||
/// # Example
|
||||
/// ```
|
||||
/// use libpt_cli::comfy_table::{presets, CellAlignment, ContentArrangement};
|
||||
/// use libpt_cli::console::Color;
|
||||
/// use libpt_cli::printing::blockfmt_advanced;
|
||||
/// # fn main() {
|
||||
/// println!(
|
||||
/// "{}",
|
||||
/// blockfmt_advanced(
|
||||
/// "Hello world!".to_string(),
|
||||
/// Color::Blue,
|
||||
/// presets::UTF8_FULL,
|
||||
/// ContentArrangement::DynamicFullWidth,
|
||||
/// CellAlignment::Center
|
||||
/// )
|
||||
/// );
|
||||
/// # }
|
||||
/// ```
|
||||
/// ```text
|
||||
/// ┌────────────────────────────────────────────────────────────────────────────────────────┐
|
||||
/// │ Hello world! │
|
||||
/// └────────────────────────────────────────────────────────────────────────────────────────┘
|
||||
/// ```
|
||||
///
|
||||
/// # Parameters
|
||||
///
|
||||
///
|
||||
pub fn blockfmt_advanced(
|
||||
content: impl ToString,
|
||||
color: Color,
|
||||
preset: &str,
|
||||
arrangement: ContentArrangement,
|
||||
alignment: CellAlignment
|
||||
) -> String {
|
||||
let mut table = Table::new();
|
||||
table
|
||||
.load_preset(preset)
|
||||
.set_content_arrangement(arrangement)
|
||||
.add_row(vec![content.to_string()]);
|
||||
table
|
||||
.column_mut(0)
|
||||
.unwrap()
|
||||
.set_cell_alignment(alignment);
|
||||
|
||||
format!("{}", style(table).fg(color))
|
||||
}
|
||||
|
|
Reference in New Issue