Skip to content

Commit 68e2d64

Browse files
committed
move MultiReader to lib
1 parent fbd89a9 commit 68e2d64

File tree

3 files changed

+32
-27
lines changed

3 files changed

+32
-27
lines changed

chapter3/src/3_7/main.rs

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,7 @@ use std::{
55
usize,
66
};
77

8-
struct MultiReader<R> {
9-
readers: Vec<R>,
10-
pos: usize,
11-
}
12-
13-
impl<R: Read> MultiReader<R> {
14-
fn new(readers: Vec<R>) -> Self {
15-
Self { readers, pos: 0 }
16-
}
17-
}
18-
19-
impl<R: Read> Read for MultiReader<R> {
20-
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
21-
loop {
22-
match self.readers.get_mut(self.pos) {
23-
Some(r) => {
24-
let n = r.read(buf)?;
25-
if n > 0 {
26-
return Ok(n);
27-
}
28-
}
29-
None => return Ok(0),
30-
}
31-
self.pos = self.pos + 1;
32-
}
33-
}
34-
}
8+
use lib::io::MultiReader;
359

3610
struct TeeReader<R, W>
3711
where

lib/src/io.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
mod multi_reader;
12
mod multi_writer;
23

4+
pub use multi_reader::MultiReader;
35
pub use multi_writer::MultiWriter;

lib/src/io/multi_reader.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
use std::io::Read;
2+
3+
pub struct MultiReader<R> {
4+
readers: Vec<R>,
5+
pos: usize,
6+
}
7+
8+
impl<R: Read> MultiReader<R> {
9+
pub fn new(readers: Vec<R>) -> Self {
10+
Self { readers, pos: 0 }
11+
}
12+
}
13+
14+
impl<R: Read> Read for MultiReader<R> {
15+
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
16+
loop {
17+
match self.readers.get_mut(self.pos) {
18+
Some(r) => {
19+
let n = r.read(buf)?;
20+
if n > 0 {
21+
return Ok(n);
22+
}
23+
}
24+
None => return Ok(0),
25+
}
26+
self.pos = self.pos + 1;
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)