Make std::io::Buffer object-safe.

[breaking-change]
Any uses of Buffer::lines() and Buffer::chars() will need to use the new trait std::io::BufferPrelude.
This commit is contained in:
Ricky Taylor 2014-11-08 21:59:09 +00:00
parent 15ba87f031
commit 43fd6446ad
2 changed files with 25 additions and 12 deletions

View File

@ -1402,16 +1402,6 @@ pub trait Buffer: Reader {
)
}
/// Create an iterator that reads a line on each iteration until EOF.
///
/// # Error
///
/// Any error other than `EndOfFile` that is produced by the underlying Reader
/// is returned by the iterator and should be handled by the caller.
fn lines<'r>(&'r mut self) -> Lines<'r, Self> {
Lines { buffer: self }
}
/// Reads a sequence of bytes leading up to a specified delimiter. Once the
/// specified byte is encountered, reading ceases and the bytes up to and
/// including the delimiter are returned.
@ -1487,7 +1477,10 @@ pub trait Buffer: Reader {
None => Err(standard_error(InvalidInput))
}
}
}
/// Extension methods for the Buffer trait which are included in the prelude.
pub trait BufferPrelude {
/// Create an iterator that reads a utf8-encoded character on each iteration
/// until EOF.
///
@ -1495,9 +1488,25 @@ pub trait Buffer: Reader {
///
/// Any error other than `EndOfFile` that is produced by the underlying Reader
/// is returned by the iterator and should be handled by the caller.
fn chars<'r>(&'r mut self) -> Chars<'r, Self> {
fn chars<'r>(&'r mut self) -> Chars<'r, Self>;
/// Create an iterator that reads a line on each iteration until EOF.
///
/// # Error
///
/// Any error other than `EndOfFile` that is produced by the underlying Reader
/// is returned by the iterator and should be handled by the caller.
fn lines<'r>(&'r mut self) -> Lines<'r, Self>;
}
impl<T: Buffer> BufferPrelude for T {
fn chars<'r>(&'r mut self) -> Chars<'r, T> {
Chars { buffer: self }
}
fn lines<'r>(&'r mut self) -> Lines<'r, T> {
Lines { buffer: self }
}
}
/// When seeking, the resulting cursor is offset from a base by the offset given
@ -1968,4 +1977,8 @@ mod tests {
assert_eq!(format!("{}", ALL_PERMISSIONS), "0777".to_string());
assert_eq!(format!("{}", USER_READ | USER_WRITE | OTHER_WRITE), "0602".to_string());
}
fn _ensure_buffer_is_object_safe<T: Buffer>(x: &T) -> &Buffer {
x as &Buffer
}
}

View File

@ -75,7 +75,7 @@
#[doc(no_inline)] pub use path::{GenericPath, Path, PosixPath, WindowsPath};
#[doc(no_inline)] pub use ptr::{RawPtr, RawMutPtr};
#[doc(no_inline)] pub use result::{Result, Ok, Err};
#[doc(no_inline)] pub use io::{Buffer, Writer, Reader, Seek};
#[doc(no_inline)] pub use io::{Buffer, Writer, Reader, Seek, BufferPrelude};
#[doc(no_inline)] pub use str::{Str, StrVector, StrPrelude};
#[doc(no_inline)] pub use str::{IntoMaybeOwned, StrAllocating, UnicodeStrPrelude};
#[doc(no_inline)] pub use to_string::{ToString, IntoStr};