• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1diff --git a/Cargo.lock b/Cargo.lock
2index 078e0b0..76e3a88 100644
3--- a/Cargo.lock
4+++ b/Cargo.lock
5@@ -11,12 +11,6 @@ dependencies = [
6  "memchr",
7 ]
8
9-[[package]]
10-name = "anstyle"
11-version = "1.0.1"
12-source = "registry+https://github.com/rust-lang/crates.io-index"
13-checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
14-
15 [[package]]
16 name = "autocfg"
17 version = "1.1.0"
18@@ -78,7 +72,6 @@ dependencies = [
19 name = "predicates"
20 version = "3.0.4"
21 dependencies = [
22- "anstyle",
23  "difflib",
24  "float-cmp",
25  "itertools",
26@@ -86,6 +79,7 @@ dependencies = [
27  "predicates-core",
28  "predicates-tree",
29  "regex",
30+ "termcolor",
31 ]
32
33 [[package]]
34@@ -133,8 +127,48 @@ version = "0.7.4"
35 source = "registry+https://github.com/rust-lang/crates.io-index"
36 checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
37
38+[[package]]
39+name = "termcolor"
40+version = "1.4.0"
41+source = "registry+https://github.com/rust-lang/crates.io-index"
42+checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
43+dependencies = [
44+ "winapi-util",
45+]
46+
47 [[package]]
48 name = "termtree"
49 version = "0.4.1"
50 source = "registry+https://github.com/rust-lang/crates.io-index"
51 checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
52+
53+[[package]]
54+name = "winapi"
55+version = "0.3.9"
56+source = "registry+https://github.com/rust-lang/crates.io-index"
57+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
58+dependencies = [
59+ "winapi-i686-pc-windows-gnu",
60+ "winapi-x86_64-pc-windows-gnu",
61+]
62+
63+[[package]]
64+name = "winapi-i686-pc-windows-gnu"
65+version = "0.4.0"
66+source = "registry+https://github.com/rust-lang/crates.io-index"
67+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
68+
69+[[package]]
70+name = "winapi-util"
71+version = "0.1.6"
72+source = "registry+https://github.com/rust-lang/crates.io-index"
73+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
74+dependencies = [
75+ "winapi",
76+]
77+
78+[[package]]
79+name = "winapi-x86_64-pc-windows-gnu"
80+version = "0.4.0"
81+source = "registry+https://github.com/rust-lang/crates.io-index"
82+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
83diff --git a/Cargo.toml b/Cargo.toml
84index 2659c95..a679840 100644
85--- a/Cargo.toml
86+++ b/Cargo.toml
87@@ -96,9 +96,6 @@ replace = """
88 [Unreleased]: https://github.com/assert-rs/predicates-rs/compare/{{tag_name}}...HEAD"""
89 search = "<!-- next-url -->"
90
91-[dependencies.anstyle]
92-version = "1.0.0"
93-
94 [dependencies.difflib]
95 version = "0.4"
96 optional = true
97@@ -121,6 +118,9 @@ version = "1.0"
98 version = "1.0"
99 optional = true
100
101+[dependencies.termcolor]
102+version = "1.2.0"
103+
104 [dev-dependencies.predicates-tree]
105 version = "1.0"
106
107diff --git a/patches/use-termcolor.patch b/patches/use-termcolor.patch
108index 9831f7d..e69de29 100644
109--- a/patches/use-termcolor.patch
110+++ b/patches/use-termcolor.patch
111@@ -1,111 +0,0 @@
112---- a/Android.bp	2023-11-07 14:29:55.304929829 +0100
113-+++ b/Android.bp	2023-11-07 14:30:05.916987569 +0100
114-@@ -16,7 +16,7 @@
115-         "regex",
116-     ],
117-     rustlibs: [
118--        "libanstyle",
119-+        "libtermcolor",
120-         "libitertools",
121-         "libpredicates_core",
122-         "libregex",
123-@@ -47,7 +47,7 @@
124-         "regex",
125-     ],
126-     rustlibs: [
127--        "libanstyle",
128-+        "libtermcolor",
129-         "libitertools",
130-         "libpredicates_core",
131-         "libpredicates_tree",
132---- a/src/color.rs	2006-07-24 03:21:28.000000000 +0200
133-+++ b/src/color.rs	2023-11-07 14:26:51.131915579 +0100
134-@@ -1,17 +1,29 @@
135--#[derive(Copy, Clone, Debug, Default)]
136-+use std::io::Write;
137-+use termcolor::{Color, ColorSpec, WriteColor};
138-+
139-+#[derive(Clone, Debug, Default)]
140- pub(crate) struct Palette {
141--    description: anstyle::Style,
142--    var: anstyle::Style,
143--    expected: anstyle::Style,
144-+    description: ColorSpec,
145-+    var: ColorSpec,
146-+    expected: ColorSpec,
147- }
148-
149- impl Palette {
150-     pub(crate) fn new(alternate: bool) -> Self {
151-         if alternate && cfg!(feature = "color") {
152-             Self {
153--                description: anstyle::AnsiColor::Blue.on_default() | anstyle::Effects::BOLD,
154--                var: anstyle::AnsiColor::Red.on_default() | anstyle::Effects::BOLD,
155--                expected: anstyle::AnsiColor::Green.on_default() | anstyle::Effects::BOLD,
156-+                description: ColorSpec::new()
157-+                    .set_fg(Some(Color::Blue))
158-+                    .set_bold(true)
159-+                    .clone(),
160-+                var: ColorSpec::new()
161-+                    .set_fg(Some(Color::Red))
162-+                    .set_bold(true)
163-+                    .clone(),
164-+                expected: ColorSpec::new()
165-+                    .set_fg(Some(Color::Green))
166-+                    .set_bold(true)
167-+                    .clone(),
168-             }
169-         } else {
170-             Self::plain()
171-@@ -26,27 +38,27 @@
172-         }
173-     }
174-
175--    pub(crate) fn description<D: std::fmt::Display>(self, display: D) -> Styled<D> {
176--        Styled::new(display, self.description)
177-+    pub(crate) fn description<D: std::fmt::Display>(&self, display: D) -> Styled<D> {
178-+        Styled::new(display, self.description.clone())
179-     }
180-
181--    pub(crate) fn var<D: std::fmt::Display>(self, display: D) -> Styled<D> {
182--        Styled::new(display, self.var)
183-+    pub(crate) fn var<D: std::fmt::Display>(&self, display: D) -> Styled<D> {
184-+        Styled::new(display, self.var.clone())
185-     }
186-
187--    pub(crate) fn expected<D: std::fmt::Display>(self, display: D) -> Styled<D> {
188--        Styled::new(display, self.expected)
189-+    pub(crate) fn expected<D: std::fmt::Display>(&self, display: D) -> Styled<D> {
190-+        Styled::new(display, self.expected.clone())
191-     }
192- }
193-
194- #[derive(Debug)]
195- pub(crate) struct Styled<D> {
196-     display: D,
197--    style: anstyle::Style,
198-+    style: ColorSpec,
199- }
200-
201- impl<D: std::fmt::Display> Styled<D> {
202--    pub(crate) fn new(display: D, style: anstyle::Style) -> Self {
203-+    pub(crate) fn new(display: D, style: ColorSpec) -> Self {
204-         Self { display, style }
205-     }
206- }
207-@@ -55,10 +67,11 @@
208-     #[inline]
209-     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
210-         if f.alternate() {
211--            write!(f, "{}", self.style.render())?;
212--            self.display.fmt(f)?;
213--            write!(f, "{}", self.style.render_reset())?;
214--            Ok(())
215-+            let mut buf = termcolor::Buffer::ansi();
216-+            buf.set_color(&self.style).unwrap();
217-+            write!(&mut buf, "{}", &self.display).unwrap();
218-+            buf.reset().unwrap();
219-+            write!(f, "{}", String::from_utf8(buf.into_inner()).unwrap())
220-         } else {
221-             self.display.fmt(f)
222-         }
223diff --git a/src/color.rs b/src/color.rs
224index f1b6a21..2b9449c 100644
225--- a/src/color.rs
226+++ b/src/color.rs
227@@ -1,17 +1,29 @@
228-#[derive(Copy, Clone, Debug, Default)]
229+use std::io::Write;
230+use termcolor::{Color, ColorSpec, WriteColor};
231+
232+#[derive(Clone, Debug, Default)]
233 pub(crate) struct Palette {
234-    description: anstyle::Style,
235-    var: anstyle::Style,
236-    expected: anstyle::Style,
237+    description: ColorSpec,
238+    var: ColorSpec,
239+    expected: ColorSpec,
240 }
241
242 impl Palette {
243     pub(crate) fn new(alternate: bool) -> Self {
244         if alternate && cfg!(feature = "color") {
245             Self {
246-                description: anstyle::AnsiColor::Blue.on_default() | anstyle::Effects::BOLD,
247-                var: anstyle::AnsiColor::Red.on_default() | anstyle::Effects::BOLD,
248-                expected: anstyle::AnsiColor::Green.on_default() | anstyle::Effects::BOLD,
249+                description: ColorSpec::new()
250+                    .set_fg(Some(Color::Blue))
251+                    .set_bold(true)
252+                    .clone(),
253+                var: ColorSpec::new()
254+                    .set_fg(Some(Color::Red))
255+                    .set_bold(true)
256+                    .clone(),
257+                expected: ColorSpec::new()
258+                    .set_fg(Some(Color::Green))
259+                    .set_bold(true)
260+                    .clone(),
261             }
262         } else {
263             Self::plain()
264@@ -26,27 +38,27 @@ impl Palette {
265         }
266     }
267
268-    pub(crate) fn description<D: std::fmt::Display>(self, display: D) -> Styled<D> {
269-        Styled::new(display, self.description)
270+    pub(crate) fn description<D: std::fmt::Display>(&self, display: D) -> Styled<D> {
271+        Styled::new(display, self.description.clone())
272     }
273
274-    pub(crate) fn var<D: std::fmt::Display>(self, display: D) -> Styled<D> {
275-        Styled::new(display, self.var)
276+    pub(crate) fn var<D: std::fmt::Display>(&self, display: D) -> Styled<D> {
277+        Styled::new(display, self.var.clone())
278     }
279
280-    pub(crate) fn expected<D: std::fmt::Display>(self, display: D) -> Styled<D> {
281-        Styled::new(display, self.expected)
282+    pub(crate) fn expected<D: std::fmt::Display>(&self, display: D) -> Styled<D> {
283+        Styled::new(display, self.expected.clone())
284     }
285 }
286
287 #[derive(Debug)]
288 pub(crate) struct Styled<D> {
289     display: D,
290-    style: anstyle::Style,
291+    style: ColorSpec,
292 }
293
294 impl<D: std::fmt::Display> Styled<D> {
295-    pub(crate) fn new(display: D, style: anstyle::Style) -> Self {
296+    pub(crate) fn new(display: D, style: ColorSpec) -> Self {
297         Self { display, style }
298     }
299 }
300@@ -55,10 +67,11 @@ impl<D: std::fmt::Display> std::fmt::Display for Styled<D> {
301     #[inline]
302     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
303         if f.alternate() {
304-            write!(f, "{}", self.style.render())?;
305-            self.display.fmt(f)?;
306-            write!(f, "{}", self.style.render_reset())?;
307-            Ok(())
308+            let mut buf = termcolor::Buffer::ansi();
309+            buf.set_color(&self.style).unwrap();
310+            write!(&mut buf, "{}", &self.display).unwrap();
311+            buf.reset().unwrap();
312+            write!(f, "{}", String::from_utf8(buf.into_inner()).unwrap())
313         } else {
314             self.display.fmt(f)
315         }
316