From 56b19d0601557509e6deb33d1b1e10208146f70b Mon Sep 17 00:00:00 2001 From: Martin Habovstiak Date: Fri, 16 Aug 2024 11:59:43 +0200 Subject: [PATCH] Add missing IO impls for `std` types Previously we've only implemented `bitcoin-io` traits for `BufReader` and `BufWriter` with the reasoning that people should most likely use those and implementing for other types is too much work. However since then there were requests to implement them so we do in this commit. --- io/Cargo.toml | 2 +- io/src/bridge.rs | 195 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+), 1 deletion(-) diff --git a/io/Cargo.toml b/io/Cargo.toml index 852e465c5..f6747bb3b 100644 --- a/io/Cargo.toml +++ b/io/Cargo.toml @@ -23,4 +23,4 @@ all-features = true rustdoc-args = ["--cfg", "docsrs"] [lints.rust] -unexpected_cfgs = { level = "deny", check-cfg = ['cfg(rust_v_1_72)'] } +unexpected_cfgs = { level = "deny", check-cfg = ['cfg(rust_v_1_72)', 'cfg(rust_v_1_73)', 'cfg(rust_v_1_75)', 'cfg(rust_v_1_78)'] } diff --git a/io/src/bridge.rs b/io/src/bridge.rs index f54530b40..85e999167 100644 --- a/io/src/bridge.rs +++ b/io/src/bridge.rs @@ -344,3 +344,198 @@ impl_our! { impl_our! { impl Write for std::io::BufWriter } + +#[cfg(rust_v_1_72)] +impl_our! { + impl Write for std::io::LineWriter where W: ?Sized +} + +#[cfg(not(rust_v_1_72))] +impl_our! { + impl Write for std::io::LineWriter +} + +impl_our! { + impl Read for std::io::Take +} + +impl_our! { + impl BufRead for std::io::Take +} + +impl_our! { + impl Read for std::io::Chain +} + +impl_our! { + impl BufRead for std::io::Chain +} + +impl_our! { + impl> Read for std::io::Cursor +} + +impl_our! { + impl> BufRead for std::io::Cursor +} + +impl_our! { + impl Write for std::io::Cursor> +} + +impl_our! { + impl Write for std::io::Cursor<&'_ mut std::vec::Vec> +} + +impl_our! { + impl Write for std::io::Cursor> +} + +impl_our! { + impl Read for std::io::Empty +} + +impl_our! { + impl BufRead for std::io::Empty +} + +#[cfg(rust_v_1_73)] +impl_our! { + impl Write for std::io::Empty +} + +// No idea why &Empty impls Write but not Read + BufRead +#[cfg(rust_v_1_73)] +impl_our! { + impl Write for &'_ std::io::Empty +} + +impl_our! { + impl Read for std::io::Repeat +} + +impl_our! { + impl Read for std::io::Stdin +} + +#[cfg(rust_v_1_78)] +impl_our! { + impl Read for &'_ std::io::Stdin +} + +impl_our! { + impl Write for std::io::Stdout +} + +impl_our! { + impl Write for &'_ std::io::Stdout +} + +impl_our! { + impl Write for std::io::Stderr +} + +impl_our! { + impl Write for &'_ std::io::Stderr +} + +impl_our! { + impl Read for std::io::StdinLock<'_> +} + +impl_our! { + impl BufRead for std::io::StdinLock<'_> +} + +impl_our! { + impl Read for std::fs::File +} + +impl_our! { + impl Write for std::fs::File +} + +impl_our! { + impl Read for &'_ std::fs::File +} + +impl_our! { + impl Write for &'_ std::fs::File +} + +#[cfg(rust_v_1_73)] +impl_our! { + impl Read for std::sync::Arc +} + +#[cfg(rust_v_1_73)] +impl_our! { + impl Write for std::sync::Arc +} + +impl_our! { + impl Read for std::net::TcpStream +} + +impl_our! { + impl Write for std::net::TcpStream +} + +impl_our! { + impl Read for &'_ std::net::TcpStream +} + +impl_our! { + impl Write for &'_ std::net::TcpStream +} + +#[cfg(target_family = "unix")] +impl_our! { + impl Read for std::os::unix::net::UnixStream +} + +#[cfg(target_family = "unix")] +impl_our! { + impl Write for std::os::unix::net::UnixStream +} + +#[cfg(target_family = "unix")] +impl_our! { + impl Read for &'_ std::os::unix::net::UnixStream +} + +#[cfg(target_family = "unix")] +impl_our! { + impl Write for &'_ std::os::unix::net::UnixStream +} + +impl_our! { + impl Read for std::process::ChildStderr +} + +impl_our! { + impl Read for std::process::ChildStdout +} + +impl_our! { + impl Write for std::process::ChildStdin +} + +// No ide why other &ChildStd* are not implemented +impl_our! { + impl Write for &'_ std::process::ChildStdin +} + +#[cfg(rust_v_1_75)] +impl_our! { + impl Read for std::collections::VecDeque +} + +#[cfg(rust_v_1_75)] +impl_our! { + impl BufRead for std::collections::VecDeque +} + +impl_our! { + impl Write for std::collections::VecDeque +}