| // Copyright 2016-2018 Austin Bonander <austin.bonander@gmail.com> |
| // |
| // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or |
| // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your |
| // option. This file may not be copied, modified, or distributed |
| // except according to those terms. |
| |
| //! Anything requiring unstable features (specialization, `Read::initializer()`, etc) |
| |
| use std::fmt; |
| use std::io::{Read, Write}; |
| |
| use super::{BufReader, BufWriter, LineWriter}; |
| |
| use policy::{WriterPolicy, MoveStrategy, ReaderPolicy}; |
| |
| impl<R, Rs: ReaderPolicy> fmt::Debug for BufReader<R, Rs> { |
| default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| f.debug_struct("buf_redux::BufReader") |
| .field("reader", &"(no Debug impl)") |
| .field("available", &self.buf_len()) |
| .field("capacity", &self.capacity()) |
| .field("read_strategy", &self.read_strat) |
| .field("move_strategy", &self.move_strat) |
| .finish() |
| } |
| } |
| |
| impl<W: Write, Fs: WriterPolicy> fmt::Debug for BufWriter<W, Fs> { |
| default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| f.debug_struct("buf_redux::BufWriter") |
| .field("writer", &"(no Debug impl)") |
| .field("capacity", &self.capacity()) |
| .field("flush_strategy", &self.policy) |
| .finish() |
| } |
| } |
| |
| impl<W: Write> fmt::Debug for LineWriter<W> { |
| default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| f.debug_struct("buf_redux::LineWriter") |
| .field("writer", &"(no Debug impl)") |
| .field("capacity", &self.capacity()) |
| .finish() |
| } |
| } |
| |
| pub fn init_buffer<R: Read + ?Sized>(rdr: &R, buf: &mut [u8]) { |
| // no invariants for consumers to uphold: |
| // https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.initializer |
| unsafe { rdr.initializer().initialize(buf) } |
| } |