pub use crate::border_style::BorderStyle;
macro_rules! pie_symbols {
($($name:ident: $char:expr, $desc:expr),+ $(,)?) => {
$(
#[doc = concat!("Alternative pie chart character - ", $desc)]
pub const $name: char = $char;
)+
};
}
macro_rules! legend_symbols {
($($name:ident: $str:expr, $desc:expr),+ $(,)?) => {
$(
#[doc = concat!("Alternative legend marker - ", $desc)]
pub const $name: &str = $str;
)+
};
}
pub const PIE_CHAR: char = 'โ';
pie_symbols! {
PIE_CHAR_BLOCK: 'โ', "filled block",
PIE_CHAR_SHADE: 'โ', "medium shade",
PIE_CHAR_LIGHT: 'โ', "light shade",
PIE_CHAR_DARK: 'โ', "dark shade",
PIE_CHAR_CIRCLE: 'โ', "circle",
PIE_CHAR_SQUARE: 'โ ', "square",
PIE_CHAR_DIAMOND: 'โ', "diamond",
PIE_CHAR_SMALL_CIRCLE: 'โข', "small circle",
PIE_CHAR_WHITE_CIRCLE: 'โ', "white circle",
PIE_CHAR_DOUBLE_CIRCLE: 'โ', "double circle",
PIE_CHAR_SMALL_SQUARE: 'โช', "small square",
PIE_CHAR_WHITE_SQUARE: 'โก', "white square",
PIE_CHAR_SMALL_DIAMOND: 'โ', "small diamond",
PIE_CHAR_WHITE_DIAMOND: 'โ', "white diamond",
PIE_CHAR_STAR: 'โ
', "star",
PIE_CHAR_WHITE_STAR: 'โ', "white star",
PIE_CHAR_TRIANGLE_UP: 'โฒ', "triangle up",
PIE_CHAR_TRIANGLE_DOWN: 'โผ', "triangle down",
PIE_CHAR_TRIANGLE_RIGHT: 'โถ', "triangle right",
PIE_CHAR_TRIANGLE_LEFT: 'โ', "triangle left",
PIE_CHAR_PLUS: 'โ', "plus",
PIE_CHAR_CROSS: 'โ', "cross",
PIE_CHAR_HEART: 'โฅ', "heart",
PIE_CHAR_WHITE_HEART: 'โก', "white heart",
PIE_CHAR_SPADE: 'โ ', "spade",
PIE_CHAR_CLUB: 'โฃ', "club",
PIE_CHAR_DOT: 'ยท', "dot",
PIE_CHAR_HEXAGON: 'โฌข', "hexagon",
PIE_CHAR_BULLSEYE: 'โ', "bullseye",
PIE_CHAR_SQUARE_BOX: 'โฃ', "square box",
PIE_CHAR_ASTERISM: 'โป', "asterism",
PIE_CHAR_HORIZONTAL_BAR: 'โฐ', "horizontal bar",
}
pub const LEGEND_MARKER: &str = "โ ";
legend_symbols! {
LEGEND_MARKER_CIRCLE: "โ", "circle - classic filled circle",
LEGEND_MARKER_SQUARE: "โช", "square - compact filled square",
LEGEND_MARKER_DIAMOND: "โ", "diamond - filled diamond shape",
LEGEND_MARKER_TRIANGLE: "โฒ", "triangle - upward-pointing triangle",
LEGEND_MARKER_HEXAGON: "โฌก", "hexagon - outlined hexagon",
LEGEND_MARKER_WHITE_CIRCLE: "โ", "white circle - outlined circle",
LEGEND_MARKER_SQUARE_BOX: "โข", "square box - outlined square",
LEGEND_MARKER_ARROW: "โถ", "arrow - right-pointing arrow",
LEGEND_MARKER_RIGHT_ARROW: "โ", "right arrow - simple arrow",
LEGEND_MARKER_DOUBLE_RIGHT: "ยป", "double right - double chevron",
LEGEND_MARKER_STAR: "โ
", "star - filled star",
LEGEND_MARKER_WHITE_STAR: "โ", "white star - outlined star",
LEGEND_MARKER_HEART: "โฅ", "heart - filled heart",
LEGEND_MARKER_WHITE_HEART: "โก", "white heart - outlined heart",
LEGEND_MARKER_PLUS: "โ", "plus - plus sign",
LEGEND_MARKER_CROSS: "โ", "cross - X-shaped cross",
LEGEND_MARKER_CHECK: "โ", "check - check mark",
LEGEND_MARKER_BULLSEYE: "โ", "bullseye - circle with center dot",
LEGEND_MARKER_ASTERISM: "โ", "asterism - three asterisks",
LEGEND_MARKER_SMALL_CIRCLE: "โข", "small circle - bullet point",
LEGEND_MARKER_DASH: "โ", "dash - horizontal dash",
LEGEND_MARKER_DOT: "ยท", "dot - middle dot",
LEGEND_MARKER_HORIZONTAL_BAR: "โฑ", "horizontal bar - white bar",
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_symbols() {
assert_eq!(PIE_CHAR, 'โ');
assert_eq!(LEGEND_MARKER, "โ ");
}
#[test]
fn test_pie_char_variants() {
assert_eq!(PIE_CHAR_BLOCK, 'โ');
assert_eq!(PIE_CHAR_CIRCLE, 'โ');
assert_eq!(PIE_CHAR_STAR, 'โ
');
assert_eq!(PIE_CHAR_HEART, 'โฅ');
}
#[test]
fn test_legend_marker_variants() {
assert_eq!(LEGEND_MARKER_CIRCLE, "โ");
assert_eq!(LEGEND_MARKER_STAR, "โ
");
assert_eq!(LEGEND_MARKER_ARROW, "โถ");
assert_eq!(LEGEND_MARKER_CHECK, "โ");
}
#[test]
fn test_all_symbols_are_unique() {
let pie_chars = vec![
PIE_CHAR_BLOCK,
PIE_CHAR_SHADE,
PIE_CHAR_LIGHT,
PIE_CHAR_CIRCLE,
PIE_CHAR_SQUARE,
];
for ch in pie_chars {
assert!(ch.is_ascii() || ch > '\u{0080}');
}
}
#[test]
fn test_legend_markers_are_strings() {
let markers = vec![
LEGEND_MARKER,
LEGEND_MARKER_CIRCLE,
LEGEND_MARKER_STAR,
LEGEND_MARKER_ARROW,
];
for marker in markers {
assert!(!marker.is_empty());
assert!(marker.len() <= 3); }
}
}