1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
use ;
/// A [`Theme`] for customizing the appearance of diffs
///
/// This trait allows you to control how diffs are displayed without having
/// to parse the diff output yourself. You can customize prefixes, highlighting,
/// and formatting for different types of changes.
///
/// # Implementing a Custom Theme
///
/// To create a custom theme, you must implement at minimum:
/// - `equal_prefix`: Prefix for unchanged lines
/// - `delete_prefix`: Prefix for removed lines
/// - `insert_prefix`: Prefix for added lines
/// - `header`: Header text displayed at the top of the diff
///
/// All other methods have default implementations that you can override as needed.
///
/// # Example
///
/// ```rust
/// use std::borrow::Cow;
/// use termdiff::Theme;
///
/// #[derive(Debug)]
/// struct MyCustomTheme {}
///
/// impl Theme for MyCustomTheme {
/// // Required methods
/// fn equal_prefix<'this>(&self) -> Cow<'this, str> {
/// " ".into() // Space for unchanged lines
/// }
///
/// fn delete_prefix<'this>(&self) -> Cow<'this, str> {
/// "[-]".into() // Custom prefix for removed lines
/// }
///
/// fn insert_prefix<'this>(&self) -> Cow<'this, str> {
/// "[+]".into() // Custom prefix for added lines
/// }
///
/// fn header<'this>(&self) -> Cow<'this, str> {
/// "=== DIFF RESULTS ===\n".into() // Custom header
/// }
///
/// // Optional overrides for customizing content formatting
/// fn delete_content<'this>(&self, input: &'this str) -> Cow<'this, str> {
/// format!("REMOVED: {}", input).into() // Custom formatting for removed content
/// }
///
/// fn insert_line<'this>(&self, input: &'this str) -> Cow<'this, str> {
/// format!("ADDED: {}", input).into() // Custom formatting for added content
/// }
/// }
/// ```