From 1b6a04ca5504955c571d1c97504fb45ea0befee4 Mon Sep 17 00:00:00 2001
From: Valentin Popov <valentin@popov.link>
Date: Mon, 8 Jan 2024 01:21:28 +0400
Subject: Initial vendor packages

Signed-off-by: Valentin Popov <valentin@popov.link>
---
 vendor/anstyle-wincon/src/stream.rs | 178 ++++++++++++++++++++++++++++++++++++
 1 file changed, 178 insertions(+)
 create mode 100644 vendor/anstyle-wincon/src/stream.rs

(limited to 'vendor/anstyle-wincon/src/stream.rs')

diff --git a/vendor/anstyle-wincon/src/stream.rs b/vendor/anstyle-wincon/src/stream.rs
new file mode 100644
index 0000000..9f10108
--- /dev/null
+++ b/vendor/anstyle-wincon/src/stream.rs
@@ -0,0 +1,178 @@
+/// Extend `std::io::Write` with wincon styling
+pub trait WinconStream {
+    /// Write colored text to the stream
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize>;
+}
+
+impl WinconStream for Box<dyn std::io::Write> {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        crate::ansi::write_colored(self, fg, bg, data)
+    }
+}
+
+impl WinconStream for &'_ mut Box<dyn std::io::Write> {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        (**self).write_colored(fg, bg, data)
+    }
+}
+
+impl WinconStream for std::fs::File {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        crate::ansi::write_colored(self, fg, bg, data)
+    }
+}
+
+impl WinconStream for &'_ mut std::fs::File {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        (**self).write_colored(fg, bg, data)
+    }
+}
+
+impl WinconStream for Vec<u8> {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        crate::ansi::write_colored(self, fg, bg, data)
+    }
+}
+
+impl WinconStream for &'_ mut Vec<u8> {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        (**self).write_colored(fg, bg, data)
+    }
+}
+
+impl WinconStream for std::io::Stdout {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        // Ensure exclusive access
+        self.lock().write_colored(fg, bg, data)
+    }
+}
+
+impl WinconStream for std::io::Stderr {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        // Ensure exclusive access
+        self.lock().write_colored(fg, bg, data)
+    }
+}
+
+#[cfg(not(windows))]
+mod platform {
+    use super::*;
+
+    impl WinconStream for std::io::StdoutLock<'_> {
+        fn write_colored(
+            &mut self,
+            fg: Option<anstyle::AnsiColor>,
+            bg: Option<anstyle::AnsiColor>,
+            data: &[u8],
+        ) -> std::io::Result<usize> {
+            crate::ansi::write_colored(self, fg, bg, data)
+        }
+    }
+
+    impl WinconStream for std::io::StderrLock<'_> {
+        fn write_colored(
+            &mut self,
+            fg: Option<anstyle::AnsiColor>,
+            bg: Option<anstyle::AnsiColor>,
+            data: &[u8],
+        ) -> std::io::Result<usize> {
+            crate::ansi::write_colored(self, fg, bg, data)
+        }
+    }
+}
+
+#[cfg(windows)]
+mod platform {
+    use super::*;
+
+    impl WinconStream for std::io::StdoutLock<'_> {
+        fn write_colored(
+            &mut self,
+            fg: Option<anstyle::AnsiColor>,
+            bg: Option<anstyle::AnsiColor>,
+            data: &[u8],
+        ) -> std::io::Result<usize> {
+            let initial = crate::windows::stdout_initial_colors();
+            crate::windows::write_colored(self, fg, bg, data, initial)
+        }
+    }
+
+    impl WinconStream for std::io::StderrLock<'_> {
+        fn write_colored(
+            &mut self,
+            fg: Option<anstyle::AnsiColor>,
+            bg: Option<anstyle::AnsiColor>,
+            data: &[u8],
+        ) -> std::io::Result<usize> {
+            let initial = crate::windows::stderr_initial_colors();
+            crate::windows::write_colored(self, fg, bg, data, initial)
+        }
+    }
+}
+
+impl WinconStream for &'_ mut std::io::StdoutLock<'_> {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        (**self).write_colored(fg, bg, data)
+    }
+}
+
+impl WinconStream for &'_ mut std::io::StderrLock<'_> {
+    fn write_colored(
+        &mut self,
+        fg: Option<anstyle::AnsiColor>,
+        bg: Option<anstyle::AnsiColor>,
+        data: &[u8],
+    ) -> std::io::Result<usize> {
+        (**self).write_colored(fg, bg, data)
+    }
+}
-- 
cgit v1.2.3