Skip to content

Broadcast writing on README no longer compiles (due to removal of broadcast()) #66

@tatsuya6502

Description

@tatsuya6502

The "broadcast writing (simple file copying)" example on the README.md no longer compiles. This is because Writer::broadcast() was never stabilized and removed from Nightly libstd on Mar 8, 2016.

I think a simple workaround is to change the example as the followings:

extern crate pbr;

use std::io::copy;
use pbr::{ProgressBar, Units};
use std::fs::File;
use std::io::Write;

fn main() {
    let mut file = File::open("/usr/share/dict/words").unwrap();
    let n_bytes = file.metadata().unwrap().len() as usize;
    let mut pb = ProgressBar::new(n_bytes as u64);
    pb.set_units(Units::Bytes);
    let mut handle = File::create("copy-words").unwrap();
    {
        let mut tee = TeeWriter::new(&mut handle, &mut pb);
        copy(&mut file, &mut tee).unwrap();
    }
    pb.finish_print("done");
}

/// Tee (T-Split) Writer writes the same data to two child writers.
struct TeeWriter<'a, T1: Write + 'a, T2: Write + 'a> {
    w1: &'a mut T1,
    w2: &'a mut T2,
}

impl<'a, T1, T2> TeeWriter<'a, T1, T2>
where
    T1: Write + 'a,
    T2: Write + 'a,
{
    fn new(w1: &'a mut T1, w2: &'a mut T2) -> Self {
        Self { w1, w2 }
    }
}

impl<'a, T1, T2> Write for TeeWriter<'a, T1, T2>
where
    T1: Write + 'a,
    T2: Write + 'a,
{
    #[inline]
    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
        let size1 = self.w1.write(buf)?;
        let size2 = self.w2.write(buf)?;
        Ok(size1.min(size2))
    }

    #[inline]
    fn flush(&mut self) -> std::io::Result<()> {
        self.w1.flush()?;
        self.w2.flush()
    }
}

Or, for convenience, maybe we can add something like TeeWriter above to this crate.

I could work on either ideas. Please let me know your thoughts.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions