Skip to main content

callisto_cli/render/
diff.rs

1use similar::{ChangeTag, TextDiff};
2
3pub fn render_unified_diff(old_text: &str, new_text: &str, header: &str) -> String {
4    let mut out = format!("\x1b[1m--- {header} (original)\n+++ {header} (proposed)\x1b[0m\n");
5    let diff = TextDiff::from_lines(old_text, new_text);
6    for change in diff.iter_all_changes() {
7        match change.tag() {
8            ChangeTag::Delete => out.push_str(&format!("\x1b[31m-{change}\x1b[0m")),
9            ChangeTag::Insert => out.push_str(&format!("\x1b[32m+{change}\x1b[0m")),
10            ChangeTag::Equal => out.push_str(&format!(" {change}")),
11        }
12    }
13    out
14}