Skip to content

Commit

Permalink
Merge rust-bitcoin#3861: io: Add traits
Browse files Browse the repository at this point in the history
426f585 api: Run just check-api (Tobin C. Harding)
6cf9013 io: Add traits (Tobin C. Harding)

Pull request description:

  So that our `io` crate is not surprising it seems we should generally, unless there is a good reason not to, follow `std::io`.

  Copy the derived trait implementations from `std::io` for `Cursor`, and `Sink`. `Take` is correct already, just `Debug`.

  Done while investigating C-COMMON-TRAITS

ACKs for top commit:
  apoelstra:
    ACK 426f585; successfully ran local tests

Tree-SHA512: 0fdacfa0295c36e9ee2bdffd5e649b923f48eeff7baa3afc99fda0836ae30b794610a176c0e76341a268c712baab51139355976c23913a0744692cd1e38a4d11
  • Loading branch information
apoelstra committed Jan 10, 2025
2 parents 67db64c + 426f585 commit 1d1fcb0
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 2 deletions.
13 changes: 13 additions & 0 deletions api/io/all-features.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,22 @@ impl bitcoin_io::Write for std::net::tcp::TcpStream
impl bitcoin_io::Write for std::os::unix::net::stream::UnixStream
impl bitcoin_io::Write for std::process::ChildStdin
impl core::clone::Clone for bitcoin_io::ErrorKind
impl core::clone::Clone for bitcoin_io::Sink
impl core::cmp::Eq for bitcoin_io::ErrorKind
impl core::cmp::PartialEq for bitcoin_io::ErrorKind
impl core::convert::From<bitcoin_io::Error> for std::io::error::Error
impl core::convert::From<bitcoin_io::ErrorKind> for bitcoin_io::Error
impl core::convert::From<core::convert::Infallible> for bitcoin_io::ErrorKind
impl core::convert::From<std::io::error::Error> for bitcoin_io::Error
impl core::default::Default for bitcoin_io::Sink
impl core::error::Error for bitcoin_io::Error
impl core::fmt::Debug for bitcoin_io::Error
impl core::fmt::Debug for bitcoin_io::ErrorKind
impl core::fmt::Debug for bitcoin_io::Sink
impl core::fmt::Display for bitcoin_io::Error
impl core::hash::Hash for bitcoin_io::ErrorKind
impl core::marker::Copy for bitcoin_io::ErrorKind
impl core::marker::Copy for bitcoin_io::Sink
impl core::marker::Freeze for bitcoin_io::Error
impl core::marker::Freeze for bitcoin_io::ErrorKind
impl core::marker::Freeze for bitcoin_io::Sink
Expand Down Expand Up @@ -102,11 +105,15 @@ impl<T: bitcoin_io::Read> std::io::Read for bitcoin_io::ToStd<T>
impl<T: bitcoin_io::Write> bitcoin_io::Write for &mut T
impl<T: bitcoin_io::Write> bitcoin_io::Write for bitcoin_io::ToStd<T>
impl<T: bitcoin_io::Write> std::io::Write for bitcoin_io::ToStd<T>
impl<T: core::clone::Clone> core::clone::Clone for bitcoin_io::Cursor<T>
impl<T: core::cmp::Eq> core::cmp::Eq for bitcoin_io::Cursor<T>
impl<T: core::cmp::PartialEq> core::cmp::PartialEq for bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::BufRead for bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::BufRead for std::io::cursor::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::Read for bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::Read for std::io::cursor::Cursor<T>
impl<T: core::default::Default> core::default::Default for bitcoin_io::Cursor<T>
impl<T: core::fmt::Debug> core::fmt::Debug for bitcoin_io::Cursor<T>
impl<T: core::fmt::Debug> core::fmt::Debug for bitcoin_io::FromStd<T>
impl<T: core::fmt::Debug> core::fmt::Debug for bitcoin_io::ToStd<T>
Expand All @@ -124,6 +131,7 @@ impl<T> core::marker::Freeze for bitcoin_io::ToStd<T> where T: core::marker::Fre
impl<T> core::marker::Send for bitcoin_io::Cursor<T> where T: core::marker::Send
impl<T> core::marker::Send for bitcoin_io::FromStd<T> where T: core::marker::Send
impl<T> core::marker::Send for bitcoin_io::ToStd<T> where T: core::marker::Send
impl<T> core::marker::StructuralPartialEq for bitcoin_io::Cursor<T>
impl<T> core::marker::Sync for bitcoin_io::Cursor<T> where T: core::marker::Sync
impl<T> core::marker::Sync for bitcoin_io::FromStd<T> where T: core::marker::Sync
impl<T> core::marker::Sync for bitcoin_io::ToStd<T> where T: core::marker::Sync
Expand Down Expand Up @@ -217,7 +225,10 @@ pub fn alloc::vec::Vec<u8>::flush(&mut self) -> bitcoin_io::Result<()>
pub fn alloc::vec::Vec<u8>::write(&mut self, buf: &[u8]) -> bitcoin_io::Result<usize>
pub fn bitcoin_io::BufRead::consume(&mut self, amount: usize)
pub fn bitcoin_io::BufRead::fill_buf(&mut self) -> bitcoin_io::Result<&[u8]>
pub fn bitcoin_io::Cursor<T>::clone(&self) -> bitcoin_io::Cursor<T>
pub fn bitcoin_io::Cursor<T>::consume(&mut self, amount: usize)
pub fn bitcoin_io::Cursor<T>::default() -> bitcoin_io::Cursor<T>
pub fn bitcoin_io::Cursor<T>::eq(&self, other: &bitcoin_io::Cursor<T>) -> bool
pub fn bitcoin_io::Cursor<T>::fill_buf(&mut self) -> bitcoin_io::Result<&[u8]>
pub fn bitcoin_io::Cursor<T>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
pub fn bitcoin_io::Cursor<T>::get_mut(&mut self) -> &mut T
Expand Down Expand Up @@ -268,6 +279,8 @@ pub fn bitcoin_io::Read::read(&mut self, buf: &mut [u8]) -> bitcoin_io::Result<u
pub fn bitcoin_io::Read::read_exact(&mut self, buf: &mut [u8]) -> bitcoin_io::Result<()>
pub fn bitcoin_io::Read::read_to_limit(&mut self, buf: &mut alloc::vec::Vec<u8>, limit: u64) -> bitcoin_io::Result<usize>
pub fn bitcoin_io::Read::take(&mut self, limit: u64) -> bitcoin_io::Take<'_, Self>
pub fn bitcoin_io::Sink::clone(&self) -> bitcoin_io::Sink
pub fn bitcoin_io::Sink::default() -> bitcoin_io::Sink
pub fn bitcoin_io::Sink::flush(&mut self) -> bitcoin_io::Result<()>
pub fn bitcoin_io::Sink::flush(&mut self) -> std::io::error::Result<()>
pub fn bitcoin_io::Sink::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
Expand Down
13 changes: 13 additions & 0 deletions api/io/alloc-only.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,19 @@ impl bitcoin_io::Write for &mut [u8]
impl bitcoin_io::Write for alloc::vec::Vec<u8>
impl bitcoin_io::Write for bitcoin_io::Sink
impl core::clone::Clone for bitcoin_io::ErrorKind
impl core::clone::Clone for bitcoin_io::Sink
impl core::cmp::Eq for bitcoin_io::ErrorKind
impl core::cmp::PartialEq for bitcoin_io::ErrorKind
impl core::convert::From<bitcoin_io::ErrorKind> for bitcoin_io::Error
impl core::convert::From<core::convert::Infallible> for bitcoin_io::ErrorKind
impl core::default::Default for bitcoin_io::Sink
impl core::fmt::Debug for bitcoin_io::Error
impl core::fmt::Debug for bitcoin_io::ErrorKind
impl core::fmt::Debug for bitcoin_io::Sink
impl core::fmt::Display for bitcoin_io::Error
impl core::hash::Hash for bitcoin_io::ErrorKind
impl core::marker::Copy for bitcoin_io::ErrorKind
impl core::marker::Copy for bitcoin_io::Sink
impl core::marker::Freeze for bitcoin_io::Error
impl core::marker::Freeze for bitcoin_io::ErrorKind
impl core::marker::Freeze for bitcoin_io::Sink
Expand Down Expand Up @@ -47,12 +50,17 @@ impl<R: bitcoin_io::Read + ?core::marker::Sized> bitcoin_io::Take<'_, R>
impl<T: bitcoin_io::BufRead> bitcoin_io::BufRead for &mut T
impl<T: bitcoin_io::Read> bitcoin_io::Read for &mut T
impl<T: bitcoin_io::Write> bitcoin_io::Write for &mut T
impl<T: core::clone::Clone> core::clone::Clone for bitcoin_io::Cursor<T>
impl<T: core::cmp::Eq> core::cmp::Eq for bitcoin_io::Cursor<T>
impl<T: core::cmp::PartialEq> core::cmp::PartialEq for bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::BufRead for bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::Read for bitcoin_io::Cursor<T>
impl<T: core::default::Default> core::default::Default for bitcoin_io::Cursor<T>
impl<T: core::fmt::Debug> core::fmt::Debug for bitcoin_io::Cursor<T>
impl<T> core::marker::Freeze for bitcoin_io::Cursor<T> where T: core::marker::Freeze
impl<T> core::marker::Send for bitcoin_io::Cursor<T> where T: core::marker::Send
impl<T> core::marker::StructuralPartialEq for bitcoin_io::Cursor<T>
impl<T> core::marker::Sync for bitcoin_io::Cursor<T> where T: core::marker::Sync
impl<T> core::marker::Unpin for bitcoin_io::Cursor<T> where T: core::marker::Unpin
impl<T> core::panic::unwind_safe::RefUnwindSafe for bitcoin_io::Cursor<T> where T: core::panic::unwind_safe::RefUnwindSafe
Expand Down Expand Up @@ -92,7 +100,10 @@ pub fn alloc::vec::Vec<u8>::flush(&mut self) -> bitcoin_io::Result<()>
pub fn alloc::vec::Vec<u8>::write(&mut self, buf: &[u8]) -> bitcoin_io::Result<usize>
pub fn bitcoin_io::BufRead::consume(&mut self, amount: usize)
pub fn bitcoin_io::BufRead::fill_buf(&mut self) -> bitcoin_io::Result<&[u8]>
pub fn bitcoin_io::Cursor<T>::clone(&self) -> bitcoin_io::Cursor<T>
pub fn bitcoin_io::Cursor<T>::consume(&mut self, amount: usize)
pub fn bitcoin_io::Cursor<T>::default() -> bitcoin_io::Cursor<T>
pub fn bitcoin_io::Cursor<T>::eq(&self, other: &bitcoin_io::Cursor<T>) -> bool
pub fn bitcoin_io::Cursor<T>::fill_buf(&mut self) -> bitcoin_io::Result<&[u8]>
pub fn bitcoin_io::Cursor<T>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
pub fn bitcoin_io::Cursor<T>::get_mut(&mut self) -> &mut T
Expand All @@ -118,6 +129,8 @@ pub fn bitcoin_io::Read::read(&mut self, buf: &mut [u8]) -> bitcoin_io::Result<u
pub fn bitcoin_io::Read::read_exact(&mut self, buf: &mut [u8]) -> bitcoin_io::Result<()>
pub fn bitcoin_io::Read::read_to_limit(&mut self, buf: &mut alloc::vec::Vec<u8>, limit: u64) -> bitcoin_io::Result<usize>
pub fn bitcoin_io::Read::take(&mut self, limit: u64) -> bitcoin_io::Take<'_, Self>
pub fn bitcoin_io::Sink::clone(&self) -> bitcoin_io::Sink
pub fn bitcoin_io::Sink::default() -> bitcoin_io::Sink
pub fn bitcoin_io::Sink::flush(&mut self) -> bitcoin_io::Result<()>
pub fn bitcoin_io::Sink::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
pub fn bitcoin_io::Sink::write(&mut self, buf: &[u8]) -> bitcoin_io::Result<usize>
Expand Down
13 changes: 13 additions & 0 deletions api/io/no-features.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,19 @@ impl bitcoin_io::Read for &[u8]
impl bitcoin_io::Write for &mut [u8]
impl bitcoin_io::Write for bitcoin_io::Sink
impl core::clone::Clone for bitcoin_io::ErrorKind
impl core::clone::Clone for bitcoin_io::Sink
impl core::cmp::Eq for bitcoin_io::ErrorKind
impl core::cmp::PartialEq for bitcoin_io::ErrorKind
impl core::convert::From<bitcoin_io::ErrorKind> for bitcoin_io::Error
impl core::convert::From<core::convert::Infallible> for bitcoin_io::ErrorKind
impl core::default::Default for bitcoin_io::Sink
impl core::fmt::Debug for bitcoin_io::Error
impl core::fmt::Debug for bitcoin_io::ErrorKind
impl core::fmt::Debug for bitcoin_io::Sink
impl core::fmt::Display for bitcoin_io::Error
impl core::hash::Hash for bitcoin_io::ErrorKind
impl core::marker::Copy for bitcoin_io::ErrorKind
impl core::marker::Copy for bitcoin_io::Sink
impl core::marker::Freeze for bitcoin_io::Error
impl core::marker::Freeze for bitcoin_io::ErrorKind
impl core::marker::Freeze for bitcoin_io::Sink
Expand Down Expand Up @@ -45,12 +48,17 @@ impl<R: bitcoin_io::Read + ?core::marker::Sized> bitcoin_io::Read for bitcoin_io
impl<T: bitcoin_io::BufRead> bitcoin_io::BufRead for &mut T
impl<T: bitcoin_io::Read> bitcoin_io::Read for &mut T
impl<T: bitcoin_io::Write> bitcoin_io::Write for &mut T
impl<T: core::clone::Clone> core::clone::Clone for bitcoin_io::Cursor<T>
impl<T: core::cmp::Eq> core::cmp::Eq for bitcoin_io::Cursor<T>
impl<T: core::cmp::PartialEq> core::cmp::PartialEq for bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::BufRead for bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::Cursor<T>
impl<T: core::convert::AsRef<[u8]>> bitcoin_io::Read for bitcoin_io::Cursor<T>
impl<T: core::default::Default> core::default::Default for bitcoin_io::Cursor<T>
impl<T: core::fmt::Debug> core::fmt::Debug for bitcoin_io::Cursor<T>
impl<T> core::marker::Freeze for bitcoin_io::Cursor<T> where T: core::marker::Freeze
impl<T> core::marker::Send for bitcoin_io::Cursor<T> where T: core::marker::Send
impl<T> core::marker::StructuralPartialEq for bitcoin_io::Cursor<T>
impl<T> core::marker::Sync for bitcoin_io::Cursor<T> where T: core::marker::Sync
impl<T> core::marker::Unpin for bitcoin_io::Cursor<T> where T: core::marker::Unpin
impl<T> core::panic::unwind_safe::RefUnwindSafe for bitcoin_io::Cursor<T> where T: core::panic::unwind_safe::RefUnwindSafe
Expand Down Expand Up @@ -88,7 +96,10 @@ pub fn &mut [u8]::flush(&mut self) -> bitcoin_io::Result<()>
pub fn &mut [u8]::write(&mut self, buf: &[u8]) -> bitcoin_io::Result<usize>
pub fn bitcoin_io::BufRead::consume(&mut self, amount: usize)
pub fn bitcoin_io::BufRead::fill_buf(&mut self) -> bitcoin_io::Result<&[u8]>
pub fn bitcoin_io::Cursor<T>::clone(&self) -> bitcoin_io::Cursor<T>
pub fn bitcoin_io::Cursor<T>::consume(&mut self, amount: usize)
pub fn bitcoin_io::Cursor<T>::default() -> bitcoin_io::Cursor<T>
pub fn bitcoin_io::Cursor<T>::eq(&self, other: &bitcoin_io::Cursor<T>) -> bool
pub fn bitcoin_io::Cursor<T>::fill_buf(&mut self) -> bitcoin_io::Result<&[u8]>
pub fn bitcoin_io::Cursor<T>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
pub fn bitcoin_io::Cursor<T>::get_mut(&mut self) -> &mut T
Expand All @@ -111,6 +122,8 @@ pub fn bitcoin_io::ErrorKind::hash<__H: core::hash::Hasher>(&self, state: &mut _
pub fn bitcoin_io::Read::read(&mut self, buf: &mut [u8]) -> bitcoin_io::Result<usize>
pub fn bitcoin_io::Read::read_exact(&mut self, buf: &mut [u8]) -> bitcoin_io::Result<()>
pub fn bitcoin_io::Read::take(&mut self, limit: u64) -> bitcoin_io::Take<'_, Self>
pub fn bitcoin_io::Sink::clone(&self) -> bitcoin_io::Sink
pub fn bitcoin_io::Sink::default() -> bitcoin_io::Sink
pub fn bitcoin_io::Sink::flush(&mut self) -> bitcoin_io::Result<()>
pub fn bitcoin_io::Sink::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
pub fn bitcoin_io::Sink::write(&mut self, buf: &[u8]) -> bitcoin_io::Result<usize>
Expand Down
4 changes: 2 additions & 2 deletions io/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ impl BufRead for &[u8] {
}

/// Wraps an in memory reader providing the `position` function.
#[derive(Debug)]
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct Cursor<T> {
inner: T,
pos: u64,
Expand Down Expand Up @@ -335,7 +335,7 @@ impl Write for &mut [u8] {
/// A sink to which all writes succeed. See [`std::io::Sink`] for more info.
///
/// Created using `io::sink()`.
#[derive(Debug)]
#[derive(Clone, Copy, Debug, Default)]
pub struct Sink;

impl Write for Sink {
Expand Down

0 comments on commit 1d1fcb0

Please sign in to comment.