callisto_cli/render/
diff.rs1use 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}