use comfy_table::{ContentLineStyle, LineStyle, TableStyle};
pub const DEFAULT_PRESET: &str = "││──╞═╪╡┆ ┬┴┌┐└┘";
const COMPONENTS: usize = 19;
pub fn style_from_preset(preset: &str) -> TableStyle {
let mut chars = [None; COMPONENTS];
for (slot, char) in chars.iter_mut().zip(preset.chars()) {
*slot = (char != ' ').then_some(char);
}
TableStyle::new()
.top_border(LineStyle {
left: chars[15],
fill: chars[2],
junction: chars[13],
right: chars[16],
})
.header_lines(ContentLineStyle {
left: chars[0],
junction: chars[8],
right: chars[1],
})
.header_separator(LineStyle {
left: chars[4],
fill: chars[5],
junction: chars[6],
right: chars[7],
})
.content_lines(ContentLineStyle {
left: chars[0],
junction: chars[8],
right: chars[1],
})
.row_separator(LineStyle {
left: chars[11],
fill: chars[9],
junction: chars[10],
right: chars[12],
})
.bottom_border(LineStyle {
left: chars[17],
fill: chars[3],
junction: chars[14],
right: chars[18],
})
}
#[cfg(test)]
mod tests {
use comfy_table::presets;
use super::{DEFAULT_PRESET, style_from_preset};
#[test]
fn utf8_full_matches_upstream() {
let preset = "││──╞═╪╡┆╌┼├┤┬┴┌┐└┘";
assert_eq!(style_from_preset(preset), presets::UTF8_FULL);
}
#[test]
fn ascii_full_matches_upstream() {
let preset = "||--+==+|-+||++++++";
assert_eq!(style_from_preset(preset), presets::ASCII_FULL);
}
#[test]
fn ascii_markdown_matches_upstream() {
let preset = "|| |-||| ";
assert_eq!(style_from_preset(preset), presets::ASCII_MARKDOWN);
}
#[test]
fn utf8_no_borders_matches_upstream() {
let preset = " ═╪ ┆╌┼ ";
assert_eq!(style_from_preset(preset), presets::UTF8_NO_BORDERS);
}
#[test]
fn default_preset_is_utf8_full_condensed() {
assert_eq!(
style_from_preset(DEFAULT_PRESET),
presets::UTF8_FULL_CONDENSED
);
}
#[test]
fn all_spaces_draws_nothing() {
assert_eq!(style_from_preset(&" ".repeat(19)), presets::NOTHING);
}
#[test]
fn missing_components_draw_nothing() {
assert_eq!(
style_from_preset("││──"),
style_from_preset("││── ")
);
}
#[test]
fn extra_characters_are_ignored() {
assert_eq!(
style_from_preset("││──╞═╪╡┆╌┼├┤┬┴┌┐└┘XYZ"),
presets::UTF8_FULL
);
}
}