// Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. //! Some various other I/O types // FIXME(#3660): should move to libextra use prelude::*; use super::*; /// A Writer decorator that compresses using the 'deflate' scheme pub struct DeflateWriter { inner_writer: W } impl DeflateWriter { pub fn new(inner_writer: W) -> DeflateWriter { DeflateWriter { inner_writer: inner_writer } } } impl Writer for DeflateWriter { fn write(&mut self, _buf: &[u8]) { fail2!() } fn flush(&mut self) { fail2!() } } impl Decorator for DeflateWriter { fn inner(self) -> W { match self { DeflateWriter { inner_writer: w } => w } } fn inner_ref<'a>(&'a self) -> &'a W { match *self { DeflateWriter { inner_writer: ref w } => w } } fn inner_mut_ref<'a>(&'a mut self) -> &'a mut W { match *self { DeflateWriter { inner_writer: ref mut w } => w } } } /// A Reader decorator that decompresses using the 'deflate' scheme pub struct InflateReader { inner_reader: R } impl InflateReader { pub fn new(inner_reader: R) -> InflateReader { InflateReader { inner_reader: inner_reader } } } impl Reader for InflateReader { fn read(&mut self, _buf: &mut [u8]) -> Option { fail2!() } fn eof(&mut self) -> bool { fail2!() } } impl Decorator for InflateReader { fn inner(self) -> R { match self { InflateReader { inner_reader: r } => r } } fn inner_ref<'a>(&'a self) -> &'a R { match *self { InflateReader { inner_reader: ref r } => r } } fn inner_mut_ref<'a>(&'a mut self) -> &'a mut R { match *self { InflateReader { inner_reader: ref mut r } => r } } } #[cfg(test)] mod test { use prelude::*; use super::*; use super::super::mem::*; use super::super::Decorator; use str; #[test] #[ignore] fn smoke_test() { let mem_writer = MemWriter::new(); let mut deflate_writer = DeflateWriter::new(mem_writer); let in_msg = "test"; let in_bytes = in_msg.as_bytes(); deflate_writer.write(in_bytes); deflate_writer.flush(); let buf = deflate_writer.inner().inner(); let mem_reader = MemReader::new(buf); let mut inflate_reader = InflateReader::new(mem_reader); let mut out_bytes = [0, .. 100]; let bytes_read = inflate_reader.read(out_bytes).unwrap(); assert_eq!(bytes_read, in_bytes.len()); let out_msg = str::from_utf8(out_bytes); assert!(in_msg == out_msg); } }