Skip to content

Commit a1cbc88

Browse files
committed
refactor: Implement RawStream for Box<T> generically
1 parent 9cb7cd7 commit a1cbc88

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

crates/anstream/src/stream.rs

+13-4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub trait RawStream:
1212
}
1313

1414
impl<T: RawStream + ?Sized> RawStream for &mut T {}
15+
impl<T: RawStream + ?Sized> RawStream for Box<T> {}
1516

1617
impl RawStream for std::io::Stdout {}
1718

@@ -21,7 +22,7 @@ impl RawStream for std::io::Stderr {}
2122

2223
impl RawStream for std::io::StderrLock<'_> {}
2324

24-
impl RawStream for Box<dyn std::io::Write> {}
25+
impl RawStream for dyn std::io::Write {}
2526

2627
impl RawStream for Vec<u8> {}
2728

@@ -50,6 +51,13 @@ impl<T: IsTerminal + ?Sized> IsTerminal for &mut T {
5051
}
5152
}
5253

54+
impl<T: IsTerminal + ?Sized> IsTerminal for Box<T> {
55+
#[inline]
56+
fn is_terminal(&self) -> bool {
57+
(**self).is_terminal()
58+
}
59+
}
60+
5361
impl IsTerminal for std::io::Stdout {
5462
#[inline]
5563
fn is_terminal(&self) -> bool {
@@ -78,7 +86,7 @@ impl IsTerminal for std::io::StderrLock<'_> {
7886
}
7987
}
8088

81-
impl IsTerminal for Box<dyn std::io::Write> {
89+
impl IsTerminal for dyn std::io::Write {
8290
#[inline]
8391
fn is_terminal(&self) -> bool {
8492
false
@@ -154,7 +162,7 @@ impl AsLockedWrite for std::io::StderrLock<'static> {
154162
}
155163
}
156164

157-
impl AsLockedWrite for Box<dyn std::io::Write> {
165+
impl AsLockedWrite for dyn std::io::Write {
158166
type Write<'w> = &'w mut Self;
159167

160168
#[inline]
@@ -196,6 +204,7 @@ mod private {
196204

197205
impl<T: Sealed + ?Sized> Sealed for &T {}
198206
impl<T: Sealed + ?Sized> Sealed for &mut T {}
207+
impl<T: Sealed + ?Sized> Sealed for Box<T> {}
199208

200209
impl Sealed for std::io::Stdout {}
201210

@@ -205,7 +214,7 @@ mod private {
205214

206215
impl Sealed for std::io::StderrLock<'_> {}
207216

208-
impl Sealed for Box<dyn std::io::Write> {}
217+
impl Sealed for dyn std::io::Write {}
209218

210219
impl Sealed for Vec<u8> {}
211220

crates/anstyle-wincon/src/ansi.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Low-level ANSI-styling
22
33
/// Write ANSI colored text to the stream
4-
pub fn write_colored<S: std::io::Write>(
4+
pub fn write_colored<S: std::io::Write + ?Sized>(
55
stream: &mut S,
66
fg: Option<anstyle::AnsiColor>,
77
bg: Option<anstyle::AnsiColor>,

crates/anstyle-wincon/src/stream.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,18 @@ impl<T: WinconStream + ?Sized> WinconStream for &mut T {
2020
}
2121
}
2222

23-
impl WinconStream for Box<dyn std::io::Write> {
23+
impl<T: WinconStream + ?Sized> WinconStream for Box<T> {
24+
fn write_colored(
25+
&mut self,
26+
fg: Option<anstyle::AnsiColor>,
27+
bg: Option<anstyle::AnsiColor>,
28+
data: &[u8],
29+
) -> std::io::Result<usize> {
30+
(**self).write_colored(fg, bg, data)
31+
}
32+
}
33+
34+
impl WinconStream for dyn std::io::Write {
2435
fn write_colored(
2536
&mut self,
2637
fg: Option<anstyle::AnsiColor>,

0 commit comments

Comments
 (0)