1
Fork 0

Don't allow newtype structs to be dereferenced. #6246

This commit is contained in:
Brian Anderson 2013-11-01 18:06:31 -07:00
parent 18cef3fad4
commit 3b1862a82f
78 changed files with 594 additions and 674 deletions

View file

@ -243,9 +243,31 @@ impl<W: Writer> Decorator<W> for LineBufferedWriter<W> {
struct InternalBufferedWriter<W>(BufferedWriter<W>);
impl<W> InternalBufferedWriter<W> {
fn get_mut_ref<'a>(&'a mut self) -> &'a mut BufferedWriter<W> {
let InternalBufferedWriter(ref mut w) = *self;
return w;
}
}
impl<W: Writer> Decorator<W> for InternalBufferedWriter<W> {
fn inner(self) -> W {
let InternalBufferedWriter(s) = self;
s.inner()
}
fn inner_ref<'a>(&'a self) -> &'a W {
let InternalBufferedWriter(ref s) = *self;
s.inner_ref()
}
fn inner_mut_ref<'a>(&'a mut self) -> &'a mut W {
let InternalBufferedWriter(ref mut s) = *self;
s.inner_mut_ref()
}
}
impl<W: Reader> Reader for InternalBufferedWriter<W> {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.inner.read(buf) }
fn eof(&mut self) -> bool { self.inner.eof() }
fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.get_mut_ref().inner.read(buf) }
fn eof(&mut self) -> bool { self.get_mut_ref().inner.eof() }
}
/// Wraps a Stream and buffers input and output to and from it
@ -282,15 +304,15 @@ impl<S: Stream> Reader for BufferedStream<S> {
}
impl<S: Stream> Writer for BufferedStream<S> {
fn write(&mut self, buf: &[u8]) { self.inner.inner.write(buf) }
fn flush(&mut self) { self.inner.inner.flush() }
fn write(&mut self, buf: &[u8]) { self.inner.inner.get_mut_ref().write(buf) }
fn flush(&mut self) { self.inner.inner.get_mut_ref().flush() }
}
impl<S: Stream> Decorator<S> for BufferedStream<S> {
fn inner(self) -> S { self.inner.inner.inner() }
fn inner_ref<'a>(&'a self) -> &'a S { self.inner.inner.inner_ref() }
fn inner_mut_ref<'a>(&'a mut self) -> &'a mut S {
self.inner.inner.inner_mut_ref()
self.inner.inner.get_mut_ref().inner_mut_ref()
}
}