1use std::io::{Result, Write};
2
3pub struct BroadcastWriter<A: Write, B: Write> {
5 primary: A,
6 secondary: B,
7}
8
9impl<A: Write, B: Write> BroadcastWriter<A, B> {
10 pub fn new(primary: A, secondary: B) -> BroadcastWriter<A, B> {
14 BroadcastWriter {
15 primary: primary,
16 secondary: secondary,
17 }
18 }
19}
20
21impl<A: Write, B: Write> Write for BroadcastWriter<A, B> {
22 fn write(&mut self, data: &[u8]) -> Result<usize> {
23 let n = try!(self.primary.write(data));
24 try!(self.secondary.write_all(&data[..n]));
25 Ok(n)
26 }
27
28 fn flush(&mut self) -> Result<()> {
29 self.primary.flush().and(self.secondary.flush())
30 }
31}
32
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37 use std::io::Write;
38 #[test]
39 fn broadcast() {
40 let mut first = Vec::new();
41 let mut second = Vec::new();
42 {
43 let mut broadcaster = BroadcastWriter::new(&mut first, &mut second);
44 let _ = broadcaster.write(b"it's over 9000!");
45 }
46 assert_eq!(first, second);
47 }
48}