blob: a81fae56d6bd80c925b728acd4dfc4cbac0540c0 [file] [log] [blame]
// 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) }
}