auto merge of #18788 : ricky26/rust/master, r=aturon
This moves chars() and lines() out of Buffer and into separate traits (CharsBuffer and LinesBuffer respectively) - this matches the pattern used for bytes() on Reader (with BytesReader). (I came across this when I wanted a trait object of a Buffer, so that I could use read_line(); rustc errors about std::io::Buffer not being object-safe.) [breaking-change] Any uses of Buffer::lines() will need to use the new trait std::io::LinesBuffer. The same is true for Buffer::chars() with std::io::CharsBuffer.
This commit is contained in:
commit
cb51567e19
@ -1437,16 +1437,6 @@ fn read_line(&mut self) -> IoResult<String> {
|
||||
)
|
||||
}
|
||||
|
||||
/// 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.
|
||||
@ -1522,7 +1512,10 @@ fn read_char(&mut self) -> IoResult<char> {
|
||||
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.
|
||||
///
|
||||
@ -1530,9 +1523,25 @@ fn read_char(&mut self) -> IoResult<char> {
|
||||
///
|
||||
/// 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
|
||||
@ -2003,4 +2012,8 @@ fn test_show() {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +73,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};
|
||||
|
Loading…
Reference in New Issue
Block a user