Skip to content

Commit 56b19d0

Browse files
committed
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.
1 parent 5e30c9f commit 56b19d0

File tree

2 files changed

+196
-1
lines changed

2 files changed

+196
-1
lines changed

io/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ all-features = true
2323
rustdoc-args = ["--cfg", "docsrs"]
2424

2525
[lints.rust]
26-
unexpected_cfgs = { level = "deny", check-cfg = ['cfg(rust_v_1_72)'] }
26+
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)'] }

io/src/bridge.rs

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,3 +344,198 @@ impl_our! {
344344
impl_our! {
345345
impl<W: std::io::Write> Write for std::io::BufWriter<W>
346346
}
347+
348+
#[cfg(rust_v_1_72)]
349+
impl_our! {
350+
impl<W: std::io::Write> Write for std::io::LineWriter<W> where W: ?Sized
351+
}
352+
353+
#[cfg(not(rust_v_1_72))]
354+
impl_our! {
355+
impl<W: std::io::Write> Write for std::io::LineWriter<W>
356+
}
357+
358+
impl_our! {
359+
impl<R: std::io::Read> Read for std::io::Take<R>
360+
}
361+
362+
impl_our! {
363+
impl<R: std::io::BufRead> BufRead for std::io::Take<R>
364+
}
365+
366+
impl_our! {
367+
impl<R1: std::io::Read, R2: std::io::Read> Read for std::io::Chain<R1, R2>
368+
}
369+
370+
impl_our! {
371+
impl<R1: std::io::BufRead, R2: std::io::BufRead> BufRead for std::io::Chain<R1, R2>
372+
}
373+
374+
impl_our! {
375+
impl<T: AsRef<[u8]>> Read for std::io::Cursor<T>
376+
}
377+
378+
impl_our! {
379+
impl<T: AsRef<[u8]>> BufRead for std::io::Cursor<T>
380+
}
381+
382+
impl_our! {
383+
impl Write for std::io::Cursor<std::vec::Vec<u8>>
384+
}
385+
386+
impl_our! {
387+
impl Write for std::io::Cursor<&'_ mut std::vec::Vec<u8>>
388+
}
389+
390+
impl_our! {
391+
impl Write for std::io::Cursor<std::boxed::Box<[u8]>>
392+
}
393+
394+
impl_our! {
395+
impl Read for std::io::Empty
396+
}
397+
398+
impl_our! {
399+
impl BufRead for std::io::Empty
400+
}
401+
402+
#[cfg(rust_v_1_73)]
403+
impl_our! {
404+
impl Write for std::io::Empty
405+
}
406+
407+
// No idea why &Empty impls Write but not Read + BufRead
408+
#[cfg(rust_v_1_73)]
409+
impl_our! {
410+
impl Write for &'_ std::io::Empty
411+
}
412+
413+
impl_our! {
414+
impl Read for std::io::Repeat
415+
}
416+
417+
impl_our! {
418+
impl Read for std::io::Stdin
419+
}
420+
421+
#[cfg(rust_v_1_78)]
422+
impl_our! {
423+
impl Read for &'_ std::io::Stdin
424+
}
425+
426+
impl_our! {
427+
impl Write for std::io::Stdout
428+
}
429+
430+
impl_our! {
431+
impl Write for &'_ std::io::Stdout
432+
}
433+
434+
impl_our! {
435+
impl Write for std::io::Stderr
436+
}
437+
438+
impl_our! {
439+
impl Write for &'_ std::io::Stderr
440+
}
441+
442+
impl_our! {
443+
impl Read for std::io::StdinLock<'_>
444+
}
445+
446+
impl_our! {
447+
impl BufRead for std::io::StdinLock<'_>
448+
}
449+
450+
impl_our! {
451+
impl Read for std::fs::File
452+
}
453+
454+
impl_our! {
455+
impl Write for std::fs::File
456+
}
457+
458+
impl_our! {
459+
impl Read for &'_ std::fs::File
460+
}
461+
462+
impl_our! {
463+
impl Write for &'_ std::fs::File
464+
}
465+
466+
#[cfg(rust_v_1_73)]
467+
impl_our! {
468+
impl Read for std::sync::Arc<std::fs::File>
469+
}
470+
471+
#[cfg(rust_v_1_73)]
472+
impl_our! {
473+
impl Write for std::sync::Arc<std::fs::File>
474+
}
475+
476+
impl_our! {
477+
impl Read for std::net::TcpStream
478+
}
479+
480+
impl_our! {
481+
impl Write for std::net::TcpStream
482+
}
483+
484+
impl_our! {
485+
impl Read for &'_ std::net::TcpStream
486+
}
487+
488+
impl_our! {
489+
impl Write for &'_ std::net::TcpStream
490+
}
491+
492+
#[cfg(target_family = "unix")]
493+
impl_our! {
494+
impl Read for std::os::unix::net::UnixStream
495+
}
496+
497+
#[cfg(target_family = "unix")]
498+
impl_our! {
499+
impl Write for std::os::unix::net::UnixStream
500+
}
501+
502+
#[cfg(target_family = "unix")]
503+
impl_our! {
504+
impl Read for &'_ std::os::unix::net::UnixStream
505+
}
506+
507+
#[cfg(target_family = "unix")]
508+
impl_our! {
509+
impl Write for &'_ std::os::unix::net::UnixStream
510+
}
511+
512+
impl_our! {
513+
impl Read for std::process::ChildStderr
514+
}
515+
516+
impl_our! {
517+
impl Read for std::process::ChildStdout
518+
}
519+
520+
impl_our! {
521+
impl Write for std::process::ChildStdin
522+
}
523+
524+
// No ide why other &ChildStd* are not implemented
525+
impl_our! {
526+
impl Write for &'_ std::process::ChildStdin
527+
}
528+
529+
#[cfg(rust_v_1_75)]
530+
impl_our! {
531+
impl Read for std::collections::VecDeque<u8>
532+
}
533+
534+
#[cfg(rust_v_1_75)]
535+
impl_our! {
536+
impl BufRead for std::collections::VecDeque<u8>
537+
}
538+
539+
impl_our! {
540+
impl Write for std::collections::VecDeque<u8>
541+
}

0 commit comments

Comments
 (0)