pub const EMPTY: &str = "";
pub const I_BRANCH: &str = "│ ";
pub const PADDING_SPACES: &str = " ";
pub const T_BRANCH: &str = "├─ ";
pub const L_BRANCH: &str = "└─ ";
#[derive(Debug)]
pub struct TextTreeSymbols<'a> {
pub root: &'a str,
pub first: &'a str,
pub middle: &'a str,
pub last: &'a str,
}
impl<'a> Default for TextTreeSymbols<'a> {
fn default() -> Self {
TextTreeSymbols {
root: EMPTY,
first: EMPTY,
middle: EMPTY,
last: EMPTY,
}
}
}
#[derive(Debug)]
pub struct TextTreeElements<'a> {
pub prefix: TextTreeSymbols<'a>,
pub branch: TextTreeSymbols<'a>,
}
impl<'a> Default for TextTreeElements<'a> {
fn default() -> Self {
TextTreeElements {
prefix: TextTreeSymbols {
root: EMPTY,
first: EMPTY, middle: I_BRANCH,
last: PADDING_SPACES,
},
branch: TextTreeSymbols {
root: EMPTY,
first: EMPTY, middle: T_BRANCH,
last: L_BRANCH,
},
}
}
}
impl<'a> TextTreeElements<'a> {
pub fn new(prefix: [&'a str; 4], branch: [&'a str; 4]) -> Self {
TextTreeElements {
prefix: TextTreeSymbols {
root: prefix[0],
first: prefix[1],
middle: prefix[2],
last: prefix[3],
},
branch: TextTreeSymbols {
root: branch[0],
first: branch[1],
middle: branch[2],
last: branch[3],
},
}
}
pub fn get_prefix(&self, level: usize, index: usize, size: usize) -> &'a str {
if level == 0 {
self.prefix.root } else if index == size - 1 {
self.prefix.last } else {
self.prefix.middle }
}
pub fn get_branch(&self, level: usize, index: usize, size: usize) -> &'a str {
if level == 0 {
self.branch.root } else if index == size - 1 {
self.branch.last } else {
self.branch.middle }
}
pub fn get_prefix_branch(&self, level: usize, index: usize, size: usize) -> (&'a str, &'a str) {
let prefix = self.get_prefix(level, index, size);
let branch = self.get_branch(level, index, size);
(prefix, branch)
}
}