diff options
Diffstat (limited to '')
-rw-r--r-- | vendor/anstream-0.5.0/src/buffer.rs | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/vendor/anstream-0.5.0/src/buffer.rs b/vendor/anstream-0.5.0/src/buffer.rs new file mode 100644 index 000000000..e635687c9 --- /dev/null +++ b/vendor/anstream-0.5.0/src/buffer.rs @@ -0,0 +1,77 @@ +use crate::IsTerminal; + +/// In-memory [`RawStream`][crate::RawStream] +#[derive(Clone, Default, Debug, PartialEq, Eq)] +pub struct Buffer(Vec<u8>); + +impl Buffer { + #[inline] + pub fn new() -> Self { + Default::default() + } + + #[inline] + pub fn with_capacity(capacity: usize) -> Self { + Self(Vec::with_capacity(capacity)) + } + + #[inline] + pub fn as_bytes(&self) -> &[u8] { + &self.0 + } +} + +impl AsRef<[u8]> for Buffer { + #[inline] + fn as_ref(&self) -> &[u8] { + self.as_bytes() + } +} + +impl IsTerminal for Buffer { + #[inline] + fn is_terminal(&self) -> bool { + false + } +} + +impl std::io::Write for Buffer { + #[inline] + fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> { + self.0.extend(buf); + Ok(buf.len()) + } + + #[inline] + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) + } +} + +#[cfg(all(windows, feature = "wincon"))] +impl anstyle_wincon::WinconStream for Buffer { + fn set_colors( + &mut self, + fg: Option<anstyle::AnsiColor>, + bg: Option<anstyle::AnsiColor>, + ) -> std::io::Result<()> { + use std::io::Write as _; + + if let Some(fg) = fg { + write!(self, "{}", fg.render_fg())?; + } + if let Some(bg) = bg { + write!(self, "{}", bg.render_bg())?; + } + if fg.is_none() && bg.is_none() { + write!(self, "{}", anstyle::Reset.render())?; + } + Ok(()) + } + + fn get_colors( + &self, + ) -> std::io::Result<(Option<anstyle::AnsiColor>, Option<anstyle::AnsiColor>)> { + Ok((None, None)) + } +} |